Congratulate on releasing. Well done! A few questions: 1. Will secondary indices be ever supported? Range scan with a different order than the primary key is very welcomed. E.g. date range query. 2. Do you support conditional update? Or any kind of optimistic locking or versioning to coordinate concurrent updates from different clients? 3. Related to 2. How can loosely-sequential Id be generated using a table? 4. Wil…
Secondary indices are one of the most asked for features so they'll probably be added in the next release. No promises though secondary indices are tough to do right and we won't ship them if they're not great.
> 2. Do you support conditional update? Or any kind of optimistic locking or versioning to coordinate concurrent updates from different clients?
Updates can be done with conditions on the row. For example: table.filter(lambda x: x['age'] > 25).update(lambda x: {"salary" : x["salary"] + 25)
> 3. Related to 2. How can loosely-sequential Id be generated using a table?
Loosely-sequential IDs would have to be generated client side for now.
> 4. Will some transaction support be added? Don't need full ACID, just grouping updates (intra-table and/or inter-tables) in one shot would be nice. Should be feasible with MVCC already in place.
Eventually. No concrete timeline for this right now though.
> 5. Do all the clients hit a central server to initiate queries which then farms out the requests to different shards? Or the client library knows how to get to different shards directly? First case has a single-point-of-failure, and bottleneck in scaling.
A client makes a connection to a specific server and all queries go through that server. However every server can file this role so connections can be distributed and there's no single point of failure. An even better option is to run a proxy on the same machine as the client. For more info run:
rethinkdb --help proxy
> 6. Do you support automatically re-balancing of shard data (data migration) when new shards are added or old ones retired?
Right now sharding is a manual process. You tell the server how many shards you want and it handles figuring out how to evenly split the data, picking machines to host them and getting the data where it needs to go. What it doesn't do is readjust the split points when the data distribution changes. This will be a feature in RethinkDB 1.3.
> 7. How are authentication and authorization done? Or any clients can come in?
RethinkDB has no authentication built in to it. You should not allow people you don't trust to have access to it.
8. Internal detail. For out-of-date distributed query on the slave replicas, is there a cost-based (or load-based) decision process to pick the most idle replica to do the sub-query?
Right now we just select randomly. This is slated as a potential upgrade for 1.3. Especially if it proves to be a problem for people. Thus far it hasn't been for us in profiling runs but this is the type of problem that's more likely to show up in real world workloads.
9. Internal detail. Do you use Bloom Filter to optimize distributed joins?
We do not currently use bloom filters to optimize this.