int Database :: Put(const WriteOptions & oWriteOptions, const uint64_t llInstanceID, const std::string & sValue) { if (!m_bHasInit) { PLG1Err("no init yet"); return -1; } std::string sFileID; int ret = ValueToFileID(oWriteOptions, llInstanceID, sValue, sFileID); if (ret != 0) { return ret; } ret = PutToLevelDB(false, llInstanceID, sFileID); return ret; }
int Database :: SetMinChosenInstanceID(const WriteOptions & oWriteOptions, const uint64_t llMinInstanceID) { if (!m_bHasInit) { PLG1Err("no init yet"); return -1; } static uint64_t llMinKey = MINCHOSEN_KEY; char sValue[sizeof(uint64_t)] = {0}; memcpy(sValue, &llMinInstanceID, sizeof(uint64_t)); int ret = PutToLevelDB(true, llMinKey, string(sValue, sizeof(uint64_t))); if (ret != 0) { return ret; } PLG1Imp("ok, min chosen instanceid %lu", llMinInstanceID); return 0; }
int Database :: Put(const WriteOptions & oWriteOptions, const uint64_t llInstanceID, const std::string & sValue) { if (!m_bHasInit) { PLG1Err("no init yet"); return -1; } std::string sFileID; // 将值写入到文件之中。 int ret = ValueToFileID(oWriteOptions, llInstanceID, sValue, sFileID); if (ret != 0) { return ret; } // 有点迷糊,为啥还要写一遍到 levelDB里呢? //04-23 : 已经搞清楚,这里的levelDB其实只存索引,充分利用levelDB的写优势。 // 这样写索引会非常快速,读真实的值由于通过索引查找也会非常快速,而且真实 // 的值存储是顺序存储,按照InstanceID的顺序,删除会非常方便。 ret = PutToLevelDB(false, llInstanceID, sFileID); return ret; }
int Database :: SetMasterVariables(const WriteOptions & oWriteOptions, const std::string & sBuffer) { static uint64_t llMasterVariablesKey = MASTERVARIABLES_KEY; return PutToLevelDB(true, llMasterVariablesKey, sBuffer); }