让我们假设PHP5使用MySQL5和CSV文件的环境相同。 MySQL与托管脚本位于同一主机上。
MySQL总是比重新搜索/搜索/更改/添加/删除记录更快吗?
或者是否有一些数据低于哪些数据,PHP + CSV性能优于使用数据库服务器?
答案 0 :(得分:7)
CSV
不允许您为快速搜索创建索引。
如果您始终需要单个表格中的所有数据(例如application settings
),则CSV
会更快,否则不会。
我在这里甚至不考虑SQL queries
,transactions
,data manipulation
或concurrent access
,因为CSV
当然不适用于这些事情。
答案 1 :(得分:4)
不,MySQL可能会更慢地插入(附加到CSV非常快)和表扫描(非基于索引)搜索。
从CSV更新或删除是非常重要的 - 我将其作为读者的练习。
如果您使用CSV,则需要非常小心地正确处理多个线程/进程,否则您将获得错误的数据或损坏您的文件。
然而,还有其他优点。注意如何在CSV上进行ALTER TABLE?
如果您需要UPDATE,DELETE,ALTER TABLE或一次从多个进程访问该文件,使用CSV是一个非常糟糕的主意。
答案 2 :(得分:3)
作为一名来自数据行业的人,我已经处理过这种情况。
一般来说,MySQL会更快。
但是,您没有说明您正在开发的应用程序类型。您是否正在开发主要用于搜索和检索记录的数据仓库应用程序?您的记录中通常包含多少个字段?您的数据文件中通常存在多少条记录?这些文件是否具有彼此的任何关系属性,即您是否拥有客户文件和客户订单文件?你需要多长时间来开发一个系统?
答案取决于前面列出的问题的答案。但是,您通常可以使用以下指南:
如果您要构建一个记录超过一百万的数据仓库应用程序,您可能需要考虑放弃两者并转移到Column Oriented Database。
对于较小的数据集,CSV可能会更快。但是,在CSV中滚动自己的插入例程可能会很痛苦,而且您将失去数据库索引的优势。
我的一般建议就是使用MySql,正如我之前所说,在大多数情况下它会更快。
答案 3 :(得分:1)
从纯粹的性能角度来看,它完全取决于您正在进行的操作,正如@MarkR所说。附加到平面文件非常快。与读取整个文件一样(用于非索引搜索或其他目的)。
确定在您的平台上更好地处理用例的唯一方法是进行实际的分析。我可以向您保证,在百万行CSV文件上对百万行数据库进行全表扫描将比grep
慢。但这可能不是您使用的现实例子。 “断点”将根据您检索,索引搜索,非索引搜索,更新,追加的特定组合而有很大差异。
对我而言,这不是性能问题。您的数据听起来以记录为导向,并且MySQL在处理这类数据时非常优越(一般而言)。如果你的用例在数据变大的时候甚至有点复杂,那么与100k记录数据库表相比,处理100k行CSV文件将会非常可怕,即使性能稍微好一点(这是没有的)意味着保证)。
答案 4 :(得分:1)
取决于使用。例如,对于配置或语言文件,CSV可能会做得更好。 无论如何,如果你使用PHP5,你有第三个选项 - SQLite,它嵌入在PHP中。它使您易于使用,如常规文件,但RDBMS的稳健性。
答案 5 :(得分:0)
数据库用于存储和检索数据。如果您需要的不仅仅是普通行/条目添加或批量列表,为什么不选择数据库方式呢?否则你基本上必须自己编写功能(包括删除,排序等)。
答案 6 :(得分:0)
CSV是一种令人难以置信的脆弱格式,需要您的应用进行所有格式化和计算。如果您需要更新csv中的特定记录,则必须先读取整个csv文件,找到内存中需要更改的条目,然后再将整个文件写出来。这很快变得很慢。 CSV仅对一次写入,读取一次类型的应用程序非常有用。
答案 7 :(得分:0)
如果要像夜里的小偷一样迅速导入,请使用SQL格式。
如果您在生产服务器中工作,则CSV速度较慢,但最安全。
只需确保CSV文件没有主键即可覆盖您现有的数据。