阿里云alisql数据库软件功能
AliSQL增加了很多监控指标,以帮助用户或者DBA更了解自己的数据库,
SQL维度:增加每个SQL执行的开销统计,除了响应时间,锁等待等,还包括逻辑读,物理读,临时空间使用等
对象维度:阿里云alisql数据库中文版增加了每个表的DML次数,索引的使用情况,帮助用户理解业务和索引使用效率。
事务维度:增加了每个事务持续的时间,和操作的对象。帮助用户定位问题
线程维度:增加了线程的内存使用统计
游戏行业:我们在proxy这一层进行了AliSQL的桥接认证,提供防闪断功能。
物联网行业:AliSQL集成了TokuDB引擎,提供高压缩比和大吞吐写能力。
金融行业:AliSQL定制了多通道的半同步策略,以及一主两备的三机房零数据丢失的数据保护级别。
阿里云alisql数据库软件特色
阿里云alisql数据库与其他产品的关系、各自特点如下:
阿里云是开源组织 WebScaleSQL 的第五位成员,与Facebook、Google、Twitter和LinkedIn团队共同研发WebScaleSQL,同时,阿里巴巴还拥有OceanBase 自研数据库。AliSQL、WebScaleSQL、OceanBase三者的关系和各自的特点
OceanBase是Alibaba集团自研的分布式数据库,经历了集团业务的洗礼,具有通用性,高扩展能力。
WebScaleSQL是由这五家公司发起的基于MySQL官方的一个分支,旨在解决大家在互联网业务上遇到的问题,是五个成员公司将各自足够通用的功能提交到一起的集合,每家公司的研发同学都可以提交代码。实际上每个公司自己生产环境使用的是自己维护的一个分支,因为每个公司都有自己定制化的需求。
AliSQL同样基于MySQL官方版本,汲取了官方和社区的技术红利,具有很高的性能和稳定性,并适应不同行业的特点进行了定制。AliSQL的改进方向主要集中在安全性、稳定性、性能、新功能等方面。
AliSQL是经过几年的生产环境、几万个用户实例的实际业务锤炼的。
AliSQL的一些定制化功能都是为了解决DBA维护、业务使用中碰到的实际问题。比如5.5以上的版本由于有metadata lock,DBA对表加字段等操作可能导致阻塞查询,进而导致整库不可服务。我们新增alter ..wait N ..方法,保证了操作的安全性。再比如通过提供 set rds_reset_connection这样的语句,解决了长连接占用资源和短连接性能问题的矛盾。
AliSQL与电商行业、秒杀场景电商行业的环境,其实提供了一个非常综合的场景,在扩展性、稳定性、性能等方面对数据库都提出了非常高的要求,AliSQL就是顺应着这样的要求进行的定制版本。比如应对大量应用集群的线程池功能,秒杀场景的排队功能,以及sql的限流功能。
比如大写入量备库延迟,AliSQL提供的基于表的并行复制功能。 又比如结构化数据的压缩功能等。
电商的秒杀场景,其实就是减库存,对数据库而言,就是对一条记录的更新,因为事务的特点,单条记录的更新必须串行完成,但秒杀的特点,就是在某个时刻,大量的并发进行减库存,这就造成了大量的线程因获取不到锁而处在死锁检测状态,消耗了大量的CPU资源,最终导致系统无法响应,而引起雪崩效应。
AliSQL针对这样的场景,提供了排队和限流的功能,经过了双11零点时刻高并发请求的考验,保持了系统的稳定性和持续吞吐能力。
阿里云alisql数据库使用说明
提供用于直接从Java使用MySQL Cluster的类和接口。
该软件包包含三类主要的类和接口:
自举类
在应用程序中使用的接口
定义异常的类
主要接口
ClusterJ提供了以下供应用程序使用的主要接口:{@link com.mysql.clusterj.SessionFactory},{@ link com.mysql.clusterj.Session},{@ link com.mysql.clusterj.Transaction},{@ link com.mysql.clusterj.query.QueryBuilder}和{@link com.mysql.clusterj.Query}。
自举
帮助器类{@link com.mysql.clusterj.ClusterJHelper}包含用于创建{@link com.mysql.clusterj.SessionFactory}的方法。 引导程序是识别MySQL群集并获取供该群集使用的SessionFactory的过程。每个Java VM每个群集有一个SessionFactory。
会话工厂
{@link com.mysql.clusterj.SessionFactory}是通过属性配置的,这些属性标识应用程序连接到的MySQL群集:
com.mysql.clusterj.connectstring标识ndb_mgmd主机名和端口
com.mysql.clusterj.connect.retries是连接时的重试次数
com.mysql.clusterj.connect.delay是两次重试之间的延迟(以秒为单位)
com.mysql.clusterj.connect.verbose告诉是否在连接时向System.out显示消息
com.mysql.clusterj.connect.timeout.before是第一个节点响应连接请求之前要等待的秒数
com.mysql.clusterj.connect.timeout.after是最后一个节点响应连接请求之前要等待的秒数
com.mysql.clusterj.connect.database是要使用的数据库的名称
File propsFile = new File(“ clusterj.properties”);
InputStream inStream =新的FileInputStream(propsFile);
属性props = new Properties();
props.load(inStream);
SessionFactory sessionFactory = ClusterJHelper.getSessionFactory(props);届会
{@link com.mysql.clusterj.Session}表示用户与集群的单独连接。它包含以下方法:
通过主键查找持久实例
持久实例工厂(newInstance)
持久实例生命周期管理(持久,删除)
获取QueryBuilder
获取交易(currentTransaction)
会话会话= sessionFactory.getSession();
现有员工= session.find(Employee.class,1);
if(existing!= null){session.remove(现有);}
雇员newemp = session.newInstance(Employee.class);
newemp.initialize(2,“ Craig”,15,146000.00);
session.persist(newemp);
交易
{@link com.mysql.clusterj.Transaction}允许用户将多个操作组合到单个数据库事务中。它包含以下方法:
开始工作
提交工作单元中的更改
回滚自工作单元开始以来所做的所有更改
将工作单元标记为仅回滚
获取当前工作单元的回滚状态
交易tx = session.currentTransaction();
tx.begin();
现有员工= session.find(Employee.class,1);
雇员newemp = session.newInstance(Employee.class);
newemp.initialize(2,“ Craig”,146000.00);
session.persist(newemp);
tx.commit();
QueryBuilder
{@link com.mysql.clusterj.query.QueryBuilder}允许用户构建查询。它包含以下方法:
定义要查询的域对象模型
使用以下命令将属性与参数进行比较:
等于少于比...更棒小于等于更大等于之间在
使用“和”,“或”和“非”运算符组合比较
阿里云alisql数据库更新日志
1.修正了其它bug;
2.优化了软件的兼容性。