Postgresql JSONB即将推出。现在用什么?商店?JSON?EAV?

Postgresql JSONB即将推出。现在用什么?商店?JSON?EAV?,json,postgresql,hstore,jsonb,Json,Postgresql,Hstore,Jsonb,在经历了关于关系数据库/NoSQL研究的争论之后,我得出结论,我将继续使用PG作为我的数据存储。这个决定的一个重要部分是宣布JSONB将升级到9.4。我的问题是,我现在应该做什么,在知道我要迁移到(我是说现在就使用!)jsonb的情况下从头开始构建应用程序?我的DaaS选项将运行9.3一段时间 据我所知,如果我错了,请纠正我,hstore将运行得更快,因为我将在hstore列中对许多键进行大量查询,如果我使用纯json,我将无法利用索引/GIN等。但是,我可以利用json嵌套,但是运行任何查询都

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

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

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

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

-非常相关(下面有一个例外)
-强大的社交网络(团体、朋友、爱好、时间线等)
-基于具有可变用户指定属性的单个对象,可能是10或1000+(这就是无模式设计需要发挥作用的地方)


提前感谢您的任何意见

你的回答可能不够详细,但我要说的是。。。如果您的数据是“非常相关的”,那么我相信您最好的方法是使用良好的关系设计来构建它。如果它只是一个带有“变量指定属性”的字段,那么这听起来像是hstore的一个很好的用途。在这一点上,这是非常可靠的。我一直在阅读9.4,jsonb听起来很酷,但这一点暂时不会出现。我怀疑9.3+中良好的模式设计以及对hstore的非常有针对性的使用可能会产生性能和灵活性的良好结合。

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

CREATE INDEX idx_foo_somekey ON foo((bar ->> 'somekey'));
现在,当您有
WHERE bar->>somekey
时,它应该使用索引

当然,当您可以使用嵌套数据时,使用嵌套数据和升级到jsonb会更容易


因此,我倾向于使用JSON,除非您确信在升级到9.4之前,您将大量使用密钥获取来踢服务器的屁股。但是为了确保这一点,我想说,现在就对预期的查询量进行一些基准测试,看看什么最适合您。

p.S.Stack需要一个新的标记=>jsonb!谢谢你的反馈,大卫。在这一点上,我倾向于hstore,即使hstore 2.0即将推出并停产。在一个简单的json列中进行一致的查询似乎不值得。我肯定还有其他观点,但我认为你是正确的。除非您有一个非常有说服力的用例,hstore将无法工作,否则我仍然会使用它(至少现在是这样)。