如果我在HamsterDB数据库中插入一个带有HAM_OVERWRITE标志的值,当该键不存在时会有什么影响?
我跟踪程序中的最高序列号,并将其持久化到HamsterDB数据库中:
if (serial > high_serial_) {
high_serial_ = serial;
ham::key key((void*)HIGH_SERIAL_KEY, strlen(HIGH_SERIAL_KEY));
ham::record record((void*)&high_serial_, sizeof(high_serial_));
db.insert(&key, &record, HAM_OVERWRITE);
}再次启动应用程序时,将使用存储在DB中的当前值初始化high_serial_:
ham::key key((void*)HIGH_SERIAL_KEY, strlen(HIGH_SERIAL_KEY));
auto record = roll_file_db.find(&key);但是这个调用抛出了HAM_KEY_NOT_FOUND。documentation声明,如果键不存在,它将被简单地插入。但这并不是我所经历的。
发布于 2013-08-08 03:54:24
如果密钥不存在,而您调用ham_db_insert(db, txn, key, record, HAM_OVERWRITE),则会插入密钥。
如果键不存在,而您调用了ham_db_find(),那么您将得到HAM_KEY_NOT_FOUND。
ham_db_find的文档将HAM_KEY_NOT_FOUND作为返回值列出“如果键不存在”:http://hamsterdb.com/public/scripts/html_www/group__database.html#ga90dd239b79be2181461bbabc2eee1496
HTH Christoph
https://stackoverflow.com/questions/14000941
复制相似问题