从 -http://www.readwriteweb.com/hack/2011/04/you-got-nosql-in-mysql-memcach.php
(如果没有意义请纠正我)
潜在利益
将复杂的查询计算保存到分布式环境中
避免重复查询,当有多个服务器(超过 5 个数据库服务器)时可能会受益最多 - 查询一次,存储在 memcached 中并永久重复使用
innodb 具有内部缓冲池大小,
使用 memcached 作为分配器是否有意义?
不过我认为访问本地 RAM 比在分布式环境中要快得多
有什么想法吗?
答案1
我认为这两种机制应该正确平衡,并且绝不能互相排斥。原因是什么???
memcached 是一种管理良好的内存方案,使用用户定义的标签来存储数据。这样就无需繁重的磁盘 I/O。
InnoDB 是一种符合 ACID 标准的存储引擎,它使用 MVCC(多版本并发控制)来允许大量事务读写。如果有足够的内存,您可以将工作数据集全部存储在 RAM 中,从而消除磁盘 I/O。
如果将它们全部组合起来,它们的全部优势最多只能抵消彼此的优势。我可以绝对肯定地说,因为 InnoDB 将缓存所有访问的数据和索引页,而 memcached 将存储相同的用户数据。
Memcached 不会在其缓冲池中存储 InnoDB 所拥有的索引页信息。
Memcached 将仅存储所需的确切数据。InnoDB 数据页可能包含来自其他表行的数据。
与 memcached 相比,InnoDB 可以更轻松地检索数据范围,因为 memcached 必须通过 DB 层作为附加步骤。
这两款产品必须成为一对夫妻(请原谅我打个比喻,我已经幸福地结婚16年了)。每个伴侣都必须微调自己的优势以适应对方,并在所有事情上达到理想的平衡。InnoDB(强势妻子)和 Memcached(强势丈夫)也是如此。
InnoDB 可以根据所有数据和索引页的总和或已安装 RAM 的 75%(以较小者为准)分配所需的 RAM。Memcached 虽然占用较少的前期内存,但可能需要某种形式的预测来确定要准备处理多少内存。
还请记住,当读取量很大时,由于访问 InnoDB 缓冲池之外的 RAM 部分(用于访问 InnoDB 缓冲池中的相同数据),InnoDB 中的数据和索引页的使用会变得相当陈旧(但内容是最新的)。因此,写入 memcached(然后将数据转发到 InnoDB)仍将触发最终的磁盘 I/O。InnoDB 提供快速读取的能力被 memcached 所取代。在相同的控制流中,仅在编写和记录小型事务以提供崩溃恢复时才需要 InnoDB。(HHHMMMM 这听起来确实像丈夫(他提前做事,必须承认并爱他的妻子)和妻子(帮助丈夫摆脱困境但保持尊严),不是吗???)
结论
如果您正确预测了 memcached 将保存多少数据,则可以按 memcached 所需的总 RAM 的百分比来扩展 InnoDB(即,如果您计划为 memcached 使用 8G RAM,则 InnoDB 缓冲池的 RAM 应为 6G 或更少)。总而言之,它们的内存使用量必须小于安装的总 RAM。一旦达到此平衡,InnoDB 和 memcached 将完全互补。