苹果FoundationDB数据库再升级,添加文件数据库功能

苹果今开源FoundationDB文件层(Document Layer),这是一个文件导向的数据库,由扩展FoundationDB键值存储的核心功能而来。

2009年成立的FoundationDB,在2015年的时候被苹果收购,并于4月时开源了其核心。FoundationDB是一个多重模型的NoSQL数据库,使用无共享构架(Shared-Nothing Architecture)。整体功能设计围绕着其核心,通过增加不同的扩展层(Layer)扩展功能,而核心仅包含不可能在扩展层中实例的功能,FoundationDB以扩展层仿真特定类型的数据并处理其访问模式,而最新开源的文件层便用来扩展FoundationDB键值存储。

FoundationDB文件层使用MongoDB API的形式,提供开发人员熟悉的操作,并且与MongoDB协议兼容,因此使用MongoDB的简易应用程序,可以轻易的搬迁到FoundationDB文件层上。开发者可以使用任何现有的MongoDB客户端,进行将应用程序链接到文件层的操作。

通过扩展FoundationDB,文件层继承了核心项目的关键特性,包括可扩展性、ACID交易支持以及出色的性能,使其成为无状态服务器,而这也让文件层具有多种创新功能。FoundationDB没有写入锁定,即便是在单一文件上的写入操作也不锁定。FoundationDB中的交易是无锁的(Lockless),并借由将文件存储为多个键值对,让文件层支持多个平行写入器,在部分情况,非冲突操作可以平行进行。

FoundationDB文件层的另一个优势是无分片(Sharding),文件层不依赖固定的分片键值来分散数据,而是让所有数据分区和重新平衡都由键值存储自动管理。该设计直接继承自FoundationDB核心,可提供强大的水平可伸缩性,同时还能降低客户端设计复杂性。由于文件层每个实例都是无状态应用程序,只使用存储数据的FoundationDB集群进行配置,这种无状态设计代表文件层的实例,可以放置在负载均衡器之后,并处理来自任何客户端对任何文件的查找。

在默认情况中,文件层的写入操作符合完全隔离和原子性,索引和文件数据始终保持一致,无论客户端的选择,写入始终保持完全一致,读取也会呈现强健的因果一致性,如此能让开发者更容易撰写,具同时处理多请求能力的应用程序。

FoundationDB键值存储功能强大,但是仅限于分布式交易和有状态存储,但是文件层聚焦于键值存储功能的API,以建模出更复杂的数据存储方法。由于FoundationDB键值存储缺少了完整的数据库系统功能,不仅没有索引、数据类型,也没有查找引擎,文件层为FoundationDB增加了这些功能类似的概念。FoundationDB文件层以Apache v2授权许可发布于GitHub,其二进制档可在macOS和Linux上执行。