Show HN: Redis is a cache. Opatomic is a database (opatomic.com)
I have been looking forward to this day for many years. The day I publicly share my project with the world. I thought it would be a glorious day full of great excitement. However, due to issues in my personal life I have decided to make the announcement early without completing several major features needed for launch. There's a long personal story in this project but I will forgo those details for now. I'm going with a short summary.
In my opinion, Opatomic is what Redis should have been. It improves many weaknesses in Redis and is compatible with the RESP protocol meaning you can use Redis clients if desired. It supports many of the Redis commands and should be growing that support over time. The source code for several functions is copied from Redis but otherwise it is a completely different codebase. It supports Linux, Windows, and MacOS.
The main things it improves are:
gracefully degrades performance when storage requirements exceed memory capacity (assuming non-random data access)
operations are truly atomic (all or nothing; rollback occurs on error)
persistence: startup is instant, shutdown requires minimal effort (mainly msync + fflush)
typically requires less memory per stored value, especially for small values (fewer pointers)
maps and sets are sorted and easily iterable
numbers do not lose precision and can exceed 64 bits
lists are stored as a tree; accessing a value at any index is O(log(N)) rather than O(N)
read only iterators, range queries, etc do not block other operations and large iterations do not typically increase memory usage by much (a full copy of the requested data is not allocated; data is copied on write if needed)
expiration is exact (not random)
no fork required: currently runs on 64-bit versions of linux, windows, mac
can subscribe and continue running commands on same connection
fast without requiring jemalloc or any external allocators
SRANDMEMBER, SPOP, RANDOMKEY have uniform distribution
(not yet available) perform multi-key read-only ops without blocking other ops (ie, long running read only script)
All of these features come at a cost in terms of speed. However, it is typically not too noticeable unless you are really pushing the limits of your Redis instance. Almost everything except the database server is open sourced. I'm torn between eventually open sourcing the server or using a source available license such as common clause.Read more info in the README and try out an in-browser WASM demo at https://opatomic.com
I'd love to hear comments on this project. Especially whether these ideas and concepts are worth continuing to pursue. My life is at a bit of a crossroads and I'm trying to decide whether to pull the plug or continue grinding with the project. Feel free to email me too.
Also, I am in search of a job. I am a US citizen based in the northeast US and looking for full or part time remote work.
email address in my profile
0 comments
[ 3.2 ms ] story [ 11.9 ms ] threadNo comments yet.