在python或postgresql中操作数据是否更快、内存效率更高?

j0pj023g  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(316)

假设我有一个5-6列几百行的postgresql表。使用psycopg2将整个表加载到我的python程序中,并使用python选择我想要的行并按我想要的顺序排列行,这样会更有效吗?或者使用sql选择所需的行,对它们进行排序,并只将这些特定的行加载到python程序中会更有效吗。
“有效”是指:
内存使用。
速度。
此外,随着表的大小增加,这些因素如何开始变化?比如说,这个表现在有几百万行了?

pb3skfrl

pb3skfrl1#

实际上,如果将已经加载到内存中的数据与从数据库中检索的数据进行比较,那么内存中的操作通常会更快。数据库有开销:
它们位于同一服务器或不同服务器上的不同进程中,因此需要在它们之间移动数据和命令。
查询需要被解析和优化。
数据库支持多个用户,因此其他工作可能正在消耗资源。
数据库维护acid属性和数据完整性,这会增加额外的开销。
与每个查询的等效内存中操作相比,前两个特别增加了开销。
这并不意味着数据库没有优势,特别是对于复杂的查询:
它们实现了多种不同的算法,并有一个优化器来选择最佳的算法。
它们可以利用更多的资源,特别是通过并行运行。
它们可以(有时)缓存结果,从而节省大量时间。
数据库的优点并不是它们一直提供最好的性能。其优点是,它们通过一个简单的接口在非常广泛的请求范围内提供了良好的性能(即使您不喜欢sql,我认为您需要承认,用第三代语言编写代码更简单、更简洁、更灵活)。
此外,数据库通过acid属性和其他支持数据完整性的机制来保护数据。

um6iljoc

um6iljoc2#

在postgresql中执行所有这些操作几乎总是会更快。这些数据库系统被设计成能够很好地扩展海量数据,并针对其典型用例进行了高度优化。例如,他们不必从磁盘加载所有数据来执行最基本的筛选[1]。
即使不是这样,光是网络延迟/使用情况就足以平衡这一点,尤其是在您经常运行查询的情况下。

相关问题