开发博客

昆仑分布式数据库性能对比测试

zhaowei 提交于 周二, 07/13/2021 - 15:12

本文最初发布于2020年6月,当时公司官网还没有做好,所以提供了一些外网下载链接和资源链接。现在所有下载都在本公司官网完成。

本文对比了昆仑分布式数据库0.8.1版本,kunlun-percona-mysql和percona-mysql-8.0.22的性能,总的来说昆仑分布式数据库的性能基本符合预期,同时也还有一定的优化空间,体现出了分布式数据库的优越性和价值。

从这些性能测试结果来看,昆仑分布式数据库的性能与当前市面上主流分布式数据库产品(包括TiDB,OceanBase,基于MySQL的TDSQL, GoldenDB,基于PostgreSQL的CockRoachDB,Gauss,PGXZ/PGXL/TBase)相比,性能处于领先地位,不服来战!

昆仑数据库存储节点与社区版mysql的性能对比

zhaowei 提交于 周二, 07/13/2021 - 15:07

本文最初发布于2021年2月,当时公司官网还没有做好,所以提供了一些外网下载链接和资源链接。现在所有下载都在本公司官网完成。

这几天我对比了mysql的最新官方版本percona-mysql-8.0.22与 kunlun-percona-mysql-8.0.18的性能,发现kunlun-percona-mysql的性能仍然全方位大幅领先于percona-mysql-8.0.22。

 

在上一篇文章中我已经做过percona-mysql-8.0.18与kunlun-percona-mysql-8.0.18的性能对比,当时就是kunlun-percona-mysql的性能大大领先。现在半年多过去了,mysql最新官方版本的性能仍然没有显著改善。

昆仑数据库团队的初心

zhaowei 提交于 周二, 07/13/2021 - 14:49
最近,我们泽拓科技完成了天使轮融资,这段时间我回顾了昆仑数据库近2年的开发历程,感慨良多,给大家分享一下我们昆仑数据库团队的初心。 昆仑分布式数据库是一款高性能NewSQL分布式数据库。我们的核心目标是解决用户的海量数据存储管理和利用面临的问题。

昆仑数据库MySQL 分支的性能对比

zhaowei 提交于 周二, 07/13/2021 - 14:21

本文最初发布于2020年6月,当时公司官网还没有做好,所以提供了一些外网下载链接和资源链接。现在所有下载都在本公司官网完成。

前段时间我对Kunlun-percona-mysql-8.0.18-9做了诸多改进,填补了mysql-8.0.18的所有已知的XA事务容灾方面的空白和不足。同时还对多个子系统和功能模块做了广泛的性能优化,包括对mysql server模块的性能改进,以及对innodb存储引擎的性能改进。这些改进,预期可以降低事务提交延时,并降低事务日志写入的开销。所有的改动都通过了mysql已有的mtr测试集以及我新增的诸多mtr测试。今天,Kunlun-percona-mysql-8.0.18-9正式发布了,下载地址见附录。

最近我对比测试了Kunlun-percona-mysql-8.0.18-9(下文简称Kunlun-percona),percona-mysql-8.0.18-9(下文简称Percona)和mysql-8.0.20(下文简称mysql)的性能。现在展示一下结果。

数据库容灾能力的探讨(一)

zhaowei 提交于 周二, 07/13/2021 - 14:19

在过去十多年在Oracle,腾讯等公司的数据库系统内核开发工作中,我的大量工作就是确保数据库系统在各种环境故障情况下,能够保持数据一致性和持续可用地提供数据读写服务。这些工作既包括在腾讯参与开发的TDSQL 分布式数据库,也包括过去的近一年我开发的昆仑分布式数据库。

过去3个多月我花了大量时间精力解决了昆仑数据库使用的存储节点的容灾问题。昆仑分布式数据库使用我改进后的Percona-MySQL-8.0.18-9,我将它命名为Kunlun-Percona-MySQL-8.0.18-9。官方版本的Percona-MySQL-8.0.18-9的group replication和分布式事务处理(即XA)有很多个容灾能力方面的缺陷,这些缺陷有一些是在mysql-5.7时代就已经存在的了---当时我在腾讯做TDSQL分布式事务处理功能开发的时候修复了这些bug并报告给了mysql官方团队。很遗憾mysql官方并没有修复全部的这些bug,多数关键的bug仍然在mysql8.0存在,尽管我在每个bug报告中都提供了我的patch。

MySQL-8.0 Group Replication 研究与改造汇总

zhaowei 提交于 周二, 07/13/2021 - 14:18

