在我的实际项目中,我沉浸在“bigdata”问题中。我们需要存储一个大型数据库,其中读取性能对于写入非常重要(数据更改很小并且可以控制)。
有数百万个寄存器,每个寄存器都有很多键/值信息。
我正在测试noSQL数据库,在我的调查中我找到了hstore。我知道非常好的postgresql,但我承认我不知道这个模块。
我正在阅读有关hstore性能的内容并且给我留下了深刻印象,但我有一个疑问:它只能将商店文本作为值,因此,不可能通过数值搜索吗?当然,它是必要时要保持良好的阅读操作性能。例如,值为“X”的搜索寄存器大于“10”。
如果不可能,还有其他选择吗?
由于
答案 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支持更好地做到这一点,但现在说它还为时过早。