den*_*lor 14 java postgresql berkeley-db jdbc key-value
我被要求使用postgreSQL数据库,它将取代我目前使用的berkeleyDB.虽然; 我意识到这不是一个理想的情况,它是我无法控制的.
所以问题是......如果你被要求将postgreSQL变成一个关键值存储库,你将如何做到这一点,同时尽可能提高效率?
我的值是字节数组,我的键是字符串,我可以对这些字符串的长度施加一些限制.
我假设我应该使用blob作为我的价值和持有密钥的主键列,但是当我冒险进入这个旅程时我很好奇堆栈溢出社区中的任何人是否已经这样做了,或者是否有任何具体的"陷阱"我应该留意.
Str*_*das 25
Postgresql中正确执行此操作的扩展名为hstore.它的工作方式与您期望的其他键值存储系统类似.只需加载扩展程序.语法是唯一的,但是如果你曾经使用过redis或mongo,你会很快得到它.不要让它变得更难.我明白,我们经常不会选择我们的工具而必须做.
这是文档页面:
http://www.postgresql.org/docs/9.1/static/hstore.html
另一种选择是使用 JSON 或 JSONB 在键上具有唯一的哈希索引。
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE key_values (
key uuid DEFAULT uuid_generate_v4(),
value jsonb
);
CREATE INDEX idx_key_values ON key_values USING hash (key);
Run Code Online (Sandbox Code Playgroud)
一些疑问
SELECT * FROM key_values WHERE key = '1cfc4dbf-a1b9-46b3-8c15-a03f51dde891';
Time: 0.514 ms
postgres=# SELECT * FROM key_values WHERE key = '1cfc4dbf-a1b9-46b3-8c15-a03f51dde890';
Time: 1.747 ms
postgres=# do $$
begin
for r in 1..1000 loop
INSERT INTO key_values (value)
VALUES ('{"somelarge_json": "bla"}');
end loop;
end;
$$;
DO
Time: 58.327 ms
Run Code Online (Sandbox Code Playgroud)
您无法像 B 树那样运行高效的范围查询,但它应该具有更好的读/写性能。索引应该小 60% 左右。
| 归档时间: |
|
| 查看次数: |
11941 次 |
| 最近记录: |