📅  最后修改于: 2023-12-03 14:59:22.973000             🧑  作者: Mango
arkk
是一个轻量级的单机键值存储引擎,基于 RocksDB 和 LevelDB,支持多种数据类型和 API,可用于存储各种数据,如 KV 数据、时序数据、配置信息等。
$ git clone git@github.com:icefox0801/arkk.git
$ cd arkk
$ make
$ make install
#include <arkk.h>
#include <cstdio>
int main() {
arkk::db_options opts;
opts.create_if_missing = true;
// 打开数据库
arkk::db* db;
arkk::status s = arkk::open(opts, "/path/to/db", &db);
if (!s.ok()) {
fprintf(stderr, "open database failed: %s\n", s.to_string().c_str());
return -1;
}
// 写入键值对
s = db->put("key", "value");
if (!s.ok()) {
fprintf(stderr, "write key-value pair failed: %s\n", s.to_string().c_str());
return -1;
}
// 读取键对应的值
std::string value;
s = db->get("key", &value);
if (s.ok()) {
printf("value of key 'key': %s\n", value.c_str());
} else {
fprintf(stderr, "read value of key failed: %s\n", s.to_string().c_str());
}
// 删除键值对
s = db->del("key");
if (!s.ok()) {
fprintf(stderr, "delete key 'key' failed: %s\n", s.to_string().c_str());
return -1;
}
// 关闭数据库
delete db;
return 0;
}
arkk::db_options
是数据库的配置选项,定义如下:
struct db_options {
bool create_if_missing = false; // 如果为 true,则在数据库不存在时创建数据库。
bool allow_overwrite = false; // 如果为 true,则允许多次插入同一个键对应的值,否则只插入一次。
std::string path; // 数据库存储的路径。
};
arkk::status
表示操作是否成功,定义如下:
struct status {
enum code {
OK = 0,
ERROR = 1,
NOT_FOUND = 2,
INVALID_ARGUMENT = 3,
CORRUPTION = 4,
IO_ERROR = 5
};
status() : code_(OK) {}
// 将状态码转换为字符串
std::string to_string() const;
// 判断状态是否成功
bool ok() const { return code_ == OK; }
code code_;
};
arkk::db
是数据库的句柄,定义如下:
class db {
public:
// 插入一个键值对
status put(const std::string& key, const std::string& value);
// 获取一个键对应的值
status get(const std::string& key, std::string* value);
// 删除一个键值对
status del(const std::string& key);
// 执行一次事务,仅在支持事务的数据库中生效,否则仅执行一次 put、get 或 del 操作
status exec(const std::function<void()>& fn);
// 关闭数据库
void close();
};
arkk
的数据结构包括:
db_options
):包含是否创建数据库、允许覆盖、存储路径等选项。status
):包含状态码、状态描述等信息。db
):包含插入键值对、获取键对应的值、删除键值对、执行事务、关闭数据库等操作。arkk
的存储引擎基于 RocksDB 和 LevelDB,具有卓越的读写性能和稳定性,支持多种数据类型和 API。
arkk
可用于存储各种数据,如 KV 数据、时序数据、配置信息等,广泛应用于互联网和移动互联网领域,如用户数据存储、消息存储、日志存储、配置存储等。