Postgresql hstore以数字数据存储和搜索

时间:2013-07-30 09:20:53

标签: postgresql nosql hstore

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

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

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

我正在阅读有关hstore性能的内容并且给我留下了深刻印象,但我有一个疑问:它只能将商店文本作为值,因此,不可能通过数值搜索吗?当然,它是必要时要保持良好的阅读操作性能。例如,值为“X”的搜索寄存器大于“10”。

如果不可能,还有其他选择吗?

由于

2 个答案:

答案 0 :(得分:2)

是的,如果你输出值,可以搜索数字:

select k -> 'k'
from (values
    ('k => 11'::hstore),
    ('k => 010')
) h(k)
where (k -> 'k')::integer >= 10;

答案 1 :(得分:1)

虽然您可以通过在查询中使用强制转换来使用hstore在语义上正确搜索任何数据类型,但这会产生以下几种代价:

  • 您不能对hstore使用通用GiST索引。您必须在特定类型的特定hstore密钥上创建特定索引。

  • 每次处理时都会产生所有行的开销。对于类似文本到整数强制转换的东西来说,这很便宜,但是如果你将text转换为numeric或数组,那么说......那会受到伤害。

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