2017数据架构选型必读:4月数据库产品技术解析
一、推出DBAplus Newsletter的想法
二、DB-Engines数据库排行榜
三、RDBMS家族
Oracle 12c Release 2所有平台发布完毕
MySQL 5.7.18发布
MySQL 5.7将要废弃和已经废弃的特性
MariaDB 10.2.5 RC版几个实用的特性改进
SQL Server新版本即将亮剑
PostgreSQL将发布10.0
Greenplum Command Center最近发布3.2更新
本期新秀:SQLite发布3.18.0版本
四、NoSQL家族
MongoDB 3.4.4发布
Redis 3.2.8版本发布
五、NewSQL家族
TiDB近期发布RC3版本
本期新秀:CockroachDB
六、大数据生态圈
Hadoop发布2.8.0版本
HDB (Apache HAWQ) 2.2.0.0 版本发布
七、国产数据库概览
OceanBase压测成绩瞩目
星瑞格多租户数据库
SequoiaDB 2.8企业版正式发布
八、感谢名单
为方便阅读,本文对各个板块的内容进行精简,重点呈现,需阅读全文的同学可点击文末【阅读原文】或回复“newsletter”至订阅号下载完整版。
推出DBAplus Newsletter的想法
DBAplus Newsletter旨在向广大技术爱好者提供数据库行业的最新技术发展趋势,为社区的技术发展提供一个统一的发声平台。为此,我们策划了RDBMS、NoSQL、NewSQL、大数据、虚拟化、国产数据库等几个版块。
我们不以商业宣传为目的,不接受任何商业广告宣传,严格审查信息源的可信度和准确性,力争为大家提供一个纯净的技术学习环境,欢迎大家监督指正。
至于Newsletter发布的周期,目前计划是每两个月左右会做一次跟进,下期计划时间是2017年6月12日~6月23日,如果有相关的信息提供请发送至邮箱newsletter@dbaplus.cn,或扫描以下二维码填表申请加入“Newsletter信息征集群”。
↑ 扫码填写申请表 ↑
通过审核后群秘邀你入群
DB-Engines数据库排行榜
以下取自2017年4月的数据,具体信息可以参考http://db-engines.com/en/ranking/,数据仅供参考。
DB-Engines排名的数据依据5个不同的因素:
Google以及Bing搜索引擎的关键字搜索数量
Google Trends的搜索数量
Indeed网站中的职位搜索量
LinkedIn中提到关键字的个人资料数
Stackoverflow上相关的问题和关注者数量
本期值得一提的是Redis超SQLite成为第9名,虽然相对第10名优势不到1分。
一、RDBMS家族
Oracle 12c Release 2所有平台发布完毕
从分值趋势图,我们可以看到,从1月份起Oracle数据库正在艰难拉大与MySQL分数差距。分值上千的数据库三巨头中,Oracle公司的Oracle和MySQL一直稳居状元和榜眼,SQL Server始终是探花。但从2013年起,MySQL作为老二,步步紧逼Oracle,必欲取之而后快,并取得了惊人的成效,最少只距离30分。
那么Oracle近2个月来,相对于MySQL的微弱优势差距增幅来自于哪里呢?
首先是Oracle 12cR2的发布。自3月份发布了Exadata版本、Linux版本和Solaris后,在4月11日,AIX版本和HP-UX版本也相继发布了。至此,Oracle 12cR2所有要发布的平台都已经发布,接下来就看具体的装机量了。
MySQL 5.7.18发布
2017年4月11日,Oracle发布了MySQL 5.7.18。新的版本补充了部分特性,并修正了不少bug。
例如:
Windows构建现在使用默认运行时库(构建使用/ MD标志)。 (bug #25611609)
添加了用于使用 Developer Studio 12.6 进行编译的 CMake 支持。 (bug #25384295)
详细信息参考
https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-18.html
MySQL 5.7将要废弃和已经废弃的特性
本期主要总结一下将要废弃或者已经在5.7版本中废弃掉的特性。
1、将要废弃
ERROR_FOR_DIVISION_BY_ZERO/NO_ZERO_DATE/NO_ZERO_IN_DATE SQL modes
使用grant来创建用户
explain不再支持EXTENDED、PARTITIONS关键词
server和client段参数:—skip-innodb/--temp-pool/--ssl-verify-server-cert/—ssl/—ssl-verify-server-cert
系统参数:log_warnings/binlog_max_flush_queue_time/innodb_support_xa/metadata_locks_cache_size/metadata_locks_hash_instances/sync_frm/character_set_database/collation_database
加密函数:ENCRYPT()/ENCODE()/DECODE()/DES_ENCRYPT()/DES_DECRYPT()
INFORMATION_SCHEMA库中表:PROFILING/INNODB_LOCKS/INNODB_LOCK_WAITS
在语句中使用:\N 来代替 NULL
PROCEDURE ANALYSE()
mysqld_safe 支持 syslog输出
使用mysql_install_db来初始化mysql
C API:mysql_kill()/mysql_list_fields()/mysql_list_processes()/mysql_refresh()/mysql_shutdown()
对linux命令replace的支持
对DTrace的支持
2、已经废弃
旧的pre-4.1 password hashing格式废弃
数据类型:YEAR(2) 废弃
系统参数:innodb_mirrored_log_groups/storage_engine/thread_concurrency/timed_mutexes/innodb_use_sys_malloc/ innodb_additional_mem_pool_size
alter table时ignore
INSERT DELAYED
mysql_upgrade参数废弃:—basedir/—datadir/—tmpdir
参数的简称已经废弃(比如--key-buffer必须写成—key-buffer-size)
SHOW ENGINE INNODB MUTEX
InnoDB Tablespace Monitor and InnoDB Table Monitor(PS:可以从information_schema的相关表中获取)
MySQL命令:msql2mysql/mysql_convert_table_format/mysql_find_rows/mysql_fix_extensions/mysql_setpermission/mysql_waitpid/mysql_zap/mysqlaccess/mysqlbug/mysqlhotcopy
binary-configure.sh
cmake参数:INNODB_PAGE_ATOMIC_REF_COUNT
InnoDB启动和系统参数废弃:innodb_create_intrinsic/innodb_optimize_point_storage/innodb_log_checksum_algorithm
MariaDB 10.2.5 RC版几个实用的特性改进
1、XtraDB存储引擎由5.6升级到5.7.14
XtraDB 5.7在支持多处理器和高度并发CPU线程的系统上,提供更持续的线性性能和扩展性。实现这一点的关键是通过改进Oracle InnoDB存储引擎的效率和并发性,来消除InnoDB内核中原有的线程争用和互斥锁定的现象。通过这些改进,MySQL可以充分利用当今基于x86的商用硬件先进的多线程处理能力。
在线调整Innodb_Buffer_Pool_Size不用重启mysqld进程,可以直接动态设置set global innodb_buffer_pool_size = 11274289152*2;需要注意的地方,在调整Buffer_Pool期间,用户的请求将会阻塞,直到调整完毕,所以请勿在白天调整,在凌晨3-4点低峰期调整。
支持在线回收(收缩)undo log回滚日志物理文件空间。undo log回滚日志是保存在共享表空间ibdata1文件里,随着业务的不停运转,ibdata1文件会越来越大,想要回收(收缩空间大小)极其困难和复杂,必须先mysqldump -A全库的导出,然后删掉data目录,然后重新初始化安装,最后再把全库的SQL文件导入,采用这种方法进行ibdata1文件的回收。innodb_undo_log_truncate参数设置为1,即开启在线回收(收缩)undo log日志文件,支持动态设置。
2、增加延迟复制功能
数据可能因为人为失误而遭受毁灭性的破坏,可能有人不小心drop删除了数据库,或者刚上线的新版应用程序有一个严重bug,把所有数据都变成了垃圾。为了防止这类问题,可以通过命令CHANGE MASTER TO master_delay=3600(单位秒)设置一个延迟的从节点。这样做是有意义的,尤其是在你的数据库很大的情况,可以快速追溯到12小时之前的快照,从而避免Gitlab/AWS事件。
注:之前的版本只能通过percona-toolkit工具实现。
范例:perl /usr/local/bin/pt-slave-delay -S /tmp/mysql.sock --user root --password 123456 --delay 3600 --log /tmp/log/delay.log --daemonize
3、mysqlbinlog工具增加--flashback参数,实现误操作闪回功能,该补丁由阿里巴巴彭立勋贡献。
之前我是通过sed命令实现了同一功能,具体可以参考http://mp.weixin.qq.com/s/9jxcR6iz9OWDsLuC8SwJhA
新版本mysqlbinlog没有刻意去研究,感兴趣的朋友请参考手册。
4、支持一个表有多个INSERT/DELETE/UPDATE触发器
最大的好处是:原表已有触发器也可以支持使用pt-online-schema-change修改表结构了。
SQL Server新版本即将亮剑
微软SQL Server产品人员透露SQL Server的新一代产品“vNext”即将面世。在巩固自己在传统RDBMS市场优势的同时向大数据、AI领域开疆拓土。
针对传统RDBMS,新版本的主要新特性如下(OLTP):
正式支持SQL Server on Linux
支持Linux下Docker引擎
基于非Windows Cluster(Cluster-less)下的SQL Server高可用支持
部分SQL Server高可用特性如(AG)可跨OS平台工作
非聚集列式索引的在线创建与重建
此外,据报道新版本中对已有的特性如基于内存执行引擎、基于列式存储执行引擎等均有增强。我们有理由有更多的期待。
PostgreSQL将发布10.0
PostgreSQL将于2017年5月发布beta版本,已提交诸多特性如下:
sharding增强
postgres_fdw多节点异步并行执行
pushdown增强
支持Append节点并行
支持分布式事务
主动防御 - 可配置是否允许执行不带where条件的update\delete
优化器改进
不完整索引支持复合排序
功能增强
BRIN索引更新smooth化
CLOG oldest XID跟踪
hash index支持wal(灾难恢复)
identify column (SQL标准:T174)
JSON内容全文检索
OLAP增强,向量聚集索引(列存储扩展)
QUERY进度显示
slave提前苏醒
slave支持WAITLSN 'lsn', time;用于设置安全replay栅栏
SQL:2016标准(之SQL/JSON) Oracle 12c兼容
内置分区表
分区表(hash,range,list)
分区表(list default)
动态视图pg_stat_activity新增数据库管理进程信息
匿名、自治事务(Oracle 兼容性)(background session)
后台运行(pg_background)
唯一约束+附加字段组合功能索引
回滚范围可精细控制(事务、语句级)
国际化功能增强,支持ICU(International Components for Unicode)
备库支持逻辑订阅,订阅支持主备漂移了
客户端ACL(pg_hba.conf动态视图)
支持EUI-64格式MAC地址类型
支持分区表ON CONFLICT .. DO NOTHING
新增数十个IO等待事件监控
流复制延迟评估,动态视图
自动预热shared buffer (auto prewarm)
自由定义统计信息维度
角色化权限管理 - 新增几个内置角色(统计信息查看、管理用户会话)
触发器函数内置中间表
逻辑复制支持并行COPY初始化数据
新特性,流式接收端在线压缩redo
变化 - 逻辑复制pg_hba.conf变化,不再使用replication条目
多核并行增强 - tuplesort 多核并行创建索引
多核并行增强 - 并行hash join支持shared hashdata, 节约哈希表内存提高效率
多核并行增强 - 控制集群并行度
多核并行增强 - 索引扫描、子查询、VACUUM、fdw/csp钩子
安全增强
SASL认证方法 之 scram-sha-256 安全认证机制
任意wal副本数,金融级高可用与可靠性并存需求
性能增强
2PC事务恢复阶段性能提升
CLOG group commit
GIN索引vacuum锁降低
hashed aggregation with grouping sets(多维分析)更快,更省内存
hash index metapage cache、高并发增强
libpq支持pipeline batch模式减少网络交互提升性能
mergesort(Gather merge)
OLAP提速框架, Faster Expression Evaluation Framework(含JIT)
pg_xact align(cacheline对齐)
Write Amplification Reduction Method (WARM)消除某些情况下的INDEX写放大
分区表子表元信息搜索性能增强
推出JIT开发框架(朝着HTAP迈进)
间接索引(secondary index)
流复制增强
支持可配置的wal send max size
逻辑复制
原理与最佳实践
Greenplum Command Center最近发布3.2更新
Greenplum Command Center最近发布了3.2更新,相比于去年发布的3.0,3.1和3.2新增了Kerberos单点登录支持、用户权限管理、pg_hba.conf的图形化编辑、DCA监控页面等新特性。
DCA硬件监控界面,硬件问题一目了然。
除了以上这些,GPCC还可以查看数据库的存储状况,各个segment的系统特性等等。另外,GPCC也支持查看多个GPDB集群的状态。
在接下来的3.3中,会加入Greenplum Workload Manager的管理页面,敬请期待。
本期新秀:SQLite发布3.18.0版本
3月30日,SQLite发布了3.18.0定期维护版本,此版本的功能初步实现了"PRAGMA optimize"命令。该命令可以在有需求的地方执行调用ANALYZE分析命令。应用程序需要在关闭数据库连接之前调用"PRAGMA optimize"。"PRAGMA optimize"语句在未来的版本中可能会在数据库维护的更多领域得到增强。
之前的版本,用来管理SQLite项目的控制系统的SHA3-256哈希算法已经被SHA1更新替代。
二、NoSQL家族
MongoDB 3.4.4发布
MongoDB 3.4.4于2017年4月22日发布。这是个小版本发布,其中包括了一些bug fix以及一些聚合框架的功能完善。MongoDB的版本发布大致为每年一个大版本(第二位数增大即为大版本),基本每个月一个小版本(第三位数)。一般小版本到2或者3就可以考虑从老版本进行升级。官方建议大家今早升级到3.4.4,其中有一些对分片集群下数据块移动的问题有些修正,另增加了objectToArray及arrayToObject的聚合功能。
MongoDB最近宣布其从2016年中开始运行的Atlas云服务最近大力扩张。从本来只是在AWS的5-6个地区,扩展到AWS的所有地区,以及Microsoft Azure和Google Computing Platform。和云服务商自己主推的DBaaS有所不同,Atlas的口号是一个“云独立”的MDBaaS,意思是你可以在任意一个云上部署,不必有长期被lock-in的顾虑。Atlas更于近期推出了类似于亚马逊的Free Tier,福利在这里:https://www.mongodb.com/cloud/atlas
Redis 3.2.8版本发布
2017年2月12号发布了Redis 3.2.8版本,新版本有两个重要的bug fix,其中第一个很关键:
1、Jemalloc 4.4.0可能会在特定条件下发生死锁。
bug简单描述如下:
用户升级redis 3.2.7版本后,出现cpu使用100%、无日志输出、rdb file没有更新、所有连接失效等问题,经过定位发现是Jemalloc升级导致的问题。
详情请参阅:https://github.com/antirez/redis/issues/3799
因此3.2.8版本还原到以前使用的Jemalloc版本,并计划在获取更多有关错误原因的信息后再次升级Jemalloc。
2、该版本修复了MIGRATE可能会导致服务器崩溃的问题。
bug简单描述如下:
redis cluster在对nodes进行resharding,迁移一些big keys时遇到:[ERR] Calling MIGRATE: Connection timed out
redis log中出现Redis 3.2.3 crashed by signal: 11,只能重启修复。
详情请参阅:https://github.com/antirez/redis/issues/3796
二、NewSQL家族
TiDB近期发布RC3版本
4月27日,TiDB正式发布RC3版。该版本对MySQL兼容性、SQL 优化器、系统稳定性、性能做了大量的工作。对于OLTP场景,重点优化写入性能。另外提供了权限管理功能,用户可以按照MySQL的权限管理方式控制数据访问权限。
本期新秀:CockroachDB
CockroachDB的思路源自Google的全球性分布式数据库Spanner。其理念是将数据分布在多数据中心的多台服务器上,实现一个可扩展、多版本、全球分布式并支持同步复制的数据库。
中文翻译为蟑螂数据库,也许被用在软件命名中很违和,但联合创始人Spencer Kimball——一名前Google工程师则认为只有小强才能配得上他们的项目。
“这个名字代表了项目最重要的两大特征:首先不用说,是生存性,其次是一种近乎自主的散布性。”
CockroachDB是在2014年下半年推出了Alpha版,只实现了规模很小的一个功能子集。但2016年宣布获得融资的同时,CockroachDB也正式推出了beta 版,beta除了实现当初设计的所有功能以外,还新增了对SQL的支持。开发者希望beta的推出能够在用户帮助下发现更多的bug和获得改进的建议。
四、大数据生态圈
Hadoop发布2.8.0版本
2017年3月17号,Apache基金会发布了Hadoop 2.8.0版本,这是继2015年4月Hadoop 2.7版本以后的又一次重大的版本变更,总共涉及2917个问题修复及新功能。
不过需要注意的是,由于有些严重的问题还在修复,测试过程中,2.8.0版本不建议在立即投入到生产环境中使用,生产用户应该等待2.8.1/2.8.2等后续版本。
版本更新的主要内容如下:
http://hadoop.apache.org/docs/r2.8.0/index.html
全部更新列表:
http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/release/2.8.0/RELEASENOTES.2.8.0.html
HDB (Apache HAWQ) 2.2.0.0版本发布
Pivotal HDB 2.2.0.0企业版于2017年4月正式发布,主要包括几个功能:
Apache Ranger集成;
RHEL/CentOS 7支持;
PXF对ORC外部表的正式支持;
包含查询执行器、容错、管理工具等重要模块错误的共计76个修正。
五、国产数据库概览
OceanBase压测成绩瞩目
为进一步发挥OceanBase数据库对业务的价值,除高可用、高可扩展、高兼容性等既有优势外,OceanBase在新版本中大幅提升了产品性能。高性能的OceanBase使得同样的硬件可以支撑更大规模的业务,不仅减小了系统频繁扩容的压力,更大幅度降低了成本。
测试OceanBase集群由3台服务器组成,数据表有3个副本,副本之间通过Paxos协议进行日志同步,确保任何单机故障不丢失数据;另有3台相同配置的服务器作为测试客户端。
在测试过程中,OceanBase集群中只有一台服务器对外提供读、写服务,其他两台服务器不对外提供服务,仅进行日志同步和应答(Paxos协议),以满足高可用的需求。3台测试客户端只连接集群中对外提供服务的数据库服务器进行测试。
测试程序采用sysbench 0.5版本,测试结果:INSERT场景突破百万TPS,是全球首次三机同步下单机写入性能过百万的系统;SELECT场景超过250万QPS;OLTP场景超过60万TPS。
星瑞格多租户数据库
在云时代多租户的应用数据实施中,星瑞格数据库一个重要考量点就是如何对应用数据进行设计、以支持多租户环境,而这种设计的思路,是要在数据的共享、安全隔离和性能间取得平衡,来实现云时代下多租户数据库以下特点及好处:
最大化利用资源,降低成本,数据层虚拟化
快速迁移,克隆,场合:测试,二次开发,数据迁移
易于管理,备份恢复、性能调节
简化升级,少打补丁,把多个数据库当主一个数据库来管理
资源动态调整,支持横向扩展
数据天然隔离,逻辑结构,物理结构,用户体系
星瑞格多租户环境减少了数据库数量,有效管理了数据库资源。见下图:
星瑞格的多租户数据库设计类似于第二种数据层多租户架构,也就是N个多租户位于一个数据库实例上,这样减少了数据库实例的管理操作,只需对一个数据库实例进行补丁升级操作,即实现了对多个数据库的管理。并且星瑞格多租户利用星瑞格数据库的动态可伸缩性的线索处理机制尽可能的在基础架构成本、资源共享、数据独立性安全性做出很好的平衡。
SequoiaDB 2.8企业版正式发布
此外,在高可用数据安全、数据库匹配操作以及可视化界面的管理和监控功能,也有很多改进,详情请参考本期Newsletter完整版(点击文末【阅读原文】或回复“newsletter”至订阅号即可下载)。
感谢名单
最后要感谢那些提供宝贵信息和建议的专家朋友,排名不分先后。
往期回顾: