这是计划。我从数据库中提取了一个大的CSV文件,有10 000个条目。这些条目看起来像:
所以,我已经阅读了关于将这些CSV数据传输到MySQL数据库,并查询这些数据库以了解谁在2012年2月销售更多,或者约翰的销售总额...或者我要求的任何内容... < / p>
但出于优化目的,缓存,优化和索引查询是必须的......女巫引导我来回答这个问题。因为我知道2-3查询我将一直做到DB ...是否更快地获取CSV文件,在PHP中发出请求并在磁盘上写入结果文件,所以我的所有调用都将是readfile -load-it,display-it?
该问题的另一个措辞是...对DB进行查询是将文件读取到磁盘更快还是更慢?因为如果DB有10 000条记录,并且保罗的销售结果是100行,那么该文件只包含100行,它会很小...查询总是需要大约相同的时间
请帮忙,我不知道自己编码只是为了发现对你来说很明显的事情...... 提前谢谢
答案 0 :(得分:3)
如果您坚持使用数据库规范化规则并将所有内容都包含在数据库中,那么您就可以了。 10k记录不是很多,你不必担心性能。
数据库查询更快,因为数据(部分)缓存在内存中而不是普通光盘上,除非完全读入RAM。
少数普通文本文件乍一看可能更快,但是当数据库中有100k文件和100k数据集时,数据库要好得多,...你没有无限制(并行) inode 访问并且正在减慢并杀死你的harddrive / ssd。 您拥有的文件越多,所有内容就越慢。
您还必须为已经集成到MySQL中的读/写操作手动编码锁定队列(行 - 和表锁定强>)。
考虑在几个月内你想扩展一切,...你将如何在文本文件中实现JOINS
?所有聚合功能 MySQL已经内置(GROUP BY
,ORDER BY
,...)。
MySQL有一个 profiler (在每个语句之前使用EXPLAIN
)并且可以优化更大的数据集。
当我上学时,我对老师说:'普通档案很多 比你的MySQL快。我为每个用户创建了一个包含目录的站点 只是存储在该用户文件夹内的文本文件中的属性 比如:
/menardmam/username.txt
,/menardmam/password.txt
,/DanFromgermany/username.txt
,....我试图对此进行基准测试 文本文件更快,但只是因为它只有1000个文本文件。 说到实际业务,100万个数据集,合并和 cross join,没有办法用文本文件来做这件事,而且申请一份工作来展示MySQL的工作比用文本文件做的要好得多。