pmem / kvdk

Key Value Development Kit

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

what is the difference between kvdk and pmemkv?

GOGOYAO opened this issue · comments

what is the difference between kvdk and pmemkv?

pmemkv is a kv framework which supports a lot of kv engines as plugin and user is able to access different engines via pmemkv API. While the design target of kvdk is a kv engine optimized for persistent memory, optane ssd and xeon CPU. So in brief, you can look kvdk as a engine plugin of pmemkv. (We are working on it, and will published soon).

pmemkv is a kv framework which supports a lot of kv engines as plugin and user is able to access different engines via pmemkv API. While the design target of kvdk is a kv engine optimized for persistent memory, optane ssd and xeon CPU. So in brief, you can look kvdk as a engine plugin of pmemkv. (We are working on it, and will published soon).

So, in pmemkv, we have several map engines, which I think is similar to kvdk. Could you tell me what the difference between them.

From the view of functionality, kvdk is still under development, and for now it only supports set/get/delete/scan operations as csmap engine in pmemkv, and we are working on the read-committed transaction and snapshot features.

From performance view, I'd suggest you do some benchmarks based on your environment and data operation pattern, and see which one fit best for your scenario :)

According to your word, I am still confused about why we need develop kvdk as we have pmemkv.
In pmemkv's docs, I can find the word pmemkv is a local/embedded key-value datastore optimized for persistent memory..
Could you tell me the purpose of kvdk more clearly or why we need kvdk as another plugin of pmemkv?

pmemkv is more of a framework at the moment, whereas kvdk is a work-in-progress reference code for a key-value store engine with a different approach to memory management than the existing pmemkv engine implementations.
We might add kvdk as a plugin to pmemkv at a later date.

I understand the confusion - there's a large design space of key-value stores (especially if you considered all the possible hardware configurations) that needs to be explored to find the best approaches for specific use-cases. KVDK represents a significant shift from the pmemkv's engines design ideas (that mostly uses libpmemobj-cpp data structures), hence the separate repository. Hope this makes sense.