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
Docs: https://docs.beryl.dev/
Server repository: https://github.com/beryldb/beryldb
Client (command line): https://github.com/beryldb/beryldb-cli
PHP API: https://github.com/beryldb/php-beryl
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?
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.
It's a TCP-based text protocol. We have implemented a simple protocol (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.
<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.
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.
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.
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.
E: why the downvote?