www.epicweb.dev
Why you should probably be using SQLite | Epic Web Dev
Excerpt
## Database size Another issue people sometimes bring up is database size. However, SQLite is capable of handling databases that are an Exabyte in size (that's one million Terabytes, or one billion Gigabytes 🤯). Most of us web developers don’t work with near that amount of data. You’ll have much different problems before database size is one of them with SQLite. … - SQLite does not support subscriptions which can be a limitation on certain real-time use cases. However, there are plenty of reasons to recommend against using database subscriptions for real-time use cases anyway. Scaling real-time use cases is quite challenging, and personally have really enjoyed letting Partykit do that part for me in my apps. - SQLite being a file on disk does make connecting from external clients effectively impossible. But with Fly.io at least, it’s easy to run prisma studio on the production server and proxy that for local access. If you need to connect to it from another app, then you’re out of luck and have to set up HTTP endpoints on the host app for any data you need (for now). - SQLite does not support plugins like TimescaleDB for Postgres. While time-series data is possible with SQLite, I do not have experience with this use case and can't speak to the challenges there. My intuition says it's not advisable to use SQLite for that use case, but maybe someone else can offer me more insight. - SQLite does not support enums which means you're forced to use strings. I have mixed feelings about this, but I mostly don't like enums anyway. The main drawback to this is when it comes to the typings for the client which doesn't allow you to ensure all values of a column are only within a set of specific possible values for the string. However, with Prisma client extensions, handling this kind of enforcement at the client (and typing) level is possible.
Related Pain Points
SQLite flexible typing causes compatibility issues during database migration
6SQLite's default flexible typing allows values of any type to be stored in any column, which works during development but causes applications to fail when migrated to stricter databases like PostgreSQL or SQL Server that enforce type rules.
No subscription support for real-time use cases
6SQLite does not support database subscriptions, making it unsuitable for real-time applications that require push notifications or live data synchronization between clients.
File-based architecture prevents external client connections
5SQLite's file-on-disk design makes it impossible for external applications to connect directly to the database. Data must be exposed through HTTP endpoints on the host application, adding complexity and architectural constraints.
No plugin support (e.g., TimescaleDB extensions)
4SQLite does not support database extensions or plugins like TimescaleDB for PostgreSQL, limiting optimization options for specialized workloads such as time-series data processing.