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

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


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

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

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

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

var xxx;
if(!xxx){
xxx = mysql查询;
}
GtDzx
2014-12-31 16:49:32 +08:00
一般还是磁盘io更容易跑死吧
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