在 Python 或 PostgreSQL 中操作数据是否更快、内存效率更高?
Is it faster and more memory efficient to manipulate data in Python or PostgreSQL?
假设我有一个 PostgreSQL table 有 5-6 列和几百行。使用 psycopg2 将 entire table 加载到我的 Python 程序并使用 Python 到 select 行会更有效吗我想要并按我的意愿对行进行排序?或者使用 SQL 到 select 所需的行,对它们进行排序,然后只将那些特定的行加载到我的 Python 程序中会更有效。
'effective' 我的意思是:
- 内存使用情况。
- 速度。
此外,随着 table 大小的增加,这些因素将如何开始变化?比如说,table 现在有几百万行?
在 PostgreSQL 中执行所有这些操作几乎总是会更快。这些数据库系统被设计为可以很好地扩展以处理大量数据,并针对它们的典型用例进行了高度优化。例如,他们不必从磁盘加载所有数据来执行最基本的过滤器[1].
即使情况并非如此,单是网络延迟/使用量就足以平衡这一点,尤其是如果您 运行 经常查询。
实际上,如果您将已经加载到内存中的数据与从数据库中检索的数据进行比较,那么内存中的操作通常会更快。数据库有开销:
- 它们位于同一台服务器或不同服务器上的不同进程中,因此数据和命令需要在它们之间移动。
- 需要解析和优化查询。
- 数据库支持多个用户,因此其他工作可能会耗尽资源。
- 数据库维护 ACID 属性和数据完整性,这会增加额外的开销。
与每个查询的等效内存操作相比,前两个特别增加了开销。
这并不意味着数据库没有优势,特别是对于复杂查询:
- 他们实现了多种不同的算法,并有一个优化器来选择最佳算法。
- 他们可以利用更多资源——尤其是 运行 并行。
- 他们(有时)可以缓存结果以节省大量时间。
数据库的优势不在于它们始终提供 最佳 性能。优点是它们通过简单的界面在非常广泛的请求中提供良好的性能(即使你不喜欢SQL,我认为你需要承认比用第三代语言编写代码更简单、更简洁、更灵活。
此外,数据库通过 ACID 属性和其他支持数据完整性的机制来保护数据。
假设我有一个 PostgreSQL table 有 5-6 列和几百行。使用 psycopg2 将 entire table 加载到我的 Python 程序并使用 Python 到 select 行会更有效吗我想要并按我的意愿对行进行排序?或者使用 SQL 到 select 所需的行,对它们进行排序,然后只将那些特定的行加载到我的 Python 程序中会更有效。
'effective' 我的意思是:
- 内存使用情况。
- 速度。
此外,随着 table 大小的增加,这些因素将如何开始变化?比如说,table 现在有几百万行?
在 PostgreSQL 中执行所有这些操作几乎总是会更快。这些数据库系统被设计为可以很好地扩展以处理大量数据,并针对它们的典型用例进行了高度优化。例如,他们不必从磁盘加载所有数据来执行最基本的过滤器[1].
即使情况并非如此,单是网络延迟/使用量就足以平衡这一点,尤其是如果您 运行 经常查询。
实际上,如果您将已经加载到内存中的数据与从数据库中检索的数据进行比较,那么内存中的操作通常会更快。数据库有开销:
- 它们位于同一台服务器或不同服务器上的不同进程中,因此数据和命令需要在它们之间移动。
- 需要解析和优化查询。
- 数据库支持多个用户,因此其他工作可能会耗尽资源。
- 数据库维护 ACID 属性和数据完整性,这会增加额外的开销。
与每个查询的等效内存操作相比,前两个特别增加了开销。
这并不意味着数据库没有优势,特别是对于复杂查询:
- 他们实现了多种不同的算法,并有一个优化器来选择最佳算法。
- 他们可以利用更多资源——尤其是 运行 并行。
- 他们(有时)可以缓存结果以节省大量时间。
数据库的优势不在于它们始终提供 最佳 性能。优点是它们通过简单的界面在非常广泛的请求中提供良好的性能(即使你不喜欢SQL,我认为你需要承认比用第三代语言编写代码更简单、更简洁、更灵活。
此外,数据库通过 ACID 属性和其他支持数据完整性的机制来保护数据。