1

在我的实际项目中,我沉浸在“大数据”问题中。我们需要存储一个大型数据库,其中读取性能比写入重要(数据更改最小且可控)。

有数百万个寄存器,每个寄存器都有很多键/值信息。

我正在测试 noSQL 数据库,在调查中我发现了 hstore。我知道非常好的 postgresql,但我承认我不知道这个模块。

我正在阅读有关 hstore 性能的信息,我印象深刻,但我有一个疑问:只能将文本存储为值,所以,按数值搜索是不可能的吗?当然,读取操作需要保持良好的性能。例如,搜索“X”值大于“10”的寄存器。

如果不可能,有替代方案吗?

谢谢

4

2 回答 2

2

是的,如果您转换值,则可以搜索数字:

select k -> 'k'
from (values
    ('k => 11'::hstore),
    ('k => 010')
) h(k)
where (k -> 'k')::integer >= 10;
于 2013-07-30T11:41:02.397 回答
1

虽然您可以hstore通过在查询中使用强制转换来对任何数据类型进行语义正确的搜索,但这会带来一些成本:

  • 您不能对 hstore 使用通用 GiST 索引。相反,您必须在转换为特定类型的特定 hstore 键上创建特定索引。

  • 每次处理它们时都会产生转换所有行的开销。对于像整数转换的文本这样的东西来说,这很便宜,但是如果你要转换textnumeric或数组,说......那会受到伤害。

如果您的数据几乎完全是自由格式的键/值,那么尝试将其塞入 RDBMS 可能并不理想。PostgreSQL 9.4 可能会通过增强的 JSON 支持做得更好,但现在说还为时过早。

于 2013-07-30T13:09:03.990 回答