python - 如何有效地将 "set"(python 类型)存储在数据库中?

标签 python sql json postgresql pickle

我想有效地在数据库(特别是 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/

相关文章:

python - 如何将多个段落从控制台写入文件 - Python

sql - Visual Studio SQL Server 对象资源管理器不保存连接

python - Perl:有效地计算许多字符串中的许多单词

python - OpenCV 错误 : Unspecified Error(The Function is not implemented)

sql语句帮助

sql - 在同一张 table 上的内部查询-有更好的方法吗?

javascript - $.ajax 在有效 JSON 上抛出解析错误

java - JSON 对象按名称排序,该名称是字符串形式的日期

java jackson |如何序列化指定具体接口(interface)的对象

python - n-gram 马尔可夫链转换表