数据存储架构与技术
上QQ阅读APP看书,第一时间看更新

1.2.2 高易用性

数据存储另一大目标就是高易用性,即上层应用应该方便地与存储系统“打交道”,将数据以一种便捷的方式写入存储系统,并支持后续的高效读取。为了提供高易用性,人们设计了不同的数据存储接口,如图1.3所示。其中语义最简单的是块接口,即整个存储空间被抽象成大小相等的数据块,每份数据块具有唯一的数字标识符,应用通过数字标识符读写对应的数据块。块接口难以表达大部分应用的数据语义,因此通常作为其他存储接口的底座,而不直接暴露给上层应用。键值接口的易用性高于块接口:它维护键值对的集合,每份键值对包括键和值两部分,均是长度可变的数据块,应用通过键来定位至对应的键值对,进行插入、更新、查询以及删除等操作。由于语义清晰、用法灵活,键值接口被广泛使用,例如亚马逊将在线购物相关的数据存储在键值系统 Dynamo[3]中。文件接口将数据组织成目录树结构,主要包括目录文件和普通文件,应用可以创建、删除和读写文件。其中普通文件存储着文件数据,目录文件记录着该目录下的普通文件以及其他目录文件的名字,每个文件具有权限等属性,用于访问控制。文件系统这种层次化结构十分适合普通的计算机用户,因此几乎所有的桌面操作系统都自带文件系统,为用户提供管理数据的易用方式。此外,为了进一步方便用户使用,还存在针对键值接口和文件接口的扩展,比如有的键值存储系统支持通过多个键查询同一份数据,即二级索引功能;有的文件系统支持事务语义,即保证多个文件操作的原子性。

图1.3 3种常见的数据存储接口

除了存储接口方面,支持数据共享也是易用性的关键。存储阵列虽然解决了容量和性能的限制,但无法进行数据共享,即位于不同位置的用户无法访问同一份数据。随着网络技术和存储协议的发展,数据存储开始朝网络化共享的方向迈进。例如 NAS(Network Attached Storage,网络附接存储)支持通过局域网共享文件。此外,更大规模的分布式存储系统也在追求极致的共享能力,例如,Facebook的分布式文件系统 Tectonic[4]能够提供数据中心级别的数据存储功能,同时支持不同应用,达到了极高的资源利用率。