scalableminds / fossildb Goto Github PK
View Code? Open in Web Editor NEWVersioned Key-Value Store with RocksDB backend and gRPC API
License: MIT License
Versioned Key-Value Store with RocksDB backend and gRPC API
License: MIT License
After implementing the standard grpc health check (#19) we should use it everywhere.
Sometimes users know a specific list of keys they want to get or put. Currently, they have to send many grpcs, one per key (except for the special case of prefix scan gets). To reduce overhead, it would be nice to add API endpoints that directly support this.
message OptionalLong {
optional uint64 value = 1;
}
message GetMultipleKeysByListRequest {
required string collection = 1;
repeated string keys = 2;
repeated OptionalLong versions = 3;
}
// length of versions should either be equal to length of keys, in which case each individual version is considered optional, or 0 (empty list), in which case None is assumed for every key.
message GetMultipleKeysByListReply {
required bool success = 1;
repeated string errorMessage = 2;
repeated bytes values = 4;
repeated uint64 actualVersions = 5;
repeated bool missingKeys = 6;
}
// if only some keys exist, values and actualVersions are be densified. missingValueIndices lists the keys for wich nothing has been found
(Note that the name GetMultipleKeys was unfortunately already taken by the prefix-scan-based request)
message PutMultipleKeysByListRequest {
required string collection = 1;
repeated string keys = 2;
repeated OptionalLong versions = 3;
}
message PutMultipleKeysByListReply {
required bool success = 1;
optional string errorMessage = 2;
}
Any comments on the API draft? @normanrz @philippotto
We saw autoheal trigger during large requests. This may have been due to the health check responding slowly while that other request was being handled. We should double-check that these are as independent as possible.
I assume that it is already fine, as errors should have been far more common otherwise, but Iโd rather check again.
Test the docker image with some basic settings (maybe with client?)
See #8
The server dockerfile doesn't have a healthcheck yet. Using the healthcheck from the client is not possible because it is in a different image. Possible options that I see:
Can we initialize the fossildb through the RocksDB options file?
The benefit would be that we can customize all RocksDB options, including compaction parameters.
To create new databases, we could ship an options file with the project.
See https://github.com/facebook/rocksdb/blob/master/java/src/main/java/org/rocksdb/OptionsUtil.java#L89
To be consistent with the usual grpc health check tools (e.g. for kubernetes) we should use the default health library.
There is a Java implementation
and example.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.