苹果公司旗下的 FoundationDB 今天宣布,将开源 FoundationDB 数据记录层,它提供了基于 FoundationDB 的关系数据库语义,具有模式管理,索引功能和“丰富的查询功能集”。
苹果使用数据记录层为数亿用户提供应用程序和服务,并与 FoundationDB 相结合,构成了苹果 CloudKit 服务的支柱。简单的说,CloudKit 使用数据记录层管理数十亿独立的数据库,并让 CloudKit 可以提供丰富的 API,可以改进可扩展性、降低维护。
FoundationDB是“一个能在多集群服务器上存放大规模结构化数据的分布式数据库”。该数据库系统专注于高性能、高可扩展性、和不错的容错能力。2015年,苹果公司收购了 FoundationDB,并将该数据库用于 iCloud 云存储服务。
基于 FoundationDB 构建的面向记录的数据库
和关系数据库一样,Record Layer 可以存储结构化数据, 由 Record Layer 管理的数据库支持包含字段和类型、模式、复杂的主索引和辅助索引以及声明性查询执行的记录。 Record Layer 还包括传统关系数据库中不常见的功能,例如支持复杂的嵌套数据类型、记录提交时的索引以及跨不同类型记录的索引和查询。
基于 FoundationDB 而构建的 Record Layer,不仅在分布式环境中继承了 FoundationDB 的 ACID、可靠性和性能,而且还使用了 FoundationDB 的事务语义以提供类似于传统关系数据库的功能。例如, Record Layer 的二级索引是以事务方式维护的,因此它们始终与最新的数据更改保持同步,减少了应用程序代码中的错误数量,并大大简化了应用程序开发。
为大规模数据库实例而生
Record Layer 天生就适用于大规模数据库实例,支持在单个 FoundationDB 集群中管理数百万个离散数据库实例。它的设计和核心功能集可以扩展到数百万并发用户和各种客户端应用程序生态系统,每个客户端应用程序都具备自有的数据模型和查询访问模式。
而为了简化操作,Record Layer 是无状态的,所以扩展就像启动实例一样简单。面对各种各样的工作负载和活动,Record Layer 通过可预测的方式严格限制和平衡用户之间的资源消耗。
据官方透露,Record Layer 和 FoundationDB 共同构成了 Apple CloudKit 的核心支撑。
FoundationDB Record Layer 的一些特性:
将记录表示为协议缓冲区消息,提供行业标准序列化和模式演变,支持嵌套和重复字段等功能。
支持充分利用 Protocol Buffer 数据模型的事务性二级索引,此外,还有各种高级索引类型,包括聚合索引,如分组计数、全文索引、序数排名索引和可扩展功能索引。在可能的情况下,还可以利用 FoundationDB 的高级功能,如原子突变。
用于检索数据的声明性查询 API 和用于将这些查询转换为具体数据库操作的查询计划程序