在 leveldb 中使用 C++ protobuf 格式化结构。 set/get 操作
Using C++ protobuf formatted structure in leveldb. set/get operations
我想制作一个使用 leveldb 的 POC,以便以 protobuf 格式存储不同数据类型的键值 table。
到目前为止我能够打开数据库文件,我还看到了具有以下签名的 get 函数:
virtual Status Get(const ReadOptions& options, const Slice& key, std::string* value)=0
我知道这个值实际上是指像向量这样的二进制字符串,而不是常规的字母数字字符串,所以我猜它可以适合多类型基元,如字符串、uint、枚举)但它如何支持 struct/class 表示 c++ 中的 protobuf 布局 ?
所以这是我想存储在 leveldb 中的原型文件:
message agentStatus {
string ip = 1;
uint32 port = 2;
string url = 3;
google.protobuf.Timestamp last_seen = 4;
google.protobuf.Timestamp last_keepalive = 5;
bool status = 6;
}
这是我当前的 POC 代码。如何使用 get
方法访问上面 table 中的任何变量?
#include <leveldb/db.h>
void main () {
std::string db_file_path = "/tmp/data.db";
leveldb::DB* db;
leveldb::Status status;
leveldb::Options options;
options.create_if_missing = false;
status_ = leveldb::DB::Open(options, db_file_path, &db);
if (!status_.ok()) {
throw std::logic_error("unable to open db");
}
谢谢!
需要将protobuf消息序列化为二进制字符串,即SerilaizeToString
,并使用Put
方法将二进制字符串以key写入LevelDB。
然后可以使用Get
方法通过给定的key获取二进制值,并将二进制字符串解析为protobuf消息,即ParseFromString
.
终于可以得到消息的字段了
我想制作一个使用 leveldb 的 POC,以便以 protobuf 格式存储不同数据类型的键值 table。
到目前为止我能够打开数据库文件,我还看到了具有以下签名的 get 函数:
virtual Status Get(const ReadOptions& options, const Slice& key, std::string* value)=0
我知道这个值实际上是指像向量这样的二进制字符串,而不是常规的字母数字字符串,所以我猜它可以适合多类型基元,如字符串、uint、枚举)但它如何支持 struct/class 表示 c++ 中的 protobuf 布局 ?
所以这是我想存储在 leveldb 中的原型文件:
message agentStatus {
string ip = 1;
uint32 port = 2;
string url = 3;
google.protobuf.Timestamp last_seen = 4;
google.protobuf.Timestamp last_keepalive = 5;
bool status = 6;
}
这是我当前的 POC 代码。如何使用 get
方法访问上面 table 中的任何变量?
#include <leveldb/db.h>
void main () {
std::string db_file_path = "/tmp/data.db";
leveldb::DB* db;
leveldb::Status status;
leveldb::Options options;
options.create_if_missing = false;
status_ = leveldb::DB::Open(options, db_file_path, &db);
if (!status_.ok()) {
throw std::logic_error("unable to open db");
}
谢谢!
需要将protobuf消息序列化为二进制字符串,即
SerilaizeToString
,并使用Put
方法将二进制字符串以key写入LevelDB。然后可以使用
Get
方法通过给定的key获取二进制值,并将二进制字符串解析为protobuf消息,即ParseFromString
.终于可以得到消息的字段了