Luna engine #195
Replies: 8 comments 11 replies
-
do we need to take care of range operation(range delete, range set, point iterator over them, compact range) as a first-class citizen in the initial phase, it's the buggy & complex feature for the previous storage engine, but sometimes it overcomes the big shortage of KV abstraction, can we do it better if we take it at init phase - -? without range support, some situation is hard to use, e.g.
maybe it will impact the impl for us - - we also can get some input from cockroachdb/pebble#1339 and it's RFC |
Beta Was this translation helpful? Give feedback.
-
expect range, it seems the lock record also can be optimized to the only store in memory without persisted and replicated... it seems @sticnarf and @Little-Wallace have a great RFC about memory lock record ~ what do you think about "Does new operation supported by the engine can help users implement functions like rfcs#77?" @sticnarf @Little-Wallace , thanks 😄 |
Beta Was this translation helpful? Give feedback.
-
We may also support something like containers. A container is a set of related key-value pairs. For example, users can store a list/dict in a container. Then the engine can provide some advanced operations to manipulate containers. For example, deleting a container all together, or keeping a container in the same thread/node to avoid distributed transactions alike. |
Beta Was this translation helpful? Give feedback.
-
As for the thread model, I am also interested in the thread-per-core model. Each thread handles its own part of data and communicates with other threads (no matter locally or remotely) with messages. The message communication can be adjusted depending on the consistency level users require. For example, if we consider each key-value pair as an atomic variable, users can use |
Beta Was this translation helpful? Give feedback.
-
Maybe we can consider renaming it to |
Beta Was this translation helpful? Give feedback.
-
@huachaohuang thanks for starting this thread! I like the name It looks like we're working for a (Transaction)RockDB replacement which is extended to be deployed on cloud-native environment and more elastic storage/journal implementation (besides local file sys, it can be s3, ozone, etc.). As mentioned above, still we can keep figuring out optimizing for relational database workload, but our milestone is the collection API itself. I notice that the API of For "container" concept, I'll comment on the subthread. |
Beta Was this translation helpful? Give feedback.
-
After some offline discussions with some contributors, we agreed that we should keep the engine API simple at this stage. Here are some of our considerations:
However, I think transactions are still significant to a lot of applications. So I suggest positioning the Luna engine to be a transactional key-value engine with the following features:
If it sounds right, I may start prototyping some interfaces to bootstrap the development of v0.3. I think we don't need too many beforehand discussions, as long as we have a clear position. Things can always be improved, after all. |
Beta Was this translation helpful? Give feedback.
-
Hi~I'm curious about the importance of the table engine (or luna engine) in engula. Would a minimal viable product of table engine be in the milestone of a more formal version like "v1.0.0" or "v2.0.0"? What else would be included in "v1.0" in your image? |
Beta Was this translation helpful? Give feedback.
-
I'd like to propose the first flagship engine for Engula here. I name it Luna, aka
engula-luna-engine
.While I have some favorite ideas discussed here before, I also agree that it is more reasonable to start with simpler semantics at this moment. See also some background discussions here. So I decided to propose a more straightforward data model here.
I think the following APIs are intuitive and familiar for RocksDB users.
Some highlights:
TODO: I will add more descriptions later.
Beta Was this translation helpful? Give feedback.
All reactions