Yandex 发布了其 DBMS «YDB» 的源代码

最近,Yandex 宣布发布了其数据库管理系统“YDB”的源代码,该系统实现了对 SQL 方言和 ACID 事务的支持。

该数据库管理系统(DBMS)从零开始构建,最初的开发目标是确保容错性、故障自动恢复和可扩展性。值得一提的是,Yandex 已推出运营中的 YDB 集群,包含超过 10 个节点,存储数百 PB 的数据,并每秒处理数百万笔分布式事务。

YDB的主要创新

YDB 的一个关键特性是它使用基于表的关系数据模型。YQL( YDB 查询语言)用于查询和定义数据模式;它是SQL 的一种方言,专为处理大型分布式数据库而设计。创建存储模式时,支持类似文件系统目录的树状表分组。此外,YDB 还提供了一个 API,用于处理 JSON 格式的数据。

值得一提的是, YDB能够创建容错配置,即使磁盘、节点、机架甚至单个数据中心发生故障,也能继续运行。YDB 支持跨三个可用区的同步部署和复制,并在某个可用区发生故障时保持集群的健康状态。

通过扫描查询实现数据访问的兼容性,旨在对数据库执行临时分析查询,以只读模式执行并返回 grpc 流。

此外,它还因其使用原生 PDisk 组件和 VDisk 层直接将数据存储在块设备上而脱颖而出。除了 VDisk 之外,DSProxy 也会运行,它会分析磁盘可用性和性能,并在检测到问题时将其排除。

其他显著特点包括:

  • 一种灵活的架构,允许您在 YDB 之上构建各种服务,直至虚拟块设备和持久队列。 适用于不同类型的工作负载:OLTP 和 OLAP(分析查询)。
  • 支持多用户(多租户)和无服务器配置。
  • 能够对客户端进行身份验证。 用户可以在公共共享基础设施上创建自己的虚拟集群和数据库,根据请求数量和数据大小考虑资源消耗,或者通过租用/保留某些计算资源和存储空间。
  • 可以调整记录的使用寿命以自动删除过时的数据。
  • 与 DBMS 交互和提交请求是使用命令行界面、集成 Web 界面或 YDB SDK 完成的,它为 C++、C# (.NET)、Go、Java、Node.js、PHP 和 Python 提供库。
  • 以最小的延迟自动从故障中恢复到应用程序,并在存储数据时自动保持指定的冗余。
  • 在主键上自动创建索引并能够定义二级索引以提高任意列访问的效率。
  • 水平可扩展性。 随着存储数据的负载和大小的增长,只需​​连接新节点即可扩展集群。 计算层和存储层是分开的,允许您单独扩展计算和存储。 DBMS 本身监控数据和负载的均匀分布,同时考虑到可用的硬件资源。 可以实施覆盖世界不同地区的多个数据中心的地理分布配置。
  • 在处理跨多个节点和表的查询时支持强一致性模型和 ACID 事务。 为了提高性能,您可以选择性地禁用一致性检查。
  • 自动数据复制,当大小或负载增加时自动分区(分区,分片),以及节点之间的自动负载和数据平衡。

最后值得一提的是,YDB 被用于 Yandex 的项目中,其代码使用 C/C++ 编写,并以 Apache 2.0 许可证发布。您可以在以下链接找到源代码以及更多详细信息。


在 Google 中将其添加为首选来源