首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化数据库访问的Python代码

问优化数据库访问的Python代码
EN

Stack Overflow用户
提问于 2010-09-22 22:43:25
回答 2查看 1.2K关注 0票数 2

我正在构建一个具有对象的应用程序,这些对象的数据存储在mysql表中(跨多个表)。当我需要处理对象(检索对象属性/更改属性)时,我使用mysqldb (select / update)查询sql数据库。然而,由于应用程序的计算非常密集,执行时间简直要了我的命。

想了解是否有将所有数据加载到python中的方法,在这些对象上进行计算/修改,然后对mysql数据库进行完整的数据更新?将数据从数据库一次性加载到这些对象的列表中会提高性能吗?另外,由于数据库大小接近25MB,是否会导致任何内存问题。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2010-09-22 22:47:38

25Mb很小。微观世界。SQL很慢。冰川。

不要浪费时间在SQL上,除非您有transactions (带锁定和多用户)。

如果你在做“分析”,尤其是计算密集型的分析,把所有的数据加载到内存中。

在不太可能的情况下,数据无法放入内存中,然后执行此操作。

  1. 将数据查询到平面文件中。这可以很快。如果你不使用Python,而是使用数据库原生工具将数据提取到CSV或其他较小的文件中,这是最快的。
  2. 读取平面文件并进行计算,写入平面文件。这真的很快。
  3. 从平面文件进行批量更新。同样,如果使用数据库原生工具集进行插入或更新,则速度最快。

如果您从一开始就不需要SQL,请考虑最初接收到的数据以及如何处理这些数据。

Python

  • 读取原始文件一次,解析它,创建您的Python对象,并对整个列表或字典进行pickle。这意味着每个后续程序都可以简单地加载pickled文件并开始进行分析。然而。你不能很容易地更新这个酸洗过的文件。你必须创建一个新的。这不是一件坏事。它让你一次完成对原始文件的处理,解析它,使用history.

  • Read创建你的Python对象。这意味着您可以更新该文件。Python

  • 读取原始文件一次,解析它,创建您的Python对象,并将整个列表或字典保存为

或YAML文件。这意味着每个后续程序都可以简单地加载JSON (或YAML)文件并开始进行分析。然而。您不能轻松地更新该文件。你必须创建一个新的。这不是一件坏事。它为您提供完整的处理历史记录。

这可能会比酸洗稍微慢一点。它需要您编写一些帮助器,以便正确地转储和加载JSON对象。但是,您可以读取JSON (和YAML),这将使您在使用该文件时具有一些优势。

票数 5
EN

Stack Overflow用户

发布于 2010-09-23 02:51:08

请查看sqlalchemy,这是Python的对象关系映射器。

sqlalchemy允许您将数据库表映射到Python对象。当您这样做时,所有的操作都可以在Python对象上完成(一旦加载了数据),并且当您完成处理时,您可以更新数据库。

假设您有一台现成的基准计算机,25MB绝对不是什么大问题,您可以将整个数据库缓存到内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3770394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档