7

用键值存储中的索引模拟数据库表的最简单方法是什么?键值存储没有范围查询和有序键。

我想模拟的东西(按优先顺序):

  1. 创建表
  2. 添加列
  3. 创建索引
  4. 基于主键的查询
  5. 基于任意列的查询
4

3 回答 3

4

如果您使用Redis(一种支持字符串、列表、集合等的高级键值存储),那么这很容易。我已经开发了一个C# redis 客户端,它原生支持存储 POCO 的数据模型。OrmLite可以使用这些完全相同的 POCO 将其存储在 RDBMS 中。

顺便说一句,Redis 很快,我有一个基准测试可以在 1.2 秒内存储和检索整个 Northwind 数据库(3202 条记录)(在 3yo iMac 上的 UnitTest 内运行)

我以两种方式存储实体

  • 不同的实体,我将类类型名称和主键结合起来创建一个唯一键,例如urn:user:1
    • 然后我维护一组单独的主键(在 Redis 集中)来跟踪我的所有实体,使用如下键:ids:user
  • 在 Redis 服务器端列表中 - 它的行为非常类似于支持分页的表,使用如下键:lists:user
于 2010-02-16T13:41:07.967 回答
2

使用哈希表或字典。如果您想要唯一的键值,您可以使用 GUID 或哈希码。

于 2010-02-16T13:06:26.870 回答
1

键值存储应支持对键进行排序和对键的范围访问。

然后你应该创建两个字典:

id -> payload

col1, id -> NULL

,其中payload应包含数据库表将包含的所有数据,第二个字典的键应包含(col1, id)第一个字典的每个条目的值。

于 2010-02-16T13:09:51.993 回答