Snapchat / KeyDB

A Multithreaded Fork of Redis
https://keydb.dev
BSD 3-Clause "New" or "Revised" License
11.5k stars 578 forks source link

could you try to understand this library for improving keydb? #289

Open osevan opened 3 years ago

osevan commented 3 years ago

I found very fast dB in github, but not known by many guys.

It works without networkstack so no filedescriptor needed.

It works directly over library in memory and the owner claims, fastest in memory dB.

Could you benchmark itself and if its faster,upload your benchmark here and update keydb with whitedb as additional module to use as different make dbbackend=whitedb with keydb?

This will be win win situation for everyone who want use fast in memory db.

https://github.com/priitj/whitedb/tree/master/Doc

http://whitedb.org/speed.html

Thanks and

Best regards

JohnSully commented 3 years ago

Hey @osevan

The speed comes from using shared memory instead of sockets. In KeyDB socket IO can be >80% of CPU time for certain work loads so this can definitely be an improvement. I don't think integrating whitedb into KeyDB itself is feasible (we have to support a wide number of features) but having a shared memory interface is interesting.

The issue there is that we can only communicate with processes on the same machine. I'm not sure how common a use case this is.

osevan commented 3 years ago

Hey @osevan

The speed comes from using shared memory instead of sockets. In KeyDB socket IO can be >80% of CPU time for certain work loads so this can definitely be an improvement. I don't think integrating whitedb into KeyDB itself is feasible (we have to support a wide number of features) but having a shared memory interface is interesting.

The issue there is that we can only communicate with processes on the same machine. I'm not sure how common a use case this is.

Sometimes for highspeed in memory databases we didnt need additional server or servercluster itself,because we need best latency and fast inserts and reads.

So networkstack for.db.clustering not always needed.

For my usecases in 99,999 %

We need only one machine with very fast latency and huge amount writes and reads as possible.

I wish you good luck with understanding of library and try to plant in keydb.

Btw keydb is my favourite in memeory db.

Thumbs up

JohnSully commented 3 years ago

I would recommend trying out Unix sockets instead of using localhost as performance will be significantly better.

ddorian commented 3 years ago

The issue there is that we can only communicate with processes on the same machine. I'm not sure how common a use case this is.

It is the required step to get better performance: https://blog.acolyer.org/2019/06/24/fast-key-value-stores/ In-process rate limiting https://github.com/mailgun/gubernator.

In-process cache https://medium.com/vimeo-engineering-blog/video-metadata-caching-at-vimeo-a54b25f0b304

So an example step would be to import redis/keydb as a library in all your client nodes and it will implement a cluster with all your client nodes.