什么可以为大型数据集提供更好的性能?嵌套字典还是对象字典?

Posted

技术标签:

【中文标题】什么可以为大型数据集提供更好的性能?嵌套字典还是对象字典?【英文标题】:What offers better performance for large datasets? Nested dictionaries or a dictionary of objects? 【发布时间】:2020-03-01 03:22:29 【问题描述】:

当我从多个数据库表中获取数据时,我发现自己在重复这种模式:

records = 'p_key':  "record": r, "A": list(), "B": list(), "C" : list()  for r in db_records

我经常不得不以这种方式对数据进行分组,因为我无法跨数据库进行联接,或者可能存在多个查询比多个联接更快的情况。

但在性能方面,我不确定这样嵌套字典是否有很多开销,以及是否可以通过创建一个具有这些属性的对象来更好地为我提供服务,该对象将成为记录字典中的值。我所说的性能是指使用大量嵌套字典而不是对象字典时的空间和时间总成本。

【问题讨论】:

如果你正在做连接,你可能应该考虑使用 pandas。 我看不出对象如何比 dicts 播放得更快,因为 (1) 一切基本上都是一个对象,(2) 几乎每个对象都有一个 __dict__ 嵌套字典中A, B, C的目的是什么? every 字典是对象的字典。字典是一个对象。 Python 中的一切都是对象。你能说得更具体点吗? 【参考方案1】:

字典和常规类对象在性能上基本上没有区别,因为内部对象使用字典来处理它们的属性。

但是,您应该考虑使用带有__slots__ 的类。 Here 详细解释了它是什么以及它的性能。

另一种选择是使用 pandas 库来处理大数据集。

【讨论】:

以上是关于什么可以为大型数据集提供更好的性能?嵌套字典还是对象字典?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyMC3 和大型数据集进行贝叶斯线性回归 - 括号嵌套级别超过最大值且性能缓慢

Firebase 与大型数据集的性能

如何在python,dataframe中将数据转换为嵌套字典

卡桑德拉还是 SOLR?是啥为前端读取查询提供了更好的性能?

哪个为与 Qlikview 的连接提供更好的性能?SQL 服务器或 SSAS Cube?

大型数据集的最佳数据库引擎