【问题标题】:Store MySql query results for faster reuse存储 MySql 查询结果以便更快地重用
【发布时间】:2017-08-29 22:23:34
【问题描述】:

我正在用 python 对来自 MySql 数据库的数据进行分析。我在数据库中查询了大约 200,000 行数据,然后使用 Pandas 在 python 中进行分析。我经常会对相同的数据进行多次迭代,更改不同的变量、参数等。每次运行程序时,我都会查询远程数据库(大约 10 秒查询),然后在程序完成时丢弃查询结果。我想将上次查询的结果保存在本地文件中,然后每次运行程序时检查查询是否相同,然后使用保存的结果。我想我可以将 Pandas 数据帧写入 csv,但是有更好/更简单/更快的方法吗?

【问题讨论】:

  • 200K 并不是很多数据。虽然迭代总是很慢,这就是它不用于查询、报告或分析数据的原因。精心设计的应用程序生成的数据库报告不会在处理之前将所有数据加载到内存中。要么创建适当的查询和索引,无需迭代即可返回您需要的结果,或者创建一个单独的报告数据库,其架构适合分析,例如星型架构
  • 听起来是个好计划。将其写入本地文件,然后读取该文件。想不出更容易的事情了。
  • @RobertB 实际上它很糟糕而且很慢。当你有一个数据库可以比不使用任何优化访问的迭代更快地执行基于集合的操作时,为什么要在内存中迭代呢?在 10 秒内,数据库应该会产生 final 结果。只有 200K 行
  • 您假设他知道如何用 SQL 重写他的分析。你的建议很中肯,但我只是在回答他的问题。如果他对 Python 代码进行了投资,但没有时间或知道如何用 SQL 重写它,那么他的想法可能是一种快速而肮脏的方式来获得一些加速。

标签: python mysql database pandas


【解决方案1】:

如果由于任何原因 MySQL Query Cache 没有帮助,那么我建议以 HDF5 格式或 Feather 格式保存最新的结果集。两种格式都非常快。您可以在这里找到一些演示和测试:

https://stackoverflow.com/a/37929007/5741205

https://stackoverflow.com/a/42750132/5741205

https://stackoverflow.com/a/42022053/5741205

【讨论】:

    【解决方案2】:

    只需使用 pickle 将数据帧写入文件,然后将其读回(“unpickle”)。

    https://docs.python.org/3/library/pickle.html

    这将是“简单的方法”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2017-02-09
      • 2012-02-13
      相关资源
      最近更新 更多