this post was submitted on 25 Dec 2024
367 points (99.5% liked)

Programmer Humor

19817 readers
1056 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] chonglibloodsport 5 points 2 days ago (1 children)

Persist everything to disk in real time. When the signal hits exit immediately.

[–] [email protected] 8 points 2 days ago (2 children)

Persist everything to disk in real time.

That’s the thing I’m trying to avoid.

[–] [email protected] 4 points 2 days ago* (last edited 2 days ago) (1 children)

Easier to do than to get never-exercised edge-case code to work flawlessly. Are you sure you can't just throw sqlite at the problem? It's often overkill but, hey, it's there on the shelf, might as well use it and I've seen it out-perform hand-rolled data structures. Non-persistent ones, written by very confident C coders. And remember crashes are unavoidable, if nothing else then someone can trip over the power cord.

[–] [email protected] 2 points 2 days ago* (last edited 2 days ago) (1 children)

You can’t know that from my issue description, but throwing a database at that problem really is ridiculous overkill.

Still thanks for the suggestion

[–] [email protected] 1 points 2 days ago* (last edited 2 days ago)

It's mostly about throwing ACID at the problem, sqlite just happens to be battle-tested to a ludicrous degree, it's light enough to not be unconscionable overhead in simple situations (unless you're on embedded), and performant enough to also deal with nastier situations so I prefer it over some random K/V store with the same guarantees. It's also a widely-used and stable data format which might come in handy.

That said, if you want to go lightweight do consider good, ole, POSIX filesystem guarantees, in particular that mv is atomic (as long as you stay on the same filesystem but that's easy to ensure by mv'ing within a directory). That's not durable on its own, you'll need to fsync for that, and consistency and integrity is up to your code.

[–] chonglibloodsport 1 points 2 days ago

Admittedly it’s very difficult if you want to maintain consistency but the benefits are enormous!