如何在键/值存储之上构建数据库索引?

Lu4*_*Lu4 12 database key-value nosql indexeddb leveldb

我正在阅读有关LevelDB的内容并发现:

即将推出的Chrome浏览器版本包括构建在LevelDB之上的IndexedDB HTML5 API的实现

IndexedDB也是一个简单的键/值存储,能够索引数据.

我的问题是:如何在键/值存储之上构建索引?我知道索引在它的最低级别是n-ary树,我理解数据在数据库中索引的方式.但是如何使用像LevelDB这样的键/值存储来创建数据库索引呢?

And*_*ent 7

重要的特征并不是它支持自定义比较器,而是支持通过键进行有序迭代,从而搜索部分键.您可以使用约定来分隔字符串值来模拟键中的字段.位于leveldb之上的许多脚本层使用这种方法.

键值存储的字典视图是您只能通过完全匹配来判断键是否存在.仅仅使用这样的KV商店作为数据库索引的基础是不可行的.

只要您可以从部分匹配开始迭代键,就足以为索引提供搜索和排序操作.


Mat*_*ren 5

只需要做一些事情,LevelDB支持使用自定义比较器对数据进行排序,从您链接到页面:

根据项目现场,主要特点是:

  • 键和值是任意字节数组.
  • 按键排序存储数据.
  • 调用者可以提供自定义比较功能来覆盖排序顺序.
  • ....

因此,LevelDB可以包含可以根据1个排序顺序对数据进行排序/索引的数据.

如果您需要多个可索引字段,则只需添加自己的B-Tree即可在LevelDB上运行.我认为这是Chrome浏览器所采用的方法类型,但我只是在猜测.

您始终可以浏览Chrome源代码.

  • 为什么你需要一个单独的leveldb?只需将"索引"对与"记录"对混合即可. (12认同)
  • 你不需要在leveldb上使用B树,而是应该创建另一个leveldb作为每个字段的索引.(实际上模仿了在向表中添加索引时关系数据库的作用)但是当我查看leveldb时,我没有看到跨数据库事务. (2认同)