原文出处:The most important new features in CockroachDB
作者:Jim Walker
译者:ACDU翻译组(@王宇建)
校对:ACDU翻译组(@Shawn.W潇 @Finn)
CockroachDB是基于云计算而设计的,因此它自身就可以进行弹性扩展,且在没有任何额外初始化和配置的情况下抵御任何故障。自成立以来,Cockroach Labs团队持续对该分布式数据库进行更新和改进。如今,该数据库已经帮助成千上万的开发者更加有效地在云上构建数据驱动的应用程序,并且是很多革命性应用程序的基础,正推动着现代数字经济发展。
最新版本的CockroachDB 20.2增加了对空间数据的支持,并且引入了自定义的Kubernetes运算符。与此同时,该团队持续提升了该数据库的安全性和管理能力,CockroachDB的整体性能也得到了相当大的提升。值得注意的是,在此版本中,该数据库的免费版本CockroachDB Core提供了其中的绝大多数新功能。
Kubernetes上的CockroachDB
与传统单机数据库不同的是,CockroachDB是基于Kubernetes核心分布式的原则设计的,Cockroach Labs用四个关键词定义了Kubernetes原生数据库的核心理念:可处理性、API对称性、无共享架构和水平扩展。
- 可处理性是指数据库在进程停止、启动或者崩溃时几乎没有通知的情况下进行处理的能力。
- API对称性可在不中断现有应用程序实例的情况下提供一致的查询响应以进行扩展。
- 无共享架构确保了数据库可以在没有任何中心结点或者单一节点故障的情况下正常运行。
- 水平扩展的意思是,一个单一节点的数据库可以通过线性扩展来神奇的达到两倍性能,而不需要指数级别的扩展来达到这一目的。
在CockroachDB 20.2中,Cockroach Labs在Kubernetes上引入了CockroachDB,将分布式数据库与新的开源Kuvernetes运算符打包在一起(当前处于beta版)。在过去的几年里,Cockroach Labs通过在自己的数据库即服务(DaaS)——CockroachCloud上部署和管理成千上万台的集群,他们已经对Kunernetes有了很多了解。现在,该团队已经把这些学习成果打包进了一个Kubernetes运算符。
虽然传统数据库可以运行在Kubernetes上,但它们根本不是设计用来跑在Kubernetes上的,也无法轻松实现云原生平台所提供的易扩展性和弹性。它们的性能没有真正利用到平台的优势。
借助Kubernetes上的CockroachDB,可以在同一环境中有效地编排在Kubernetes中提供分布式服务和应用程序的关系型数据库。基于状态集,您只需将存储连接到每个Kubernetes pod,CockroachDB即可处理数据的伸缩、弹性和分布,而无需其他复杂的任务去管理分片,或者处理不可避免的pod故障。
Kubernetes上的CockroachDB允许你:
- 与运算符一起部署,从而简化了基本配置和常见的安装任务。
- Roll out升级,可以支持您跨结点(pod)逐步修复或者升级应用程序产品,并且快速应用架构更改。
- 轻松扩展数据库,通过快速创建新实例实现弹性缩放,无需手动分片数据或者操作数据库。
- 结点容灾,通过结点之间自动复制数据来避免任何故障和宕机。
分布式数据库中的空间数据
CockroachDB 20.2致力于创造可以扩展大量数据库工作负载的开发者工具。这个版本引入了存储和检索空间数据的能力,这种能力通过免费版本CockroachDB Core中使用与PostGIS兼容的SQL语法实现。分布式数据库和空间能力的结合打开了创新的新局面,并且为物联网(IoT)、交通运输和环境应用程序赋予新的动能。
空间数据给世界上最具创新的应用和服务提供了动能,解答了类似“最近的加油站在哪?”,“我拼的车要多久才能到达?”,甚至是“我在哪儿可以抓到一只Pokémon(宠物小精灵)?”。唯一的问题是,这些数据被存储于脆弱的旧版数据库或单独的专用数据库,这令开发人员很难去在云中支持大型数据集。
这是第一个包含空间数据类型和关联库并为分布式环境从头构建此功能的云原生SQL数据库。借助CockroachDB 20.2,Cockroach Labs为空间数据提供了与其他数据类型相同的一流处理能力,使开发者更容易的使用它去开发应用程序。CockroachDB用户现在可以轻松地扩展空间数据,并有信心数据库不会中断。
CockroachDB现在支持以下空间功能,所有这些功能都是开源的,免费提供,并可以通过与PostGIS兼容的SQL访问:
Pebble存储引擎
今年早些时候, Cockroach Labs构建了一种新的、开源的存储引擎——Pebble,在CockroachDB 20.2中取代了数据库之前的存储引擎——RocksDB。用Go语言写的开源键值型存储,Pebble给CockroachDB带来了许多改进:
- 更高性能和稳定性
- 避免了从C语言到Go语言转换的挑战
- 可以更好地控制针对CockroachDB需求的未来增强功能
Pebble是CockroachDB 20.2中的默认存储引擎,可以根据需要选择启用RocksDB。
TPC-C性能表现更新
Cockroach Labs团队致力于不断提升 CockroachDB的性能,并在CockroachDB 20.2版本中已经取得明显进展。
TPC-C是行业标准的事务性数据库基准,可模拟电子商务环境。该公司过去曾写过很多有关TPC-C的文章,因为我们认为这是OLTP数据库工作负载的最佳衡量标准。CockroachDB 20.2通过TPC-C,最大容量为14万个数据仓库(之前我们报告为10万个),每分钟最大吞吐量为170万笔交易事务(tpmC),在过去一年中性能提高了40%。
Cockroach Labs同样测试了 TPC-H,它是一种通过复杂解析查询的标准扩展测试工作。尽管CockroachDB主要是一个面向事务的数据库,但它也可以执行复杂的联接和聚合,最好通过诸如TPC-H之类的基准来衡量。通过 TPC-H基准测试,该团队发现22个查询中有20个的查询延迟减少了,而TPC-H Query 9的延迟提高了80倍。
CockroachDB Core的备份和恢复
CockroachDB Core(社区版)使用户可以免费构建可扩展的生产应用程序。在每一个新的版本里,Cockroach Labs团队都会仔细检查所有的功能,以评估是否有任何现有或者新的特性应该被加入到社区办。该公司列出了一套指导方针来帮助他们做出这些决定,现在看来他们越来越倾向于社区版。
Cockroach Labs已经向社区版添加了很多先进的备份和恢复能力,包括:备份、恢复和导出。CockroachDB Core集群已经成长到可以支持TB级的数据量,并且Cockroach Labs认为那些生产应用迫切需要可扩展的分布式备份。这些额外的功能会帮助社区用户通过坚如磐石的灾难恢复计划收获兼备更简单扩展和能安心使用的应用。
管理方面的改进和调试的简化
CockroachDB已经是傻瓜式操作了,CockroachDB 20.2使团队能够通过计划的自动备份、更快的数据导入和更多的批量数据导入选项节省更多的时间。此外,CockroachDB的监控UI显示了对故障排除至关重要的关键指标。CockroachDB 20.2还包括一个SQL事务页和数据库会话页,以帮助开发人员了解查询性能。
其他SQL功能
CockroachDB与PostgreSQL完美兼容,并提供标准的SQL语法,因此你可以使用该数据库作为你的下一代关系型数据库。为了便于部署,在20.2版本中,Cockroach Labs通过改进SQL功能,使开发者能够以熟悉的方式获取到数据,并添加了:
- 用户定义的schema:用schema构造数据层次结构,schema通常用于关系数据库,包括PostgreSQL。这个更新使得CockroachDB对于开发人员来说更加熟悉,与PostgreSQL应用程序和工具更加兼容,并且对不同的数据隔离模式(如微服务)的支持更加灵活。
- 部分索引:仅索引快速读取所需的行子集。更精确的索引减少了索引存储的数据量,因此对写不需要索引的数据的性能产生了影响。
- 物化视图:通过将查询结果缓存在内存中并仅在必要时进行更新来减少频繁运行查询的成本。
- 枚举类型(ENUM):使用这种流行的数据类型,您可以将输入限制为一组定义的值,就像下拉列表一样。
- 改进外键性能:作为关系数据库的关键组件,外键通过在两个表之间创建引用来保护数据完整性,以确保一个表中的条目是另一个表中的有效条目。在CockroachDB 20.2中,外键的性能改进将让更多的客户使用它们。
增强了对Java和Ruby的支持
CockroachDB支持包括ORM在内的各种流行的数据访问工具,使您更容易使用首选的编程语言进行开发。在CockroachDB 20.2中,该公司通过添加与Hibernate、MyBatis、Spring Data JPA和Spring Data JDBC更好的兼容性来提升对Java的支持,并通过添加与Active Record的兼容性改进了对Ruby的支持。它还为Go数据访问层upper/db构建了一个适配器。
用于现代云应用程序的CockroachDB
无论用例如何,Cockroach Labs致力于使CockroachDB成为所有开发人员的首选数据库。借助CockroachDB 20.2,该公司已经听取了用户的意见,并对数据库的所有区域进行了改进,并引入了一个新的程序包,即Kubernetes上的CockroachDB,以简化在云原生环境中的部署。