2020年2月下旬以来,本文作者(我)研究和改造了Percona-MySQL-8.0.18-9的若干新功能实现,主要是MySQL Group Replication(MGR)和clone等功能,并且在Percona-MySQL-8.0.18-9在分布式事务容灾方面填补了功能空白,修复了其漏洞缺陷,以及做了其它若干针对昆仑分布式数据库整体规划的功能开发。现在把我的一些基于Percona-MySQL-8.0.18-9的发现和想法分享一下。本文不打算完整介绍MySQL8.0的任何新功能,因为网上已经有其他同行写的这方面的文章若干篇,并且最权威最完整的介绍始终是MySQL官方文档。本文假设读者已经熟知这些概念和功能,我着重介绍我为了昆仑分布式数据库的需求而对Percona-MySQL-8.0.18-9的MGR和clone功能做的探索和发现以及对MGR在分布式事务容灾方面的改进。

 

昆仑分布式数据库系统简介 ---SQL标准兼容性和日常维护工作

zhaowei 提交于 周二, 07/13/2021 - 14:12

前几篇文章介绍主要侧重于宏观层面介绍昆仑分布式数据库系统,介绍了它的高可用性,高可扩展性,分布式事务处理和分布式查询处理,以及自动DDL功能。本文进一步专门面向DBA/运维人员和应用软件程序员,来具体介绍一下昆仑分布式数据库到底是一个什么样的分布式关系数据库管理系统。

昆仑数据库的SQL标准兼容性

对于应用系统开发人员来说,昆仑分布式数据库不是postgresql,也不是mysql,而是一个支持标准sql语言的分布式关系数据库。基于昆仑分布式数据库开发应用软件和网站非常简单,并不需要多少PostgreSQL或者MySQL特定的知识,只要使用标准的SQL语句即可。应用软件中使用的sql语句几乎全是做数据的增删改查的,也就是insert/delete/update/select语句,这些语句包括它们操作的数据的数据类型,以及它们使用的运算符和SQL函数,在昆仑数据库以及所有其他主流RDBMS中都有非常好的SQL标准兼容性,这样就极大地增强了应用软件的SQL标准兼容性,降低了切换RDBMS的代价。

数据库系统最佳实践系列 --- 使用enum数据类型

zhaowei 提交于 周二, 07/13/2021 - 12:09

在做数据库设计时,我们经常需要给很多表增加一个‘类型’ 字段,比如人的性别有‘男’, ‘女’,学校的类型有‘幼儿园’,‘小学’,‘中学’,‘大学’,汽车的类型有‘轿车’,‘suv’,‘mpv’等,这种字段的本质特点是它们包含 “有限个离散值”。

对于这种字段,使用enum数据类型是最合适的,mysql和PostgreSQL都有此数据类型。enum类型有这么一些特点:

数据库系统最佳实践系列 --- 使用prepared statement

zhaowei 提交于 周二, 07/13/2021 - 11:11

Prepared statement是当前主流关系数据库都支持的一个功能,昆仑数据库系统也支持此功能。今天我和大家讲讲使用prepared statement的好处 --- 主要有两点,首先可以大大提升信息系统的安全性,防止SQL注入;还可以在一定程度提升查询性能。所以强烈建议大家使用prepared statement功能。至于prepared statement的具体编程和API用法,本文不在此赘述,可以参考相关数据库的client API的文档。下面详细讲解prepared statement功能的这两个巨大的优势的工作原理。

Prepared statement为什么可以阻止SQL注入

SQL注入的原理

当前大多数信息系统都是用一个软件或者网页作为前端接收用户输入,然后在服务器的应用层(也就是使用java,php,python,CGI等开发的服务器应用软件系统)使用这些输入,实现应用逻辑,最终使用用户输入作为参数操作后台数据库做数据的增删改查。

昆仑分布式数据库多合一Docker镜像使用说明

kunlun 提交于 周五, 05/07/2021 - 12:14

昆仑分布式数据库多合一Docker镜像是将Kunlun数据库集群的节点都放入一个Docker镜像,以方便用户进行功能体验而制作的Docker镜像。

在该镜像中, 模拟了一个小规模数据集群,该集群具有以下节点:

  • 三个mysql节点,构成一个3副本的Meta Shard
  • 还有六个mysql节点,构成两个Data Shard, 每个Shard的副本数为3
  • 三个postgresql节点,构成三个各自独立的计算节点,用于处理客户端的数据请求。

该集群的各个mysql节点的innodb buffer pool size仅为64MB, 所以该集群仅可用于功能体验,不能用于性能和压力测试。

启动方法:

启动容器:

sudo docker run --name kunlun1 -p 5401:5401 -p 5402:5402 -p 5403:5403 -itd registry.cn-hangzhou.aliyuncs.com/kunlundb/kunlun:v0.8 bash -c 'bash /kunlun/start_kunlun.sh'