For context, SQLite4 explored reimplementing SQLite using a key-value store on log-structured merge trees, like RocksDB and Cassandra. I'd be interested to hear why they stopped. Presumably reimplementing SQL on a KV store was seen as not worth it, when applications that are satisfied with an embedded KV store backend (which is much faster and simpler to write!) already have many options.
Everything I hear about SQLite3 always suggests that, essentially, it is considered "done". It does what it is supposed to do with great performance. There is nothing major left to do. If it doesn't meet your needs, pick a different SQL database. Which, while a totally alien concept in the modern software world, is actually a pretty cool thought. (I'm sure under the hood bugs are getting fixed and all)
Work on SQLite4 has concluded
31–40 of 161 posts
Re: Work on SQLite4 has concluded
#32Richard Hipp has said that they have signed contracts to support SQLite3 for 35 years. SQLite4 is never going to happen.
What kind of companies sign 35 year support contracts?
Re: Work on SQLite4 has concluded
#33Richard Hipp has said that they have signed contracts to support SQLite3 for 35 years. SQLite4 is never going to happen.
What kind of companies sign 35 year support contracts?
Re: Work on SQLite4 has concluded
#34The biggest thorn I found working with sqlite was the lack of ability to modify columns with ALTER TABLE which was a real pain. Doesn't look like this is fixed in sqlite4 though...
lack of window functions kill it's usefulness for me.
Re: Work on SQLite4 has concluded
#35Richard Hipp has said that they have signed contracts to support SQLite3 for 35 years. SQLite4 is never going to happen.
What kind of companies sign 35 year support contracts?
Example: industrial equipment, military stuff, bridges, aircraft, etc.
Re: Work on SQLite4 has concluded
#36Richard Hipp has said that they have signed contracts to support SQLite3 for 35 years. SQLite4 is never going to happen.
What kind of companies sign 35 year support contracts?
Re: Work on SQLite4 has concluded
#37Re: Work on SQLite4 has concluded
#38http://charlesleifer.com/blog/using-sqlite4-s-lsm-storage-en...
In peewee 3.0a I've also added built-in support for using the lsm1 virtual table if you're interested.
Re: Work on SQLite4 has concluded
#39The biggest thorn I found working with sqlite was the lack of ability to modify columns with ALTER TABLE which was a real pain. Doesn't look like this is fixed in sqlite4 though...
Same here. Had to switch to dockerized mariadb for local tests, because migrations wouldn't work.
Since you were nominally optimizing for migration, a zoom-out perspective may be to note that upgrading SQLite3 versions vs. upgrading major RDBMS versions is trivial/fast, relatively rarely required, also cohabitation of multiple versions works a lot easier, any kind of CI/CD process is going to be orders of magnitude faster and use much less CPU/memory/disk space, which means smaller build artifacts and thus faster transfer/download.
Re: Work on SQLite4 has concluded
#40For context, SQLite4 explored reimplementing SQLite using a key-value store on log-structured merge trees, like RocksDB and Cassandra. I'd be interested to hear why they stopped. Presumably reimplementing SQL on a KV store was seen as not worth it, when applications that are satisfied with an embedded KV store backend (which is much faster and simpler to write!) already have many options.
I think part of this is because of a fundamental limitation of sqlite that it's an embedded database that has to persist data on disk at all times: The design of LSM trees works well with databases with a resident in-memory component because it's an approximation of just dumping every new thing you see at the end of an unordered in-memory array. This is as opposed to a data structure like a b-tree where you have to /find/ exactly where to put the data first, and then put it there. This finding bit means you're doing a lot of random access in memory, which is thrashing all of your caches (CPU / disk etc). LSM trees avoid this thrashing by just dumping stuff at the end of an array. However this means you have to scan that array to do lookups (as opposed to something easier like binary search). Then as your array gets big, you merge and flush it down to a lower "layer" of the lsm tree which is slightly bigger and sorted. And when that one fills, you flush further. And these merge-flushes are nice big sequential writes so that's nice too.
Anyway, with SQLite, the highest layer of your LSM tree would probably (this is conjecture) have to be on disk because of the way that there is no server component, versus in an in-memory system it'd probably be in your L2/L3 cache or at least your main memory. So this could be one reason why that model didn't work out as well for them.