传统的 文件系统和数据库 Web 后端已不再足够,必须让位于管理非结构化数据的存储系统。在本文中,我们将了解结构化数据和非结构化数据之间的区别,以及为什么 Web 存储后端必须发展以管理非结构化数据。
传统上,Web 应用程序使用文件系统和数据库来存储用户数据。这很容易管理,因为 Web 应用程序通过接受表单中的文本输入并将输入保存到数据库来生成结构化数据。然而,时代正在变化;随着社交媒体、云存储和数据分析平台的出现,越来越多的非结构化数据被推送到互联网上。
背景
IDC 在 2014 年进行了一项研究,预测到 2020 年,全球创建和复制的非结构化数据将达到每年 44 泽字节,即 44 万亿千兆字节。这比 2013 年的 4.4 泽字节增加了 10 倍。如果您认为这有点太多了,请考虑一下:非结构化数据已经占 2015 年所有数字数据的 90%!
因此,与其他计算范式一样,存储系统需要发展以管理冲击互联网的这一新的非结构化数据浪潮。但在我们进一步深入之前,让我为您定义非结构化数据。通常,无法在关系数据库内部组织存储的数据被称为非结构化数据。您可以拥有文本或非文本非结构化数据。文本文档、电子邮件和演示文稿是非结构化文本数据的示例。非文本非结构化数据的示例包括视频、图像和音频文件。您还可以查看这个 Quora 帖子,以了解结构化数据和非结构化数据之间的区别。
为什么选择对象存储?
我们现在知道,正在生成大量的非结构化数据,并且需要以易于访问、安全可靠的方式处理这些数据。我们已经有一种存储机制,人们从现代计算开始就一直在使用它,即文件系统。
那么为什么我们需要一个全新的存储范式呢?答案在于细节。让我们更深入一点,了解这些需求。
当我们谈论非结构化数据及其规模时,重要的是要理解,用于存储数据的底层系统应该具有良好的可扩展性。但是扩展文件系统很困难。您不仅需要管理文件系统强加给您的(有时是)不必要的元数据和层次结构,还需要考虑维护方面的问题,例如备份管理。
仅仅收集非结构化数据是不够的。您还需要应用一定程度的组织来理解数据。文本分析、自动分类和自动标记等技术对于从您收集的所有非结构化数据中获得商业意义至关重要。这对于文件系统来说很难实现,因为它们具有固定的布局。
文件系统不是为 HTTP(S) 而设计的,而是为人设计的。在文件系统中以编程方式共享和管理文件很困难。处理文件流和可能的边界情况容易出错,并且需要花费大量时间和精力。
为了绕过所有这些,需要一些新的东西,一些从头开始构想,并将新需求放在首位的东西。这就引导我们走向对象存储。
什么是对象存储
与文件系统中的文件不同,对象以扁平结构存储。只有一个对象池:没有文件夹、目录或层次结构。您只需提供对象的对象 ID 即可请求给定的对象。对象可以是本地的,也可以是数千英里外的云服务器上的,但由于它们位于扁平地址空间中,因此它们的检索方式完全相同。
一个重要的方面是元数据处理。对象存储提供了极大的灵活性,因为对象元数据是任意的。元数据不限于存储系统认为重要的内容(想想文件系统中的固定元数据)。您可以手动添加任何类型或数量的元数据。例如,您可以分配与对象关联的应用程序类型;应用程序的重要性;您要分配给对象的数据保护级别;您是否希望将此对象复制到另一个或多个站点;何时将此对象移动到不同的存储层或不同的地理位置;何时删除此对象。等等,可能性是无限的。
文件通过 HTTP(S) 访问非常重要,以确保文件易于访问。然后可以对其进行分析或其他技术处理。对象存储很好地处理了这一点。几乎所有提供对象存储的平台都有 REST API,可帮助您通过 HTTP(S) 访问文件。API 不仅有助于访问数据,还有助于您进行身份验证、获取文件属性和管理权限,所有这些您都需要在文件系统中手动完成。
解决方案
既然互联网上的大多数数据都是非结构化的,并且专家预测这种趋势将呈两位数增长,那么正面迎接这一挑战非常重要。非结构化数据必须以易于访问的方式存储,并且我们必须拥有工具来从我们收集的所有大量非结构化数据中获得商业意义。
让我们来看看一些最流行的开源对象存储解决方案
Ceph
Ceph 是一个分布式对象、块和文件存储平台。Ceph 的软件库为客户端应用程序提供对 RADOS 基于对象的存储系统的直接访问,并且还为 Ceph 的一些高级功能提供基础,包括 RADOS Block Device (RBD)、RADOS Gateway 和 Ceph 文件系统。(请参阅 OpenStack 的 Ceph 存储简介。)
Minio
Minio 是一个最小化的对象存储服务器,与 Amazon S3 的 API 兼容。Minio 用 Go 语言编写,轻量级且高度并发。(请参阅 使用 Minio 的最小化对象存储。)
OpenStack Swift
OpenStack Swift 是一个高可用性、分布式、最终一致的对象/blob 存储。Swift 用 Python 编写,支持 REST API 和其他客户端访问数据。(阅读更多关于 Swift 的 Opensource.com 文章。)
本文的 一个版本 之前发布在 Minio 博客上。经许可并根据 Creative Commons 重新发布。
3 条评论