【发布时间】:2017-09-26 09:49:07
【问题描述】:
对于有经验的 (Django) 开发人员来说,这可能是一个简单的问题。
我项目的数据库是 PostgreSQL。
我打算使用单个受保护模型实例作为某些数据的集中存储。该实例将有一个 JSONField ,它又将存储键值对的动态集合(两者都是字符串)。 “动态”是指不时将新的键值对添加到集合中,因此集合的大小将不断增长。
据我所知(例如Size limit of JSON data type in PostgreSQL),JSONField 的大小限制约为 1GB。这是相当多的,但仍然不是无限的。
我的问题是:如果我设法耗尽 JSONField 的存储容量,会发生什么?对于如何在这种情况发生之前进行预测(例如监控实例的存储大小),是否有任何建议?
【问题讨论】:
-
在达到该限制之前,您必须处理在大概很多行中更新 500MB json 所需的时间。如果您真的想存储这种大小的单个文档,我不确定您是否想要一个数据库。
-
新的键值对会不时添加到集合中:以什么频率?如果这种情况足够频繁,表将包含大量死元组,这会减慢查询和 VACUUMing。不用说,您不能自动更新/插入新的一对:每次都会覆盖整个 JSON 数据。我强烈建议改用一些关系设计(即使EAV 在您的用例中也可以表现得更好)。
-
感谢您的所有 cmets!由于从长远来看,所描述的存储解决方案现在似乎存在问题,因此我决定尝试使用项目范围的键值存储,例如 pickledb (github.com/patx/pickledb)。
-
*(pickledb 现在使用的是“simplejson”模块,与名称相反。)
标签: python django postgresql