3

我很难清楚地了解 MySQL 5.6 引入了 w/r/t memcache 什么。

据我了解,memcache 本身本质上是一个巨大的、共享的、驻留内存的哈希表,由服务器memcached管理。特别是,它对持久数据存储一无所知,并且在这方面不提供任何服务。它只知道(如 Perl 哈希)。

认为mySQL 5.6 引入的是NoSQL API,由此 mySQL 客户端可以通过密钥从 mySQL 服务器请求数据,而不是通过 SELECT 语句。(同样,他们可以使用 key=value 对执行更新)。MySQL 使用memcached将这些缓存在内存中以提高性能,但也负责处理诸如在缓存过期之前将更新写回数据库等事情。

换句话说,memcached的使用是 mySQL 5.6 NoSQL 特性的一个实现细节,并不是应用程序员需要注意的事情。

我欢迎对我的理解进行任何更正或放大。

谢谢,章

4

2 回答 2

2

我认为这很简单(来自官方文档):

我不同意你的最后一句话,应用程序程序员必须真正了解 memcache 插件,因为将它安装在 MySQL 服务器上意味着他可以决定(也许他将被迫)通过 memcached 语言接口或通过SQL接口

为了更好地理解这个插件对应用程序设计的影响,您应该知道 MySQL 使用 3 个配置表来进行适当的 memcached 管理;了解“cache_policies”的工作原理将为您的一些疑问提供一些帮助:

表 cache_policies 指定是使用 InnoDB 作为 memcached 的数据存储(innodb_only),还是使用传统的 memcached 引擎作为 backstore(仅缓存),或两者兼而有之(缓存)。在最后一种情况下,如果 memcached 在内存中找不到键,它会在 InnoDB 表中搜索值。

这是链接:innodb-memcached-internals

上面的这句话意味着,根据您对特定键值的决定,您将有不同的应用场景:

  1. innodb_only -> 表示可以通过sql接口或memcached接口查询数据,这里是一些memcached语言接口示例的链接memcached-interfaces
    1. cache-only -> 表示您应该只通过 memchached 接口查询数据
    2. 缓存 -> 表示你可以同时使用这两个接口(注意存储机制略有变化)

当然,后一种配置决定与您的特定需求密切相关

于 2013-01-26T00:27:12.910 回答
1

恐怕我并没有给你一个完整的答案,因为我也在努力寻找我需要的细节,然后再玩弄它。

话虽如此,但我设法发现您似乎遗漏了一个重要点,即通过新插件访问 InnoDB 存储引擎,您实际上完全绕过了 SQL 并避免了随之而来的所有开销。

这当然使它本质上是一个键/值存储,更类似于大多数 NoSQL 数据库,并具有与之相关的所有缺点。即没有加入等...

然而,对于这些天的许多应用程序而言,这正是我们想要的。我遇到的现实世界中只有少数几个性能提及,但似乎都指出这个实现明显优于 MongoDB 和其他类似的 NoSQL 解决方案(我不知道其中有多少真相),甚至一个(相对于深度)比较声称在商用服务器上高达 700k qps(相比之下,在经过良好调整的 MySQL 设置上约为 100k),如果属实,这令人难以置信。

资源在这里:

http://yoshinorimatsunobu.blogspot.co.uk/search/label/handlersocket

无论如何,对不起,我不能再帮忙了,但至少它值得深思!

于 2012-10-09T00:55:40.903 回答