使用pickleType和relationships之间是否存在严重的性能差异?

2024-06-11 05:11:01 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有一桌人。假设系统中有1000+个。每个人员项都有以下字段:姓名、电子邮件、职业等

我们希望允许People项目有一个名称列表(昵称等),其中没有其他数据与该名称相关联—名称只是一个字符串。在

这正是pickle类型的用途吗?使用pickle类型和创建一个名称表以使人员的名称字段成为一对多的关系之间有什么样的性能优势?在


Tags: 数据项目字符串名称类型列表人员电子邮件
1条回答
网友
1楼 · 发布于 2024-06-11 05:11:01

是的,这是sqlalchemy的PickleType字段documented very well here的一个很好的用例。使用这种方法有明显的性能优势。在

使用您的示例,假设您有一个People项,它使用一对多数据库外观。这需要数据库执行JOIN来收集子元素;在本例中,Person's昵称(如果有)。但是,您可以在python代码中使用本机对象,而无需反序列化pickle。在

相比之下,字符串列表可以被pickle并作为PickleType存储在数据库中,数据库内部存储为LargeBinary。查询Person只需要数据库命中一个表,而不需要JOIN,这将导致数据的快速返回。但是,现在您要承担将每个项反酸洗回python对象的“成本”,如果您不存储本机数据类型(例如string、int、list、dict),这一点可能会很严重

此外,通过在数据库中存储pickle,还将失去底层数据库在给定WHERE条件下过滤结果的能力;尤其是对于整数和datetime对象。本机数据库调用可以返回给定数值或日期范围内的值,但不知道表示这些项的字符串的真正含义。在

最后,对单个pickle的简单更改可能允许在应用程序中执行任意代码。不太可能,但必须说明。在

因此,存储pickle是存储某些类型数据的一种好方法,但是数据类型会有很大的不同。我可以告诉你,我们在模式中非常广泛地使用它,甚至可以很好地在包含超过5亿条记录的几个表上使用它。在

相关问题 更多 >