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