rosedblabs / rosedb

Lightweight, fast and reliable key/value storage engine based on Bitcask.
https://rosedblabs.github.io
Apache License 2.0
4.58k stars 632 forks source link

Possible project use #291

Closed lonnietc closed 10 months ago

lonnietc commented 11 months ago

Hello All,

I am developing on new type of OS basically from the ground up and is not based upon Linux, Windows, or others and is more akin to a Microkernel Hypervisor for which I have the kernel now and a limited Userland implementation that will be expanded going forward. For applications on existing platforms, there will be application compatibility layers for each application OS type.

In any case, I want to make some very unique features a and one of them is a type of database filesystem which is "sort of" along the lines of the old Novell mapping filesystem but not exactly.

What I am thinking about is to use a specialized performant Key-Value approach for that and the compatibility layers will translate the needed call to get the date from the KV database that services the whole system That's the idea at least.

I have been researching many possibilities and think that perhaps embedding RoseDB into a filesystem service could be a possible solution but I have some questions about what it can, and cannot, currently do so that I can determine what may need to be implemented.

Outstanding Questions:

  1. Does rosedb support binary, blob, and similar data types?

  2. Can it store/retrieve nested multiple key-values:

    
    For example:   

set person1
first = "john" last = "doe" address: city = "a town" state = "MD"

and then using a "get" (or similar)

get person1->address->state (results in "MD")

Basically, the question is about nesting multiple KV's

3.  Can rosedb append/delete KV's to something like above (2), for example to add:  

append person1->address->zip = 12345

Maybe "delete" nested KV would be similar.

4. Not sure about this idea, but perhaps being able to add some type of "pointer" KEY so that for example you could say something like:

point person2->person1

which then could be navigated to get the same information from the original person1 since there are now 2 instances pointing to the same structure.

get person2->address->state (results in "MD")

of course we might have a "copy" command as well:

copy person1->person2

which would make a complete copy of the whole structure.

and

delete person2 just removed the pointer to the structure.

The idea is that a pointer approach would not make multiple copies of the same structure.


These are just some of the ideas that I was thinking about which rosedb might already have some type of implementation for some of these.

Any thoughts would be greatly appreciated.
Thanks in advance
roseduan commented 11 months ago

Thanks for your attention.

  1. rosedb is a key/value storage engine that only supports simple k/v structure. But the value can be anything you want to store. You can transfer the binary or blob data into byte array that rosedb can accept. 2 3 4. I guess no, the same reason as the previous one.