包阅导读总结
1. 关键词:ReadySet、SQL 缓存引擎、性能提升、数据库、轻量级
2. 总结:本文介绍了轻量级 SQL 缓存引擎 ReadySet,它无需更改代码和切换数据库,能提升实时应用程序性能,支持 MySQL 和 PostgreSQL,介绍了其下载、运行、缓存查询等操作及测试效果。
3. 主要内容:
– 介绍作者背景
– 引出 ReadySet 技术
– 目的:提高实时应用程序性能
– 特点:无需改代码和切换数据库,高效易集成
– 介绍 ReadySet
– 是支持 MySQL 和 PostgreSQL 的轻量级缓存解决方案
– 介于应用和数据库之间,类似 Redis 或 Memcached
– 基于特定博士论文,由特定人员领导创新
– 操作步骤
– 下载 Docker 镜像
– 运行服务,配置相关参数
– 缓存查询,检查是否支持及创建缓存
– 查看缓存查询并测试效果,对比执行时间
思维导图:
文章地址:https://mp.weixin.qq.com/s/xNo8B0D7V5oQ8ybM2Ni_JA
文章来源:mp.weixin.qq.com
作者:贺春旸
发布时间:2024/8/25 16:18
语言:中文
总字数:1521字
预计阅读时间:7分钟
评分:85分
标签:SQL缓存,性能优化,数据库管理,ReadySet,轻量级解决方案
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
贺春旸,dbaplus社群金牌专家,凡普金科和爱钱进DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一&二版、《MySQL运维进阶指南》作者,曾任职于中国移动飞信、安卓机锋网。五次荣获dbaplus年度MVP,致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。
在数据库管理中,许多开发人员都面临着如何在不影响实时应用功能的前提下保持性能的挑战。这就引出了本文的焦点技术——ReadySet。
ReadySet 是什么?根据其 GitHub 存储库,ReadySet 旨在通过提供强大的 SQL 缓存引擎来提高实时应用程序的性能,无需更改现有代码,也无需切换数据库。该解决方案承诺高效且易于集成,因此对于希望加快应用程序速度的开发人员来说,它是一个引人注目的选择。
Readyset(工具地址:https://github.com/readysettech/readyset)是一种可支持 MySQL 和 PostgreSQL 的轻量级缓存解决方案,利用内存来存储缓存数据,实现复杂 SQL 的闪电般快速查询。
Readyset 介于应用程序和数据库之间,是一个 SQL Cache 层。相当于 Redis 或 Memcached 的作用,但它不需要更改你的一行代码。
ReadySet 基于 Jon Gjengset 的麻省理工学院博士论文《基于数据流的物化视图中的部分状态》,首席执行官 Alana Marzoev 领导着公司的创新之旅。向大家介绍该工具的是马塞洛-阿尔特曼(Marcelo Altmann),他是一位因对 Percona XtraBackup 的贡献而闻名的开发人员,他现在是 ReadySet 开发团队的成员。
Java/PHP 应用程序 -> Readyset -> MySQL 数据库
Readyset 缓存架构示意图
1、对于读操作:
2、对于写操作 (INSERT、UPDATE、DELETE):
这种设计使 Readyset 特别适合读密集型应用,能显著提升查询性能,同时保持操作的简便性和数据的最终一致性。
1、下载 Readyset Docker 镜像
shell> docker pull readysettech/readyset
2、运行 Readyset 服务
shell>dockerrun-d-p3307:3307-p6034:6034\
--namereadyset\
-eUPSTREAM_DB_URL=mysql://admin:123456@192.168.137.131:6666/test\
-eLISTEN_ADDRESS=0.0.0.0:3307\
readysettech/readyset:latest\
注:UPSTREAM_DB_URL 参数值填写后端 MySQL 的用户名、密码、IP地址、端口号、数据库名,用户权限为ALL。
Readyset 暴露了两个端口:3307 和 6034。Readyset 进程将在 3307 端口监听查询流量,并通过 /metrics 端点在 6034 端口发送监控数据。
然后,Readyset 将连接到你的数据库,并复制指定的表(即所有表或明确定义的表)。根据这些表的大小以及 Readyset 和数据库之间的网络连接情况,这可能需要几秒到几小时的时间。
要检查表格是否已导入,请执行以下操作:
shell> docker logs readyset
当你看到:INFO replicators::noria_adapter: MySQL connected 代表已准备好开始缓存查询。
或者,你用 MySQL 客户端访问 3307 端口,执行 SHOW READYSET STATUS 命令:
查看该 Snapshot Status 列。如果快照成功完成,它将报告 Completed。现在 Readyset 已准备好开始缓存查询。
3、在 Readyset 中缓存查询
用 MySQL 客户端连接上 3307 端口(Readyset 端口),将线上的慢 SQL 在 Readyset 里运行,并执行 SHOW PROXIED QUERIES 命令:
观察 readyset supported 列,如果为 Yes,代表该 SQL 支持缓存。如果值处于待定状态,请再次检查,直到看到是或否。如果数值等待超过 15 秒,则不支持查询。
4、创建 SQL 缓存
要缓存 SQL 语句,请使用:
CREATE CACHE FROM <query id>;
这里以 q_4c1cf3b8080fe634 为例:
mysql> CREATE CACHE FROM q_4c1cf3b8080fe634;
Query OK, 0 rows affected (0.68 sec)
5、查看缓存查询
查询缓存的 SQL 语句:
6、测试
分别在 ReadySet 3307 端口上,和后端 MySQL 端口上 ,执行刚才缓存的慢 SQL,对比执行时间,你会发现缓存后的 SQL 秒级出结果。
初步测试表明,ReadySet 的有效性在第一次执行查询后,缓存机制可以充分发挥作用时就会变得非常明显。