Enjoyed this series, I found your indexing technique to be ingenious, in particular!
Let me add my two cents:
I've actually used BoltDB at my startup as my app's primary data storage. Eventually, I switched to Postgres.
In my opinion, what makes a database a "proper database" is a querying language. Otherwise, you just have a storage with nice features.
The ability to write ad-hoc, one-off queries is crucial for startups when you need to get answers to questions (from stakeholders/users/devs) while your app is running.
In the case of an embedded database, you'd have to:
- Write new custom code to query data and redeploy;
- Copy your data from the production environment to a local one, then write your code and run it.
Also, while having a single-file database with a process that has a lock on it is convenient, it becomes a huge pain when you want other processes/apps to connect to the same data source.
As always, this is all very context-dependent. I think BoltDB and similar kv-storages can be a great default option for a lot of cases.
Enjoyed this series, I found your indexing technique to be ingenious, in particular!
Let me add my two cents:
I've actually used BoltDB at my startup as my app's primary data storage. Eventually, I switched to Postgres.
In my opinion, what makes a database a "proper database" is a querying language. Otherwise, you just have a storage with nice features.
The ability to write ad-hoc, one-off queries is crucial for startups when you need to get answers to questions (from stakeholders/users/devs) while your app is running.
In the case of an embedded database, you'd have to:
- Write new custom code to query data and redeploy;
- Copy your data from the production environment to a local one, then write your code and run it.
Also, while having a single-file database with a process that has a lock on it is convenient, it becomes a huge pain when you want other processes/apps to connect to the same data source.
As always, this is all very context-dependent. I think BoltDB and similar kv-storages can be a great default option for a lot of cases.