6 ms·
Show HN: BerylDB – a small key-value database
- cfferry 5y agohello YCombinator Community: I hope everyone is having a great week!! I'm working on a small key-value database, written in C++ and powered by RocksDB. It started as a hobby, but I am trying to slowly turn it into a stable project. The project is called BerylDB. A PHP API was released a couple of days ago, and currently working on a NodeJS gateway. I'm super excited about the project and actively improving its functionalities. The server is fully modular, which means that components can be loaded/unloaded as required. In addition to data storage, the server has channels, and clients can subscribe to them. This make it a great solution for real time analytics. The ultimate goal of this project is to have a community of custom modules that users may be interested on. This may be useful for developers and/or companies requiring specific needs. I'm open to collaborations! If you happen to have interested in databases, please let me know. I am on Discord. Any kind of collaboration or feedback would be appreciated. If you work for an startup or need high speed performance, please let me know! Discord: https://discord.gg/H6HVxeDq https://discord.gg/H6HVxeDq Docs: https://docs.beryl.dev/ https://docs.beryl.dev/ Server repository: https://github.com/beryldb/beryldb https://github.com/beryldb/beryldb Client (command line): https://github.com/beryldb/beryldb-cli https://github.com/beryldb/beryldb-cli PHP API: https://github.com/beryldb/php-beryl https://github.com/beryldb/php-beryl
- junon 5y agoYou need Show HN: in the title if this is your own project. Just an FYI. E: why the downvote?
- cfferry 5y agoThank you the tip, junon. I am just new to the community. Does current title work?
- piperswe 5y agoIt's specifically "Show HN"
- graderjs 5y agoHaha this is cute the author has now changed it to have the quotes. I think they misunderstood, but,--hello!-- my suggestion to the author is check out the shownew page and see the format of the submissions there and alter the title to reflect those. then it will show up on the shownew page and could hit the show page. https://news.ycombinator.com/shownew https://news.ycombinator.com/shownew
- techie128 5y agothe title should read - "Show HN: A small key-value database" -- without the double quotes.
- junon 5y agoAs it is now, yes. :)
- tlackemann 5y agoInterested in this project! Ever since Redis become much more than a KV, I've been seeking something a bit simpler. I'll admit, Redis is simple to get stared with, but there is a lot to learn once you do. What goals does Beryl have, both short and long? Does it aim to compete with Redis? Can you host a cluster of BerylDB instances? What type of benchmarks are you seeing?
- cfferry 5y agoThank you very much for your kind post! I am currently working on a cluster system. I am gauging whether to use the Raft consensus algorithm, or the typical master-slave replication schema. Not only that, but I am working on this as we speak. As your question about long-term goals goes: I am interested in real time analytics, so hopefully we can deploy a SaaS-based platform. I am working hard to make our modules developer-friendly, so you can have access to C++ speeds with little coding. These are dreams for now, as we are just getting started, I hope you understand. BerylDB is still in beta, and your input is appreciated. Sincerely.
- john-tells-all 5y agoWhat's the comparison to Redis?
- ipsum2 5y agoCan you compare Beryl with using Rocksdb directly?
- buu700 5y agoI was equally confused (read the headline, asked "how is that different from RocksDB?", and then read the explanation that it was based on RocksDB), but it sounds like this is actually an alternative to Redis, not RocksDB. So the difference is that it's exposed over a network, rather than embedded locally.
- jeremyjh 5y agoI spent a lot of time on the home page wondering if this is a network database server or an embedded database library.
- cfferry 5y agoThanks for your input! It's a TCP-based text protocol. We have implemented a simple protocol (https://github.com/beryldb/beryldb/blob/unstable/include/protocols.h#L16 https://github.com/beryldb/beryldb/blob/unstable/include/pro...) Thank you for your feedback. I am going to update the documentation and explain this issue using a different approach. Appreciated.
- reilly3000 5y agoLooks interesting! Do you have plans to add aggregations and analytics functions? It seems like you can do simple counting with TOUCH but I didn’t see any SUM etc. Can it run in-memory or just on disk? If in-memory how does it benchmark vs Redis? Thanks and congrats on the launch!
- edoceo 5y agoReminded me of that other Beryl, remember that thing? Flames on all my windows and lasers when I clicked, rad.
- swagonomixxx 5y agoWhat's the advantage of using BerylDB over Redis? Is it speed, or something else in the feature set (current or future)?
- PostThisTooFast 5y agoSounds pretty cool! The term is "key/value" FYI.
- tyingq 5y agoLooks clean and straightforward. Couple of questions... <server name="server2.beryl.dev" network="cluster"> It says the network key should be "Name of global network". Not sure what that is, and I don't see anything using it, printing it, etc. What's this for? Similar question on this: <listen address="127.0.0.1" port="6379" type="clients"> What is type? It says it defaults to "clients", but not what that means, what the other choices are, etc. Similar for "connecting class name". It's not clear what things that drives.
- tyingq 5y agoOn the PHP api, you're returning 0 when there's a failure. You also return 0 when there is no such key on a get(). That isn't a great idea, since that would mean no discernable difference from - An error, like a network error - No such key exists - Key did exist, and it's value was 0, though I suppose I could test the type with gettype()? Seems odd to return an int instead of a boolean though. For comparison, the phpredis api raises an exception for errors and returns a boolean false if no such key exists.
- cfferry 5y agoThis is great feedback, yingq. Thanks for it. I'll research a bit on providing a different approach. I am now thinking about returning arrays (containing a $status var), but will remain open to ideas. Ideas? At any rate, I appreciate your input.
- tyingq 5y agoBoth the redis and memcached PHP apis return boolean false when their equivalent of get() is called and no such key exists. Personally, I'd stick with that and raise an exception on network and similar types of errors. PHP also supports trigger_error() but there doesn't seem to be top level guidance on errors vs exceptions. Try/catch just seems more straightforward to me.
- cfferry 5y agoThis is exactly what I had in mind. I'll stick with it and add a catch exception. Thanks for your feedback!
- option_greek 5y agoNeat!. Feature request: 1) Please consider adding a rust helper library 2) Please consider making backups and fault-tolerance easier than current solutions