Review my software: Keyspace consistently replicated key-value store
scalien.com
scalien.com
Very nice homepage btw.
Edited: added "also" between "server speak". I didn't mean you should dump your current API.
However, we are certainly going to bring back memcache protocol support if users demand it (the old memcache code is still in the source tree right now).
Thanks.
One of the reasons we focused on an early release is to gauge user (client) interest. What's the level of interest in replication, consistent replication or distributed systems in general? Are people willing to use a newcomer's software? And so on..
Right now we have a few beta users, and are hoping to pick up new users with this release.
You can only write to the current master, and reading from slaves may suffer from replication lag - so if you need to write and then read back the same value you need to read against the master as well.
Your underlying storage is BerkeleyDB, so your write speed is limited to BerkeleyDB's write speed (which is pretty fast). If I wanted to scale writes I'd need to run multiple sharded keyspace instances, in the same way I might run sharded MySQL databases.
Is this accurate, or did I misunderstand something?
Some terminology: we differentiate safe-reads, which go through the master and always reflect previous writes which have been OK'd and dirty-reads, which can go through any server, even if no other servers are up; there are absolutely no guarantees with dirty-reads, but it scales linearly, although this is not the indented primary use-case of Keyspace.
Keyspace does not contain horizontal partitioning aka. sharding, we plan to build such a layer on top of Keyspace. The exact details of this layer are still being debated, so it its exact position in design space is unclear --- it partly depends on input we get from this release.
I presume Keyspace would offer much better performance because it doesn't have to worry about 95% of the stuff a SQL db does. Drizzle seems like it falls somewhere in the middle of the solution in the above paragraph and Keyspace. Is that a fair assessment?
One thing I wanted (among many) with our solution was the ability to specify async disk forcing (an oxymoron?). I'm willing to allow a database to return control to me before writing if it thinks it will be able to write something to disk within N seconds. The increase in performance for most non-transactional systems (meaning that a few seconds of data loss occurring once a year wouldn't hurt too badly) would more than make up for the risk. Terracotta, Gigaspaces, etc. are interesting to me because they facilitate async persistence.
If you use memcached appropriately, then I suppose Keyspace should be able to handle the "remaining" reads and writes?
With Keyspace, you currently cannot turn off disk syncs --- note that Keyspace is still very fast with disk syncs --- as this would break our replication algorithm, Paxos. We might make this an option if users request, which would result in a weird replication consistency somewhat like "eventual consistency", but differing from what is usually refered to under this term. Btw, making this an option is quite easy, roughly 2 minute of work (TXN_NOSYNC with BDB).
Is there a replication delay issue with Keystore?
Very interesting!
Our intention, with the AGPL, versus the GPL is to close the SaaS loophole, so if you base a service on top of a modified Keyspace, you have to publicize your changes. But you can use it, sell it, distribute it, etc. just as you can with the GPL license.
Also, you can license Keyspace under different terms, ie. under a non-open license, at a reasonable price.
It's quite a gamble you're taking with the license, and one fairly orthogonal to your actual project.