【问题标题】:CSV vs MySQL performanceCSV 与 MySQL 的性能
【发布时间】:2010-10-08 08:16:44
【问题描述】:

让我们假设 PHP5 使用 MySQL5 和 CSV 文件的相同环境。 MySQL 与托管脚本位于同一主机上。

MySQL 是否总是比将记录检索/搜索/更改/添加/删除到 CSV 更快?

或者是否有一些数据低于 PHP+CSV 的性能优于使用数据库服务器?

【问题讨论】:

  • 您对 CSV 与 MySQL 的基线测量是什么?一般来说,CSV 比 MySQL 快得多。然而,你的问题说 MySQL 会更快。你在做什么让 MySQL 比 CSV 更快?

标签: php mysql performance csv


【解决方案1】:

CSV 不允许您为快速搜索创建索引。

如果您总是需要单个表中的所有数据(例如 application settings),CSV 会更快,否则不会。

这里我什至不考虑SQL queriestransactionsdata manipulationconcurrent access,因为CSV 肯定不适合这些东西。

【讨论】:

  • 可能还有其他一些 CSV 更快的边缘情况......但这是我唯一能想到的。 :)
【解决方案2】:

不,MySQL 在插入(附加到 CSV 非常快)和表扫描(非基于索引)搜索方面可能会更慢。

从 CSV 更新或删除非常重要 - 我将其作为练习留给读者。

如果您使用 CSV,则需要非常小心地正确处理多个线程/进程,否则您将获得错误数据或损坏文件。

不过,还有其他优点。想知道如何在 CSV 上执行 ALTER TABLE?

如果您需要更新、删除、更改表或同时从多个进程访问文件,则使用 CSV 是一个非常糟糕的主意。

【讨论】:

  • 十二年后,你让某人发笑。 “我把它留给读者作为练习。”也许我只是累了,但今晚我真的很感激。 10/10 关于这种用法。
  • 我正在处理一个包含大约 1000 条记录的 csv 文件。用户可以每次添加一行,因此可以让更多用户同时在此文件中插入新行。这会是个问题吗?此外,用户每次可以请求一行来搜索作为 csv 的“主键”的代码(AAPL、TSLA、ecc...)。这是您不建议使用 csv 的情况之一吗?谢谢。
【解决方案3】:

作为一个来自数据行业的人,我已经处理过这种情况。

一般来说,MySQL 会更快。

但是,您没有说明您正在开发的应用程序的类型。您是否正在开发一个主要用于搜索和检索记录的数据仓库应用程序?您的记录中通常有多少字段?您的数据文件中通常有多少条记录?这些文件之间是否有任何关系属性,即您是否有客户文件和客户订单文件?你有多少时间来开发一个系统?

答案将取决于前面列出的问题的答案。但是,您通常可以使用以下指南:

如果您正在构建一个记录超过一百万的数据仓库应用程序,您可能需要考虑放弃这两者并转移到Column Oriented Database

对于较小的数据集,CSV 可能会更快。但是,在 CSV 中滚动您自己的插入例程可能会很痛苦,并且您会失去数据库索引的优势。

我的一般建议是只使用 MySql,正如我之前所说,在大多数情况下它会更快。

【讨论】:

    【解决方案4】:

    正如@MarkR 所说,从纯粹的性能角度来看,这完全取决于您正在执行的操作。附加到平面文件非常快。与读取整个文件一样(用于非索引搜索或其他目的)。

    确定哪种方法更适合您平台上的用例的唯一方法是进行实际分析。我可以向您保证,对一百万行数据库执行全表扫描将比对一百万行 CSV 文件的grep 慢。但这可能不是您使用的实际示例。 “断点”将根据您对检索、索引搜索、非索引搜索、更新、追加的特定组合而有很大差异。

    对我来说,这不是性能问题。您的数据听起来是面向记录的,而 MySQL 在处理此类数据方面(一般而言)非常出色。如果您的用例在您的数据变大时甚至有点复杂,那么与 100k 记录 db 表相比,处理 100k 行 CSV 文件将是可怕的,即使性能稍微好一点(这是绝对没有的)表示保证)。

    【讨论】:

      【解决方案5】:

      取决于用途。例如,对于配置或语言文件,CSV 可能会做得更好。 无论如何,如果你使用 PHP5,你有第三个选项——SQLite,它嵌入在 PHP 中。它使您像常规文件一样易于使用,但 RDBMS 的健壮性。

      【讨论】:

        【解决方案6】:

        数据库用于存储和检索数据。如果您需要的不仅仅是简单的行/条目添加或批量列表,为什么不采用数据库方式呢?否则,您基本上必须自己编写功能(包括删除、排序等)。

        【讨论】:

          【解决方案7】:

          CSV 是一种非常脆弱的格式,需要您的应用进行所有格式化和计算。如果您需要更新 csv 中的特定记录,您必须首先读取整个 csv 文件,找到内存中需要更改的条目,然后再次将整个文件写出。这会很快变得非常缓慢。 CSV 仅适用于一次写入、一次读取类型的应用程序。

          【讨论】:

            【解决方案8】:

            如果你想在夜间像小偷一样快速导入,请使用 SQL 格式。

            如果您在生产服务器中工作,CSV 速度较慢,但​​它是最安全的。

            只需确保 CSV 文件没有会覆盖现有数据的主键。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-07-11
              • 2016-09-11
              • 2010-10-21
              • 1970-01-01
              • 1970-01-01
              • 2019-11-15
              • 1970-01-01
              相关资源
              最近更新 更多