flo*_*inp 8 sql postgresql performance key
我需要开发一个键/值后端,如下所示:
Table T1 id-PK, Key - string, Value - string
INSERT into T1('String1', 'Value1')
INSERT INTO T1('String1', 'Value2')
Table T2 id-PK2, id2->external key to id
some other data in T2, which references data in T1 (like users which have those K/V etc)
Run Code Online (Sandbox Code Playgroud)
我听说过带有GIN/GIST的PostgreSQL hstore.什么是更好的(性能方面)?使用SQL连接和具有单独列(键/值)的传统方式执行此操作?在这种情况下,PostgreSQL hstore的表现更好吗?
数据的格式应该是任何键=>任何值.我还想进行文本匹配,例如部分搜索(在SQL中使用LIKE%或使用等效的hstore).我计划在其中包含大约1M-2M的条目,并且可能在某些时候进行扩展.
您有什么推荐的吗 ?使用持久性的SQL传统方式/ PostgreSQL hstore或任何其他分布式键/值存储?
如果它有帮助,我的服务器是一个具有1-2GB RAM的VPS,所以不是一个相当不错的硬件.我还想在此基础上设置一个缓存层,但我认为它使问题复杂化.我只想要2M条目的良好表现.更新将经常进行,但搜索更频繁.
谢谢.
您的问题不明确,因为您不清楚自己的目标.
这里的关键是索引(双关语) - 如果你处理大量的密钥,你希望能够以最少的查找检索它们而不需要提取不相关的数据.
简短的回答是你可能不想使用hstore
,但让我们看看更多细节......
id
都有很多键/值对(数百+)?不要用hstore
.hstore
.hstore
.hstore
.hstore
.id
?不能用hstore
.那有什么用hstore
呢?好吧,一个好的方案是,如果你想为外部应用程序保存键/值对,你知道你总是想要检索所有键/值,并且总是将数据保存为块(即,它永远不会被编辑为 -地点).与此同时,您确实希望能够灵活地搜索这些数据 - 非常简单 - 而不是将其存储在XML或JSON块中.在这种情况下,由于键/值对的数量很小,因此您可以节省空间,因为您将几个元组压缩为一个元组hstore
.
将此视为您的表格:
CREATE TABLE kv (
id /* SOME TYPE */ PRIMARY KEY,
key_name TEXT NOT NULL,
key_value TEXT,
UNIQUE(id, key_name)
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5085 次 |
最近记录: |