`sqlite` is a lightweight database engine that gives an SQL interface to a data file that sits in your filesystem. It's well tested, robust, fast, and as it's a library it doesn't require external processes, let alone a database server. It's used extensively by web browsers and mobile apps due to its size, speed and simplicity.

This makes it an ideal starter database as you can treat a file like it's a database server, then move to a SQL server as you need more throughput.

There are two down-sides of using `sqlite` this way. Firstly, because the `.db` file exists on the server and is in memory you have less "defence in depth"; file or memory disclosure by the webserver can leak the whole database. Secondly, while concurrent reads are generally very fast, writes can cause lock contention. So if you have multiple users and a slow disk then it might not be the right choice.

Despite the scalability issues, it's a practical default for quickly developing a working prototype that includes a database component.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence