我有一个包含元数据列(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;属性仍然存在。
答案 0 :(得分:0)
这是一个理论问题,所以我希望通用的答案能够满足
如果您需要数字,我建议您运行一些性能测试。生成一些大的jsonb
对象进行测试不应该太难。
只要数据为jsonb
而非json
,metadata->'b'->'c'
等操作就会很快。您可能会浪费时间的地方是从TOAST表中加载和解压缩大jsonb
值(“detoasted”)。
您可以通过在表达式上创建索引来避免该问题。然后,索引扫描不必对jsonb
进行解除,因此无论jsonb
有多大,都会很快。
因此,只要您可以为查询编制索引,我认为您不会遇到性能问题。
您应该注意数据库的总大小。如果预期的大小非常大,备份将成为一项挑战。它帮助设计和规划如何丢弃旧的和未使用的数据。这是应用程序设计过程中常被忽略的一个方面,往往会在几年后引起头痛。