"大" JSONB列中的数据

时间:2017-02-09 10:55:07

标签: postgresql jsonb

我有一个包含元数据列(JSONB)的表。有时我会在此列上运行查询。示例:

select * from "a" where metadata->'b'->'c' is not null

此列始终只有小的JSON对象<1KB。但是对于某些记录(小于0.5%),它可能> 500KB,因为一些子子属性有很多数据。

今天,我只有1000条记录,一切正常。但我想我很快就会有更多的记录,我不知道是否有一些大数据(我不会谈论大数据&#34;当然!)会对全球产生影响性能。是500KB&#34;大&#34;对于postgres而言,它是否很难&#34;解析?也许我的问题太模糊了,如果需要我可以编辑。换句话说:

在JSONB列中有一些(<0.5%)更大的条目会影响JSON查询的显着全局性能吗?

旁注:假设&#34;大&#34;数据位于metadata->'c'->'d'我不会对此特定属性运行任何查询。查询总是在&#34;小/普通&#34;属性。但是&#34;大&#34;属性仍然存在。

1 个答案:

答案 0 :(得分:0)

这是一个理论问题,所以我希望通用的答案能够满足 如果您需要数字,我建议您运行一些性能测试。生成一些大的jsonb对象进行测试不应该太难。

只要数据为jsonb而非jsonmetadata->'b'->'c'等操作就会很快。您可能会浪费时间的地方是从TOAST表中加载和解压缩大jsonb值(“detoasted”)。

您可以通过在表达式上创建索引来避免该问题。然后,索引扫描不必对jsonb进行解除,因此无论jsonb有多大,都会很快。 因此,只要您可以为查询编制索引,我认为您不会遇到性能问题。

您应该注意数据库的总大小。如果预期的大小非常大,备份将成为一项挑战。它帮助设计和规划如何丢弃旧的和未使用的数据。这是应用程序设计过程中常被忽略的一个方面,往往会在几年后引起头痛。