memcached 和 mysql 结合使用的两种实现选择?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
+关注继续查看
 这是我在知乎上抛出的一个问题"我们的应用已经决定采mysql+memcached 的方式,针对的数据库版本是 mysql 5.1,目前已经进行了半个月的编码实现:
    1.采用的是 ”memcached 和mysql 独立的实现方式,在编码层控制读 memcached,找不到再去数据库读,写数据库,然后再去更新 memcached,在这个过程发现逻辑复杂度比较高。
    2.现在发现 “Using the MySQL memcached User-Defined Functions” 的实现方式,是通过触发器解决以上复杂逻辑的,从我的感觉上来看,应该是降低了代码复杂度。
    我想诸位老师帮助我从理论上分析一下这两种方式的利弊,当然最好从实战角度分析两者的利弊,或者两者在使用上有什么值得注意之处,哪种更好,谢谢"

各位老师的回答如下:
1.建议在应用层直接处理,而不要使用MySQL memcached User-Defined Functions

卢钧轶,MySQL DBA
虽然个人没用过memcached UDF,但是做过简单的评估,主要有以下几点觉得不适用于production。
1. 增加了Memcached和MySQL之间的耦合性。
试想如果UDF指向的memcached挂了,trigger方式调用的UDF是不会接收到报错返回的,程序段自然也无法做相应处理。
2. 增加了MySQL的服务器压力。
MySQL本身就是一个对服务器性能要求较高的DBMS,原本简单的App <--> Memcached,现在变成了 App <---> MySQL <---> Memcached ,无形中增加了MySQL不必要的转发压力(网络,CPU的损耗)
3. 运维困难。
某台Memcached如需升级,分离式架构只需要修改APP配置文件。而UDF的方案就需要修改相应的trigger,trigger是很难进行版本控制和批量下发管理的,无形中对运维造成了很大的困难


结合这位老师的思路经过自己的进一步考察,单单对于第一点,我觉得就可以抛弃使用memcached UDF了,作为一个为上万客户提供服务的后台程序,容错,单点故障是必须要考虑并处理的,如果无法准确知道错误的发生,就很难迅速进行补救;

2.给出在应用层简化处理memcached逻辑的思路

范凯,互联网创业者,JavaEye网站创始人
>>在编码层控制读memcached,找不到再去数据库读,写数据库,然后再去更新memcached,在这个过程发现逻辑复杂度比较高。
如果你的应用数据的粒度划分足够细,并且配合良好的ORM层对象缓存,那么没有任何逻辑复杂度,代码根本不需要涉及这些部分,都是ORM层缓存自动处理掉了。

经过我的进一步考察,相关的ORM框架有基于java的,C#的,由于我们的项目是使用C++语言实现,目前我还没有找到与之对应的相关ORM框架。

3.给出在应用层做memcached和mysql结合的使用建议

曹政
我喜欢在应用层做,没觉得逻辑复杂在哪里。
几个要点
1:memcache和mysql的链接时间,如果两个链接同时开启,先开启的会影响后开启的,比如memcache先开启链接,然后开启mysql,如memcache阻塞,程序未及时释放,会连带导致mysql崩溃,这种情况以前遇到过,记住链接必须加超时限制,防止连带阻塞现象。或者,释放memcache连接后,再开启mysql链接(这样不利于程序封装)
2:memcache命中率如不高,不如不用。做memcache应用后,第一件事情是测试命中率情况,不能认为加了缓存就一定可以提高效率。
3:如果数据块较大,放在memcache中读取的效率或许不如mysql。
4:随时监控swap分区占用情况,确保内存使用合理。
5:memcached适合简单的key-value查询,如果涉及结构性内容,或者排名类应用,建议使用redis.

本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/1016257如需转载请自行联系原作者

yaocoder
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11月前
|
NoSQL 关系型数据库 MySQL
《PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL》电子版地址
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
68 0
《PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL》电子版地址
|
11月前
|
SQL 存储 关系型数据库
MYSQL 索引成本计算,为什么MYSQL预判后选择了错误索引?
IO 成本: 即从磁盘把数据加载到内存的成本,默认情况下,读取数据页的 IO 成本是 1,MySQL 是以页的形式读取数据的,即当用到某个数据时,并不会只读取这个数据,而会把这个数据相邻的数据也一起读到内存中,这就是有名的程序局部性原理,所以 MySQL 每次会读取一整页,一页的成本就是 1。所以 IO 的成本主要和页的大小有关
186 0
|
11月前
|
存储 SQL JSON
不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏
不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏
240 1
不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏
|
11月前
|
Java 关系型数据库 MySQL
HikariPool-1 - Exception during pool initialization. Springboot 默认选择的mysql
HikariPool-1 - Exception during pool initialization. Springboot 默认选择的mysql
890 1
|
11月前
|
存储 关系型数据库 MySQL
MySQL存储引擎的选择
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作
61 5
|
存储 运维 Oracle
选择Percona Server、MariaDB还是MYSQL|学习笔记
快速学习选择Percona Server、MariaDB还是MYSQL
464 0
|
关系型数据库 MySQL 测试技术
软件测试mysql面试题:如何从表中选择所有奇数记录?
软件测试mysql面试题:如何从表中选择所有奇数记录?
55 0
|
SQL 关系型数据库 MySQL
软件测试mysql面试题:编写SQL查询以从表中选择所有记录?
软件测试mysql面试题:编写SQL查询以从表中选择所有记录?
64 0
|
存储 JSON NoSQL
为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)
本文献给准备面试或者是还在面试的你。常见面试题,送分题目,不拿白不拿。
387 0
为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)
|
存储 关系型数据库 MySQL
Mysql数据类型的选择
Mysql数据类型的选择
Mysql数据类型的选择
推荐文章
更多
推荐镜像
更多