from – http://www.readwriteweb.com/hack/2011/04/you-got-nosql-in-mysql-memcach.php
(纠正我,如果没有意义)
潜在的好处
节省复杂的查询计算到分布式环境
避免重复查询,并且可能在拥有多个服务器(超过5个数据库服务器)时获益最多 – 查询一次,存储在memcached中并永久重用
innodb具有内部缓冲池大小,
让memcached充当分销商是否有意义?
不过,我认为访问本地RAM要比分布式环境快得多
有什么想法吗?
恕我直言,两个mechnanisms应该正确平衡,从不被视为互斥。 原因 ???
memcached是pipe理良好的内存scheme,用于使用用户定义的标签来存储数据。 这消除了繁重的磁盘I / O的需要。
InnoDB是一个兼容ACID的存储引擎,它使用MVCC(多版本并发控制)来实现繁重的事务读写。 给定足够的内存,可以将工作数据集全部存储在RAM中,从而消除磁盘I / O。
如果你们把他们全部结合在一起,他们的全部优势就会使对方的利益无效。 我可以肯定地说,因为InnoDB将caching所有访问的数据和索引页,而memcached将存储相同的用户数据。
Memcached不会存储InnoDB在其缓冲池中的索引页信息。
Memcached将只存储所需的确切数据。 InnoDB数据页面可能包含来自其他表格行的数据。
InnoDB比memcached更容易检索数据范围,因为memcached必须通过数据库层作为附加步骤。
这两种产品必须成为一对已婚夫妇( 原谅这个比喻,我已经快乐结婚16年了 )。 每个伴侣都必须调整自己的长处来适应对方,并在每件事上达到理想的平衡。 因此,InnoDB(强大的妻子)和Memcached(强壮的丈夫)是。
InnoDB可以根据需要分配所有数据和索引页面的总数,或者是已安装RAM的75%,以较小者为准。 Memcached虽然占用较less的前期内存,但可能需要某种forms的预测来确定要处理多less内存。
另外请记住,当涉及到大量读取时,InnoDB中的数据和索引页面在使用中会变得相当陈旧(但内容是最新的),因为访问InnoDB缓冲池之外的部分RAM是相同的数据也驻留在InnoDB缓冲池中。 因此,写memcached,然后将数据转储到InnoDB,仍然会触发最终的磁盘I / O。 InnoDB提供快速读取的能力被memcached带走。 在相同的控制stream程中,仅在编写和logging小事务以提供崩溃恢复时才需要InnoDB。 (HHHMMMM,这听起来像丈夫(他事先做事,必须承认和爱妻子)和妻子(拯救丈夫,但保持他的尊严),不是吗?)
结论
如果您正确地预测了memcached将保存多less数据,则可以按照memcached所需RAM总量的百分比来扩展InnoDB(例如,如果您计划使用8G的RAM作为memcached,则为InnoDB缓冲池使用6G或更less的RAM)。 综合起来,它们的内存使用量必须小于安装的内存总量。 一旦达到这个平衡,InnoDB和memcached将会相互补充。