Table is an in memory key-value store library
NOTE: Table is just my toy project, it may has some bugs, so do not use Table in production
- Keys and values are arbitrary byte arrays
- Data is stored sorted by key
- The basic operations are
put(key,value)
,get(key)
,del(key)
- Support for persisting data to disk
- Safe to use Table in multithreaded single writer multi-reader code
mkdir build && cd build
cmake .. && make -j4 && make install
TODO: Add building for unit-test
table::Options options;
options.create_if_missing = true;
table::Table table(options, "test_table");
table::Status s = table.open();
if(!s.good()) {
std::cerr << s.string() << std::endl;
}
table.close();
std::string key = "key";
std::string value = "value";
s = table.put(key, value);
if (!s.good()) {
std::cerr << s.string() << std::endl;
}
s = table.get(key, &value);
if (!s.good()) {
std::cerr << s.string() << std::endl;
} else {
std::cout << value << std::endl;
}
std::string key = "key";
std::string value = "value";
s = table.put(key, value);
if (!s.good()) {
std::cerr << s.string() << std::endl;
}
s = table.dump();
if (!s.good()) {
std::cerr << s.string() << std::endl;
}
or set options.dump_when_close = true;
- CPU: Intel Core i5 2.3 GHz
- CPU Cores(physical) num: 2
- CPU Cores(logical) num: 4
- CPU L2 Cache:256 KB
- CPU L3 Cache:4MB
- Key Size: 16
- Value Size:100
- GCC Optimization Level:O2
Put 100,000 entries into a empty Table
Times | Spend |
---|---|
1 | 178ms |
2 | 172ms |
3 | 155ms |
4 | 152ms |
5 | 146ms |
Put 1,000,000 entries into a empty Table
Times | Spend |
---|---|
1 | 3094ms |
2 | 2619ms |
3 | 2614ms |
4 | 2614ms |
5 | 2631ms |
Table has 100,000 entries, and we get 10,000 different keys from Table
Times | Spend |
---|---|
1 | 10ms |
2 | 11ms |
3 | 12ms |
4 | 14ms |
5 | 12ms |
Table has 1,000,000 entries, and we get 10,000 different keys from Table
Times | Spend |
---|---|
1 | 30ms |
2 | 35ms |
3 | 29ms |
4 | 29ms |
5 | 27ms |