InnoDB memcached Plugin要了解一下

InnoDB memcached Plugin在2012年NoSQL Memcached API for MySQL中提出 ,可谓达到mysql的最高水准,据说MySQL 5.7版本中单机已经支持到每秒百万级,很多时候我们在研究新技术,更多的时候还是借鉴它的设计理念,并从中得到启发。

测试基准

InnoDB memcached Architecture

innodb memcached插件将memcached实现为一个mysql插件守护进程,该守护进程直接访问innodb存储引擎,绕过mysql sql层。它的好处在于提高单个数据库服务器的效率,而不是利用未使用的内存或将查找分布在大量服务器上。

为了更好的吞吐量,innodb memcached通过控制较低提交新数据和更改数据的频率。当memcached操作插入、更新或删除基础innodb表中的数据时,可能会立即将更改提交到innodb表(如果守护进程memcached的批处理大小=1)或稍后某个时间(如果守护进程memcached的批处理大小值大于1)。无论哪种情况,都不能回滚更改。如果增加守护进程memcached的批处理大小的值以避免繁忙时间的高I/O开销,那么当工作负载减少时提交可能变得不频繁。作为安全措施,后台线程会定期自动提交通过memcached API所做的更改。同步间隔由innodb_api_bk_commit_interval 配置项控制,默认设置为5秒。

InnoDB Memcached与传统Memcached的区别

可以参阅相关文章

谁在用?

Facebook、阿里tddl

使用场景

类 KeyValue 查询(例如,SELECT id, name FROM users WHERE id=1002),这类 SQL 已经非常简单,但使用比率非常高。

memcached Commands and Associated DML or DDL Operations

memcached CommandDML or DDL Operations
geta read/fetch command
seta search followed by an INSERT or UPDATE (depending on whether or not a key exists)
adda search followed by an INSERT or UPDATE
replacea search followed by an UPDATE
appenda search followed by an UPDATE (appends data to the result before UPDATE)
prependa search followed by an UPDATE (prepends data to the result before UPDATE)
incra search followed by an UPDATE
decra search followed by an UPDATE
deletea search followed by a DELETE
flush_allTRUNCATE TABLE (DDL)

相关参数

使用 innodb_api_trx_level配置项控制事务隔离级别。
使用 innodb_api_disable_rowlock 选项禁用行锁。
使用 innodb_api_enable_mdl来禁用这些表上的DDL操作

使用

最适合简单GET请求的查询类型是那些在WHERE子句中具有单个子句或一组AND条件的查询:

--SQL:
SELECT col FROM tbl WHERE key = 'key_value';

--memcached:
get key_value

--SQL:
SELECT col FROM tbl WHERE col1 = val1 and col2 = val2 and col3 = val3;

--memcached:
-- Since you must always know these 3 values to look up the key,
-- combine them into a unique string and use that as the key
-- for all ADD, SET, and GET operations.
key_value = val1 + ":" + val2 + ":" + val3
get key_value

--SQL:
SELECT 'key exists!' FROM tbl
  WHERE EXISTS (SELECT col1 FROM tbl WHERE KEY = 'key_value') LIMIT 1;

--memcached:
-- Test for existence of key by asking for its value and checking if the call succeeds,
-- ignoring the value itself. For existence checking, you typically only store a very
-- short value such as "1".
get key_value

引用资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值