一个页面读 10 次硬盘 io 好,还是取 10 次 mysql 查询好?

2014-12-31 16:27:11 +08:00
kmvan  kmvan


如果服务器没有 memcache 之类的内存数据库,那么程序将缓存数据存为硬盘文件。

在一个页面中,有 10 个模块,每个模块都需要读取一次 mysql 来查询数据。如果将各个模块缓存,没有 memcache 的情况下,将得到缓存数据为 10 个的硬盘文件,这样就减轻了 mysql 压力了。

But,这样做真的可以吗?磁盘 io 比起 mysql 谁更容易跑死?
4710 次点击
所在节点   程序员  程序员
24 条回复
huigeer
huigeer
2014-12-31 16:31:35 +08:00
mysql 的查询也是有缓存滴 一定要磁盘io, 建议ssd
tczzjin
tczzjin
2014-12-31 16:33:27 +08:00
如果你的磁盘io和mysql都是跑在一个服务器的话那就是走mysql好,如果是不同服务器的话...
既然你都有>=2的服务器了,再配台服务器专门弄缓存才是王道
66CCFF
66CCFF
2014-12-31 16:33:36 +08:00
考虑ram cache?
yanze0613
yanze0613
2014-12-31 16:35:27 +08:00
同样的查询,mysql也有缓存,看具体查询了
9hills
9hills
2014-12-31 16:35:39 +08:00
你这个没法量化,比如MySQL查询是那种查询。10次IO又是多大的IO。。
learnshare
learnshare
2014-12-31 16:39:46 +08:00
MySQL 也是存取文件,不过还有数据的缓存。当然,直接读硬盘的文件也很快。But 你不做测试,没法直接断言
wesley
wesley
2014-12-31 16:41:28 +08:00
如果是小文件,磁盘读取也是有缓存的

btw 可以用mysql的内存表
lincanbin
lincanbin
2014-12-31 16:43:38 +08:00
MySQL是有Cache的,近期的热数据会在内存的Cache里拿。
如果你是说用文件作Cache的话,只有在数据库数据量特别巨大时,才有明显效果。
typcn
typcn
2014-12-31 16:45:08 +08:00
我都是直接存成程序的变量 简单暴力有效

var xxx;
if(!xxx){
xxx = mysql查询;
}
GtDzx
GtDzx
2014-12-31 16:49:32 +08:00
一般还是磁盘io更容易跑死吧
akstrom
akstrom
2014-12-31 16:49:44 +08:00
shtml
66450146
2014-12-31 16:55:50 +08:00
/dev/shm

如果不用 ramdisk 的话妥妥的是 MySQL 啊
zhicheng
2014-12-31 17:08:48 +08:00
简单回答: MySQL
这个和文件系统,文件尺寸,IO 性能,服务器内存大小都有很大关系。
bjzhush
2014-12-31 17:13:46 +08:00
你不知道innodb buffer pool嘛
lhbc
2014-12-31 17:17:38 +08:00
Linux 系统,读过一次的文件在内存里,如果内存足够的话
数据库如果查询比较复杂,耗费计算资源还是比较多
lyragosa
2014-12-31 17:44:09 +08:00
实践出真知

我测试过 反复读100000次同一条sql文,和反复读硬盘上的一个文件,后者速度在我的机器上快很多。

ssd,可能对其他应用不一定成立。所以自己测试才是王道。
msg7086
2014-12-31 17:49:43 +08:00
说得好像读磁盘文件一定会访问磁盘一样
zhicheng
2014-12-31 17:54:50 +08:00
觉得读磁盘更快的同学,你们有没有考虑过一个问题,为什么大多数 Key/Value 数据库不是简单的把 Key 作为文件名 ,Value 作为内容按单个文件存储?
yueyoum
2014-12-31 18:22:43 +08:00
@zhicheng 为什么呢?
MozzieCN
2014-12-31 18:29:44 +08:00
@yueyoum 因为文件是被缓存的,就算不会被缓存,按目前的文件系统来看,大文件基本上都是连续存储的.文件太小太多的话是随机存储,会增加磁头移动定位的时间.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/158242

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX