轻量级Mysql Sharding中间件——Shark

Shark简介
前身为Kratos,轻量级Mysql分库分表(Sharding)中间件,丰富的Sharding算法支持(2类4种分片算法),能够方便DBA实现库的水平扩容和降低数据迁移成本。Shark站在巨人的肩膀上(SpringJdbc、Druid),采用与应用集成架构,放弃通用性,只为换取更好的执行性能与降低分布式环境下外围系统的宕机风险。

Shark的优点
动态数据源的无缝切换;
master/slave一主一从读写分离;
Sql独立配置,与逻辑代码解耦;
单线程读重试(取决于的数据库连接池是否支持);
单独且友好支持Mysql数据库;
非Proxy架构,与应用集成,应用直连数据库,降低外围系统依赖所带来的宕机风险;
使用简单,侵入性低,站在巨人的肩膀上,依赖于SpringJdbc、Druid;
基于淘宝Druid的SqlParser完成Sql解析任务,解析性能高效、稳定;
分库分表路由算法支持2类4种分片模式,库内分片/一库一片;
提供自动生成全局唯一的sequenceId的API支持;
提供自动生成配置文件的支持,降低配置出错率;
提供内置验证页面,方便开发、测试以及运维对执行后的sql进行验证;
专注于Sharding领域,无需兼容通用性,因此核心代码量少、易读易维护;
Shark的分片模型
Shark支持2类4种分片算法:
库内分片类型:
片名连续的库内分片算法;
非片名连续的库内分片算法;
一库一片类型:
片名连续的一库一片算法;
非片名连续的一库一片算法;
Shark的使用注意事项
不支持强一致性的分布式事务,建议在业务层采用依赖MQ、异步操作等方式实现事物,保证事物的最终一致性;
不建议、不支持多表查询,所有多表查询sql,务必全部打散为单条sql逐条执行;
sql语句的第一个参数务必是路由条件;
不支持sql语句中出现数据库别名;
路由条件必须是整数类型;

参考 https://www.iteye.com/news/31289

GitHub https://github.com/gaoxianglong/shark/wiki/shark-benchmark-result

原文地址:https://www.cnblogs.com/xd502djj/p/11066082.html

时间: 2024-10-04 17:37:26

轻量级Mysql Sharding中间件——Shark的相关文章

MySQL开源中间件cetus

git地址:https://github.com/Lede-Inc/cetus/blob/master/doc/cetus-quick-try.md==介绍Cetus简介Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能.Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用.主要功能特性Cetus分为读写分离和分库(分表是分库的一种特殊形式)两个版本.针对读写分离版本: 多进程无锁

MySQL Sharding详解

转自(http://blog.sina.com.cn/s/blog_821512b50101hyc1.html) MySQL Sharding详解     一 背景 我们知道,当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大.采用MySQL Replication多master多slave方案,在上层做负载均衡,虽然能够一定程度上缓解压力.但是当一张表中的数据变得非常庞大时,压力还是 非常大的.试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都

mysql数据库中间件研究

随着互联网的发展,数据量的不断增大. 单台实例已经远远无法满足业务的需要. 对数据库分库分表的需求不断的增加随之而来的就是数据库中间件的开发. 一. 单台实例主要面临下面几个问题: 1.  数据量太大单台机器无法承载 2.  数据查询效率太低,单表数据达到一定的量业务性能就无法满足 3.  数据库优化上的瓶颈 4. 数据安全的问题,大量数据放置在一台机器如果数据出问题回复周期会特别长,对业务影响太大. 随之而来的就是需要分库分表 但是分库分表就四个字做起来可真没有这么简单. 二. 分库分表面临的

转:阿里开源Mysql分布式中间件:Cobar

原文来自于:http://hualong.iteye.com/blog/2102798 这几天研究了下Cobar, Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoeba的升级版,该产品成功替代了原先基于Oracle的数据存储方案,目前已经接管了3000+个MySQL数据库的schema,平均每天处理近50亿次的SQL执行请求.)(github上面的是源码,大家下来需要自己用maven2编译后运行.者放Eclipse里面运行,一开始我用maven3没有执行成功.) 首先,使用Coba

Jmeter测试mysql数据库中间件mycat

背景 因为博主所负责测试的项目需要数据库有较大的吞吐量,在最近进行了升级,更新了一个数据库中间件 - - mycat.查询了一些资料,了解到这是阿里的一个开源项目,基于mysql,是针对磁盘的读与写,理论上读写速度上会略小于mysql. 与组长沟通后,决定在功能测试完成后,对升级后的mycat进行性能压测. 环境准备 1.下载Jmeter 可以访问下面的地址进行下载,建议下载zip版本的,因为zip是一个绿色版本,无需安装,解压后即可使用, Jmeter下载地址 2.下载mysql数据库的驱动包

灵活强大的MySQL代理中间件ProxySQL应用实战(1)

一.常见的Mysql中间件介绍 很多人都会把中间件认为是读写分离,其实读写分离只是中间件可以提供的一种功能,最主要的功能还是在于他可以分库分表.下面介绍下常见的开源mysql中间件. DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层.它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性. Atlas是由奇虎360公发的基于MySQL协议的数据库中间件产品,它在MySQL官方推出的MySQL-Proxy 0.8.2版本

mysql分布式中间件cobar

Cobar的分布式主要是通过将表放入不同的库来实现:     1.Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分     2.Cobar也支持将不同的表放入不同的库     3.多数情况下,用户会将以上两种方式混合使用     4.Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式 环境规划: IP                         数据库     

Mysql 数据库中间件

读写分离:简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力.主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作.当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性. 分库分表: 水平分区:分表 垂直分区:分库 水平分表也称为横向分表,比较容易理解,就是将表中不同的数据行按照一定规律分布到不同的数据库表中(这些表保存在同一个数据库中),这样来降低单表数据量,优化查询性能.最常见的方式就是通过主键

灵活强大的MySQL代理中间件ProxySQL应用实战(2)

一.ProxySQL的运行机制 ProxySQL有一个完备的配置系统,配置ProxySQL是基于sql命令的方式完成的.ProxySQL支持配置修改之后的在线保存.应用,不需要重启即可生效.整个配置系统分三层设计.整个配置系统分为三层,如下图所示: 配置系统分为三层的目的有三个:(1).自动更新(2).尽可能的不重启proxysql就可以修改配置(3).方便回滚错误配置 每层的功能与含义如下: ? RUNTIME层 代表的是ProxySQL当前生效的正在使用的配置,包括global_variab