2013-05-15 58 views

回答

1

由于LevelDB实例一次只能从一个应用程序访问,所以您最好使用64位长的数据并在应用程序中增加它。当打开数据库(并允许任何写入之前),要查找最后插入的键,可以使用Iterator的SeekToLast()方法。

1

正如我刚才在question on integer keys中指出的那样,如果你想使用二进制整数,你需要为数据库创建一个自定义比较器,否则你不会以升序的二进制顺序获取它们。这并不难,但你可能忽略了这个需求。

我不太确定你在问什么。如果您要添加的唯一数据是应该将条目记录为日志的键,那么只需使用整数键。

但是,如果您要插入密钥,您将要搜索其他原因PLUS您稍后要以插入顺序迭代它们时,它会变得更复杂一点。

基本上你想要为每个键值插入两个键,使用前缀来确定键是“值键”还是“排序键”。例如,假设你有Frank,John,Sally和Amy作为键,并且使用前缀〜N作为名称键,使用〜I作为迭代器键。

数据库如下所示,请注意“Iterator键”没有与它们相关的值,因为我们只能从键中获取名称。我已经展示了它,就好像你使用了两位数的字符串作为数字,而不是使用整数值并需要一个特殊的比较器。

~I00Frank 
~I01John 
~I02Sally 
~I03Amy 
~NAmy => Amy's details 
~NFrank => frank's details 
~NJohn => John's details 
~NSally => Sally's details 
3

两种方法:

  1. 使用默认的比较,而是使用一个函数的索引键 '1' 转换成类似 '000000001',将 '20' 到 '000000020',所以leveldb会把它们放在彼此附近;

  2. 自定义一个新的比较器,它将类型字符串中的键转换为类型整数,然后您可以比较整数。

与任何上述2个方法,需要存储在一个性LevelDB键 - 值对:current_id ---->整数,也可以使用MMAP的电流id存储在新文件中。

然后,用你自己定义的Add()函数,当你从关键字current_id得到当前的id时,你可以插入一个新的键值对:id ----> value,然后你可以更新current_id加1 。