I dig logic programming, but I wish Racklog had better (or any?) constructs for storage. Racket Datalog can serialize a theory[0], but that still means you'll have to write it in its entirety to the disk after any accumulation of facts.
In my opinion the SQL language is inferior to Prolog, but in most SQL systems incremental update isn't a problem.
Here's a comparison of SQLite with xml-files-in-a-zip-file[1] (and the zip-based file format has similar problems as serializing a Datalog theory):
> It is difficult to update individual entries in a ZIP archive. It is especially difficult to update individual entries in a ZIP archive in a way that does not destroy the entire document if the computer loses power and/or crashes in the middle of the update. It is not impossible to do this, but it is sufficiently difficult that nobody actually does it. Instead, whenever the user selects "File/Save", the entire ZIP archive is rewritten. Hence, "File/Save" takes longer than it ought, especially on older hardware. Newer machines are faster, but it is still bothersome that changing a single character in a 50 megabyte presentation causes one to burn through 50 megabytes of the finite write life on the SSD.
[0]: https://docs.racket-lang.org/datalog/interop.html#%28def._%2...