InnoDB
memcached插件
将memcached实现为 MySQL 插件守护进程,它InnoDB
绕过 MySQL SQL 层直接访问存储引擎。
下图说明了daemon_memcached
与 SQL 相比,应用程序如何通过插件访问数据。
该daemon_memcached
插件的特点:
memcached作为 mysqld的守护进程插件。mysqld和 memcached都在同一个进程空间中运行,对数据的访问延迟非常低。
直接访问
InnoDB
表,绕过 SQL 解析器、优化器,甚至 Handler API 层。标准memcached协议,包括基于文本的协议和二进制协议。该 插件通过了memcapable 命令
daemon_memcached
的所有 55 项兼容性测试。多列支持。您可以将多个列映射到键值存储的 “值”部分,列值由用户指定的分隔符分隔。
默认情况下,memcached协议用于直接读取和写入数据
InnoDB
,让 MySQL 使用InnoDB
缓冲池管理内存缓存。默认设置代表了数据库应用程序的高可靠性和最少意外的组合。例如,默认设置避免数据库端未提交的数据,或为 memcachedget
请求返回的陈旧数据。高级用户可以将系统配置为传统的 memcached服务器,所有数据仅缓存在memcached引擎(内存缓存)中,或者使用 “ memcached引擎”(内存缓存)和
InnoDB
memcached引擎(InnoDB
作为后端持久化)的组合贮存)。
通过、
InnoDB
和 配置选项控制数据在memcached 操作 之间来回传递的频率 。 批量大小选项默认值为 1 以获得最大可靠性。innodb_api_bk_commit_interval
daemon_memcached_r_batch_size
daemon_memcached_w_batch_size
通过配置参数指定memcached选项 的能力。
daemon_memcached_option
例如,您可以更改memcached侦听的端口、减少同时连接的最大数量、更改键值对的最大内存大小或为错误日志启用调试消息。配置选项控制memcached处理的查询 的
innodb_api_trx_level
事务 隔离级别。虽然 memcached没有 事务的概念,但您可以使用此选项来控制 memcached多长时间才能看到由在daemon_memcached插件使用的表上发出的 SQL 语句引起的更改 。默认情况下, 设置为。innodb_api_trx_level
READ UNCOMMITTED
该选项可用于在 MySQL 级别锁定表,以便DDL
innodb_api_enable_mdl
无法 通过 SQL 接口删除或更改映射表。如果没有锁,表可以从 MySQL 层中删除,但会保留在存储中,直到 memcached或其他一些用户停止使用它。“ MDL ”代表“元数据锁定”。InnoDB
您可能已经熟悉将
memcached与 MySQL 结合使用,如将
MySQL 与memcached结合使用中所述。本节介绍集成InnoDB
memcached插件的功能与传统
memcached
.
安装:memcached库随MySQL 服务器一起提供,安装和设置相对容易。安装包括运行
innodb_memcached_config.sql
脚本以创建demo_test
供 memcached使用的表、发出INSTALL PLUGIN
语句以启用daemon_memcached
插件,以及将所需的memcached选项添加到 MySQL 配置文件或启动脚本。您可能仍会安装传统的memcached 发行版以获取其他实用程序,例如 memcp、memcat和 memcapable.要与传统的 memcached进行比较,请参阅 安装memcached。
部署:使用传统的memcached时,通常会运行大量低容量的 memcached服务器。然而,该插件的典型部署
daemon_memcached
涉及少量已经运行 MySQL 的中等或高性能服务器。这种配置的好处在于提高单个数据库服务器的效率,而不是利用未使用的内存或在大量服务器之间分布查找。在默认配置中, memcached使用的内存非常少 ,内存中查找由InnoDB
缓冲池提供,它会自动缓存最近和经常使用的数据。与传统的 MySQL 服务器实例一样,保持innodb_buffer_pool_size
配置选项的值尽可能高(不会导致操作系统级别的分页),以便在内存中执行尽可能多的工作。有关与传统 memcached的比较,请参阅 memcached部署。
Expiry:默认情况下(即使用
innodb_only
缓存策略),始终返回表中的最新数据InnoDB
,因此过期选项没有实际作用。如果将缓存策略更改为caching
或cache_only
,过期选项将照常工作,但如果请求的数据在从内存缓存中过期之前在基础表中进行了更新,则请求的数据可能会过时。有关与传统 memcached的比较,请参阅 数据过期。
命名空间:memcached就像一个大目录,您可以在其中为文件指定带有前缀和后缀的详细名称,以防止文件冲突。该
daemon_memcached
插件允许您对键使用类似的命名约定,但增加了一个。格式中的键名 。 使用表中的映射数据被解码以引用特定的 表。在指定表中查找或写入。@@
table_id
.key
table_id
innodb_memcache.containers
key
该
@@
表示法仅适用于对 、 和 函数的单独调用get
,add
但set
不适用于其他调用,例如incr
或delete
。要为会话中的后续memcached操作指定默认表, 请使用带有 的符号 执行get
请求 ,但不包含密钥部分。例如:@@
table_id
get @@table_id
后续
get
、set
、incr
、delete
等操作使用列中指定的
表table_id
innodb_memcache.containers.name
。要与传统的 memcached进行比较,请参阅 使用命名空间。
散列和分发:默认配置,使用
innodb_only
缓存策略,适用于所有数据在所有服务器上可用的传统部署配置,例如一组副本服务器。如果您在物理上划分数据,如在分片配置中,您可以在运行插件的多台机器上拆分数据
daemon_memcached
,并使用传统的memcached哈希机制将请求路由到特定机器。在 MySQL 端,您通常会通过 对memcachedadd
的请求 插入所有数据,以便将适当的值存储在适当服务器上的数据库中。要与传统的 memcached进行比较,请参阅 memcached哈希/分布类型。
内存使用:默认情况下(使用
innodb_only
缓存策略), memcachedInnoDB
协议通过表来回传递信息,InnoDB
缓冲池处理内存中查找,而不是memcached内存使用量的增长和收缩。memcached端 使用的内存相对较少。如果将缓存策略切换为
caching
或,则适用memcached内存使用cache_only
的正常规则。memcached数据值的内存是根据“ slabs ”分配的。您可以控制用于 memcached的 slab 大小和最大内存。无论哪种方式,您都可以使用熟悉的统计系统 监控和排除
daemon_memcached
插件 故障,通过标准协议访问 ,例如,通过telnet会话。该插件不包含额外的实用程序 。您可以使用该 脚本来安装完整的memcached 发行版。daemon_memcached
memcached-tool
线程使用:MySQL 线程和memcached 线程共存于同一台服务器上。操作系统对线程施加的限制适用于线程总数。
要与传统的 memcached进行比较,请参阅 memcached线程支持。
日志使用:因为memcached守护进程与 MySQL 服务器一起运行并写入
stderr
,用于记录写入输出到 MySQL 错误日志-v
的、-vv
和选项。-vvv
有关与传统 memcached的比较,请参阅 memcached日志。
memcached操作:可以使用熟悉 的memcached操作,例如
get
、set
、add
和delete
。序列化(即表示复杂数据结构的确切字符串格式)取决于语言接口。要与传统的 memcached进行比较,请参阅 Basic memcached Operations。
使用memcached作为 MySQL 前端:这是
InnoDB
memcached插件的主要目的。集成的 memcached守护进程提高了应用程序性能,InnoDB
处理内存和磁盘之间的数据传输简化了应用程序逻辑。有关与传统 memcached的比较,请参阅 使用memcached作为 MySQL 缓存层。
实用程序:MySQL 服务器包括
libmemcached
库但不包括其他命令行实用程序。要使用 memcp、memcat和 memcapable命令等命令,请安装完整的 memcached发行版。当 memrm和memflush 从缓存中删除项目时,这些项目也会从基础InnoDB
表中删除。要与传统 memcached进行比较,请参阅 libmemcached命令行实用程序。
编程接口:您可以
daemon_memcached
使用所有支持的语言通过插件访问 MySQL 服务器: C 和 C++、 Java、 Perl、 Python和PHP。与传统的memcached服务器一样指定服务器主机名和端口 。默认情况下,daemon_memcached
插件侦听端口11211
。您可以同时使用 文本和二进制协议。您可以自定义 memcached 的行为在运行时运行。序列化(即表示复杂数据结构的确切字符串格式)取决于语言接口。有关与传统 memcached的比较,请参阅 开发memcached应用程序。
常见问题解答:MySQL 有针对传统memcached的广泛常见问题解答。FAQ 大部分适用,除了使用
InnoDB
表作为memcached 数据的存储介质意味着您可以将memcached用于比以前写入密集型应用程序更多,而不是作为只读缓存。请参阅memcached常见问题解答。