寻求关于mysql 5.6 memcache集成的澄清

3
我很难清楚地了解MySQL 5.6在memcache方面引入了什么。
据我所知,单独的memcache本质上是一个由服务器管理的巨大的共享内存哈希表,它对持久数据存储一无所知,并且在这方面不提供任何服务。它只知道关键字和值(就像Perl哈希表)。
我认为MySQL 5.6引入了一个NoSQL API,通过该API,MySQL客户端可以按键而不是SELECT语句从MySQL服务器请求数据。(同样,他们可以使用键=值对执行更新)。MySQL使用memcached将这些缓存在内存中以提高性能,但还要负责诸如在缓存过期之前将更新写回数据库等事项。
换句话说,使用memcached是mySQL 5.6 NoSQL功能的实现细节,不是应用程序员需要注意的东西。
如果我有误或需要补充,请指正。谢谢。 Chap
2个回答

2
我认为这很简单(来自官方文档):
我不同意你最后一句话,应用程序员必须非常注意memcache插件,因为在MySQL服务器上使用它意味着他可以决定(也许他将被迫)通过memcached语言接口或通过SQL接口访问数据。
为了更好地理解此插件对应用程序设计的影响,您应该知道MySQL使用3个配置表来进行适当的memcached管理;了解“cache_policies”如何工作将为您的一些疑虑提供一些启示:
引用如下:
表cache_policies指定是否将InnoDB用作memcached的数据存储(innodb_only),还是使用传统的memcached引擎作为后端存储(cache-only),或者两者都使用(caching)。在最后一种情况下,如果memcached无法在内存中找到键,则会在InnoDB表中搜索值。
这意味着,根据您为特定键值所做的决定,您将拥有不同的应用程序场景。链接如下: innodb-memcached-internals 英译中:
  1. innodb_only -> 表示您可以通过 SQL 接口或 Memcached 接口查询数据,这里有一些 Memcached 语言接口示例的链接 memcached-interfaces
    1. cache-only -> 表示您应该仅通过 Memcached 接口查询数据
    2. caching -> 表示您可以使用两种接口(请注意存储机制略有变化)

当然,后一种配置决策严格与您的特定需求相关。


1
很抱歉,我并没有完整的答案可以给你,因为我也在努力寻找所需的详细信息。
不过,有一点非常重要,我已经发现你可能忽略了,那就是通过新插件访问InnoDB存储引擎实际上完全绕过了SQL,并避免了所有相关的开销。
当然,这使它本质上成为一个键/值存储,更类似于大多数NoSQL数据库,具有所有相关的缺点,例如没有连接等。
然而,在如今许多应用程序中,这正是我们想要的。我遇到的只有少数几个真实世界的性能提及,但所有这些都似乎指向这种实现显着优于MongoDB和其他类似的NoSQL解决方案(我不知道其中有多少真相),甚至有一个(相对深入)比较声称在普通服务器上高达700k qps(与调整良好的MySQL设置约100k相比),如果属实,那就令人难以置信。
资源在此处:

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

不管怎样,很抱歉我不能提供更多的帮助,但至少可以作为思考的食粮!


那个博客上的数字相当惊人。但是我仍然找不到MySQL的“NoSQL”API的规范。我了解它与memcached的API非常相似,但我很难找到规范。 - Chap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接