厉害了,苹果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上执行。