我想有效地在数据库(特别是 PostgreSQL)中存储一个“集合”,但我不确定如何有效地做到这一点。
我想到了几个选项:
在文本或二进制列中存储为列表 (
{'first item', 2, 3.14}
)。这样做的缺点是在插入数据库和取出时需要解析。仅对于文本字符串集,这似乎工作得很好,并且解析最少。对于任何更复杂的东西,解析都会变得困难。在二进制列中存储为 pickle。这看起来应该很快,而且很完整(任何可 picklable 的东西都可以),但不能跨语言移植。
存储为 json(二进制对象或文本流)。比纯文本更大的问题,但定义更明确的解析。
还有其他选择吗?有没有人有这方面的经验?
最佳答案
您想要做的是存储表中的行与集合成员之间的一对多关系。
您的所有解决方案都不允许 SQL 查询集合的成员。您不能执行类似 select * from mytable where 'first item' in myset
的操作。相反,您必须检索文本/blob 并使用另一种编程语言对其进行解码或解析。这意味着如果你想对集合的元素进行查询,你必须每次都进行全表扫描。
我非常不愿意让您在我的 数据库中做这样的事情。
我认为你应该把你的集合分成一个单独的表。我的意思是(因为这显然不像我想的那么明显),每个集合元素一行,索引你从中引用的表的主键或者,如果你想强制不重复以一些额外的空间为代价,您引用的表的主键 + 设置元素值。
由于您的集合元素似乎是异构类型,我认为将它们存储为字符串没有任何害处,只要您以某种方式对数字进行标准化。
关于python - 如何有效地将 "set"(python 类型)存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45848956/