MySQL 5.5 InnoDB 是否将索引保存在内存中,将表保存在磁盘上?它是否会对部分或整个表进行自己的内存缓存?或者它是否完全依赖于操作系统页面缓存(我猜是这样的,因为 Facebook 为 MySQL 构建的 SSD 缓存是在操作系统级别完成的:https://github.com/facebook/flashcache/)?Linux 是否默认将所有可用 RAM 用于页面缓存?因此,如果 RAM 大小超过表大小 + 进程使用的内存,那么当 MySQL 服务器启动并首次读取整个表时,它将从磁盘读取,从那时起,整个表都在 RAM 中?因此,使用 Alchemy 数据库(Redis 上的 SQL),所有内容始终在 RAM 中:http://code.google.com/p/alchemydatabase/) 在内存和数据库大小相同的情况下,应该不会比 MySQL 快很多吧?
答案1
了解 innodb_buffer_pool_size。
这就是你告诉 innodb 要保留多少 RAM 用于缓存的方式。(不使用操作系统页面缓存)
MySQL 5.5 文档 -http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html
值得关注的优秀博客 -http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
可以将 Flashcache 视为位于 HDD 前面的 L1 SSD 缓存。
我无法评价 Redis 与 MySQL 的性能,但 MySQL 在处理语句、ACID 合规性等方面确实存在其他性能开销……
如果全部使用 RAM,则任何系统上的性能都会“良好”。