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

发布于 2025-01-01 01:33:12 字数 485 浏览 2 评论 0 原文

我正在阅读有关 LevelDB 和发现:

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

IndexedDB< /a> 也是一个简单的键/值存储,具有索引数据的能力。

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

I was reading about LevelDB and found out that:

Upcoming versions of the Chrome browser include an implementation of the IndexedDB HTML5 API that is built on top of LevelDB

IndexedDB is also a simple key/value store that has the ability to index data.

My question is: how is it possible to build an index on top of a key/value store? I know that an index is at it's lowest level is n-ary tree and I understand the way that data is indexed in a database. But how can a key/value store like LevelDB be used for creating a database index?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

顾冷 2025-01-08 01:33:12

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

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

一旦您可以从部分匹配开始迭代键,您就有足够的能力为索引提供搜索和排序操作。

The vital feature is not that it supports custom comparators but that it supports ordered iteration through keys and thus searches on partial keys. You can emulate fields in keys just using conventions for separating string values. The many scripting layers that sit on top of leveldb use that approach.

The dictionary view of a Key-Value store is that you can only tell if a key is present or not by exact match. It is not really feasible to use just such a KV store as a basis for a database index.

As soon as you can iterate through keys starting from a partial match, you have enough to provide the searching and sorting operations for an index.

杀お生予夺 2025-01-08 01:33:12

只是几件事,LevelDB 支持使用自定义比较器对数据进行排序,来自 您链接到的页面

根据项目站点,主要特征是:

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

所以 LevelDB 可以包含可以基于 1 种排序顺序进行排序/索引的数据。

如果您需要多个可索引字段,您可以添加自己的在 LevelDB 之上工作的 B 树。我想这就是 Chrome 浏览器所采用的方法,但我只是猜测。

您可以随时查看Chrome来源

Just a couple of things, LevelDB supports sorting of data using a custom comparer, from the page you linked to:

According to the project site the key features are:

  • Keys and values are arbitrary byte arrays.
  • Data is stored sorted by key.
  • Callers can provide a custom comparison function to override the sort order.
  • ....

So LevelDB can contain data this can be sorted/indexed based on 1 sort order.

If you needed several indexable fields, you could just add your own B-Tree that works on-top of LevelDB. I would imagine that this is the type of approach that the Chrome browser takes, but I'm just guessing.

You can always look through the Chrome source.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文