【问题标题】:Data store fast querying over combinations of key values数据存储快速查询键值组合
【发布时间】:2013-12-19 10:02:43
【问题描述】:

我正在寻找存储和检索这种性质的元素:

K1 K2 K3 [...] Kn -> V

V 字段是一个小字符串。

查询应该适用于任何键组合,例如{K1, K2, K10}{K3, K7}

通过查询,我正在考虑检查是否相等或范围包含 (L <= Ki <= H)。

在实践中,最多有 5 个键,查询将针对所有键或仅其中一个键执行,但为将来的开发留出一些空间会很好。

起初我在看 Redis,但我认为它不适合我的用例。

[更新] VoltDB 可能看起来像一个强有力的竞争者。你怎么看?

【问题讨论】:

    标签: database data-structures nosql datastore information-retrieval


    【解决方案1】:

    如果您假设键之间存在某种顺序,我并不完全清楚。但是,PostgreSQL 的hstore 似乎可以帮助您。

    它允许您在一列中存储一组(键,值)。因此,您可以创建一个表,其中一个 hstore 列用于您的键,另一个列用于您的值。

    Hstore 直接为您提供子集查询:

    'K1=>1,K2=>2,K3=>3,...,Kn=>n'::hstore ?& ARRAY['K3','k7']
    

    您可以通过存储和查询 hstore 键的值来对范围查询进行建模。 Resp.,如果您假设顺序,您可以将数字作为 hstore 键,而 hstore 值将是您的键:

    1=>k1,2=>k2,3=>k3,...
    

    那么第 4 个键的范围查询将是:

    L <= (keys -> '4')::INT AND (keys -> '4')::INT <= H 
    

    另一方面,如果您的范围查询的含义是

    (\forall i) L <= Ki <= H
    

    那我想也可以做点什么。

    hstore 的优势在于支持 GiST 和 GIN 索引,因此它可以相当快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2016-04-24
      • 2011-03-18
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多