在LevelDB中生成自动递增键的好方法是什么?我的目标是能够按照它们插入的顺序迭代键。LevelDB:按插入顺序迭代键
回答
由于LevelDB实例一次只能从一个应用程序访问,所以您最好使用64位长的数据并在应用程序中增加它。当打开数据库(并允许任何写入之前),要查找最后插入的键,可以使用Iterator的SeekToLast()方法。
正如我刚才在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
两种方法:
使用默认的比较,而是使用一个函数的索引键 '1' 转换成类似 '000000001',将 '20' 到 '000000020',所以leveldb会把它们放在彼此附近;
自定义一个新的比较器,它将类型字符串中的键转换为类型整数,然后您可以比较整数。
与任何上述2个方法,需要存储在一个性LevelDB键 - 值对:current_id ---->整数,也可以使用MMAP的电流id存储在新文件中。
然后,用你自己定义的Add()函数,当你从关键字current_id得到当前的id时,你可以插入一个新的键值对:id ----> value,然后你可以更新current_id加1 。
- 1. LevelDB的插入顺序性能
- 2. Scala HashMap:迭代插入顺序?
- 3. 基于插入顺序迭代散列?
- 4. LevelDB C迭代器
- 5. 遍历按插入顺序HasMap在<逻辑:迭代>
- 6. Lua - 按插入顺序打印表键
- 7. 迭代通过性LevelDB
- 8. 迭代通过按键Python字典的排序顺序
- 9. 什么接口代表的插入顺序LinkedHashSet迭代
- 10. TinyMCE按钮插入顺序
- 11. 需要在插入时快速的关联数组,寻找最近的键,并按键顺序迭代
- 12. 按顺序迭代设置Play框架
- 13. 如何按特定顺序迭代?
- 14. 在Python中替代字典 - 需要通过命名键引用值并按插入顺序进行迭代
- 15. 会按顺序输入它们插入无主键?
- 16. foreach语句是按顺序迭代还是随机顺序?
- 17. 迭代python列表:迭代顺序
- 18. 性LevelDB的Java:删除在迭代
- 19. C++按字母顺序插入排序
- 20. 如何按排序顺序插入
- 21. 按键的顺序
- 22. 使用顺序主键插入查询
- 23. 迭代非顺序列
- 24. 切片迭代顺序在
- 25. 怪字典迭代顺序
- 26. 设计字典的子类,其迭代器按排序顺序返回键
- 27. 如何按值排序LevelDB
- 28. 按字母顺序插入矢量
- 29. 按字母顺序插入到LinkedList中
- 30. 数据库插入不按顺序