在经历了关于关系数据库/NoSQL研究的辩论之后,我得出结论,我将继续使用PG作为我的数据存储.这个决定的一个重要部分是宣布JSONB将成为9.4版本.我的问题是,我现在应该做什么,从一开始就构建一个应用程序,知道我想迁移到(我的意思是立即使用!)jsonb?我的DaaS选项将运行9.3一段时间.

据我所知,如果我错了,请纠正我,hstore会运行得更快,因为我将在hstore列中对许多键进行大量查询,如果我使用纯json,我将无法利用索引/GIN等功能.不过,我可以利用json嵌套,但运行任何查询都会非常缓慢,用户会感到沮丧.

那么,我的应用程序是基于当前版本的hstore或json数据类型、"good ol"EAV还是其他什么?我应该以某种方式构建数据库和应用程序代码吗?如有任何建议,将不胜感激.我相信在我们等待PostgreSQL的下一次正式发布时,其他人可能会面临同样的问题.

关于我想要构建的应用程序的一些额外细节:

-非常相关(以下有一个例外)

提前感谢您的任何意见!

推荐答案

视情况而定.如果您希望拥有大量用户、非常高的事务量,或者每个查询获取的属性数量惊人,那么我会说使用HSTORE.然而,如果你的应用程序一开始规模很小,并且随着时间的推移而增长,或者获取属性的事务相对较少,或者每个查询只获取几个,那么就使用JSON.即使在后一种情况下,如果您没有获取许多属性,而是经常在查询的WHERE子句中判断一个或两个键,那么您可以创建一个函数索引来加快速度:

CREATE INDEX idx_foo_somekey ON foo((bar ->> 'somekey'));

现在,当你有WHERE bar ->> somekey,它应该使用索引.

当然,使用嵌套数据和升级到jsonb会更容易.

所以我倾向于使用JSON,除非你确定在升级到9.4之前,你会大量使用密钥获取来打败你的服务器.但为了确保这一点,我想说,现在就对预期的查询量进行一些基准测试,看看什么最适合您.

Postgresql相关问答推荐

Postgres查询按月和年分组的总计数

在Axum 0.5中,如何在一个请求处理程序中同时使用数据库和路径解析?

对 VOLATILE 函数的调用会 destruct SELECT 语句的原子性

INSERT 语句返回策略违规(USING 表达式)

Postgres 查询指向国外数据工作者的分区表比直接查询 fdw 慢很多倍

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

配置:错误:C 编译器无法在 Ubuntu 中创建可执行文件

在 postgresql 中查找表的所有依赖项

postgres 如何计算多列哈希?

PostgreSQL错误致命:角色 username不存在

安装 pg gem 失败,mkmf.rb 找不到 ruby​​ 的头文件(Mac OSX 10.6.5)

Java - 日期保存为前一天

在执行 postgresql 函数时提交事务

无法识别的配置参数bytea_output

Postgis 中 2 点之间的距离,单位为 4326 米

如何创建 postgres 数据库模式的 sql 脚本?

使用 RPostgreSQL 写入特定模式

使用python将数据从csv复制到postgresql

Rails 5 db 迁移:如何修复 ActiveRecord::ConcurrentMigrationError

postgresql NOT ILIKE 子句不包含空字符串值