dbaplus社群 2024年08月27日
宝藏新技术!轻量级SQL缓存引擎ReadySet快速上手
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

ReadySet是一种轻量级缓存解决方案,利用内存存储缓存数据,可实现复杂SQL的快速查询,无需更改代码,具有多种优势且安装使用方便。

🎯ReadySet是支持MySQL和PostgreSQL的轻量级缓存工具,利用内存存储缓存数据,实现复杂SQL的闪电般快速查询,位于应用程序和数据库之间,是SQL Cache层。

💻ReadySet的工作流程包括读操作和写操作。读操作时,若结果已缓存则即时返回,未缓存则转发至后端数据库并缓存结果;写操作会直接转发至后端数据库执行并更新缓存。

👍ReadySet的优势众多,使用标准SQL访问,无需学习新语言,无需修改应用程序代码,支持复杂SQL查询高速缓存,自动保持缓存与数据库一致性,可选择性缓存高频查询。

🛠️ReadySet的安装与使用步骤明确,包括下载Docker镜像、运行服务、在其中缓存查询、创建SQL缓存、查看缓存查询以及进行测试等。

原创 贺春旸 2024-08-26 07:15 广东

利用内存来存储缓存数据,实现复杂SQL的闪电般快速查询。

作者介绍

贺春旸,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 缓存架构示意图


Readyset 的工作流程


1、对于读操作:


2、对于写操作 (INSERT、UPDATE、DELETE):


Readyset 的优势



这种设计使 Readyset 特别适合读密集型应用,能显著提升查询性能,同时保持操作的简便性和数据的最终一致性。


三、安装与使用


1、下载 Readyset Docker 镜像

shell> docker pull readysettech/readyset


2、运行 Readyset 服务

shell> docker run -d -p 3307:3307 -p 6034:6034                       \--name readyset                                                      \-e UPSTREAM_DB_URL=mysql://admin:123456@192.168.137.131:6666/test    \-e LISTEN_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 语句:

SHOW CACHES


6、测试


分别在 ReadySet 3307 端口上,和后端 MySQL 端口上 ,执行刚才缓存的慢 SQL,对比执行时间,你会发现缓存后的 SQL 秒级出结果。


初步测试表明,ReadySet 的有效性在第一次执行查询后,缓存机制可以充分发挥作用时就会变得非常明显。


跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

ReadySet SQL缓存 数据库优化 查询性能
相关文章