具有大数据的数据库与文件系统存储

Posted

技术标签:

【中文标题】具有大数据的数据库与文件系统存储【英文标题】:Database vs. File System Storage with Somewhat Big Data 【发布时间】:2018-12-11 17:34:43 【问题描述】:

我知道过去有过关于此的问题,例如 here 和 here,但我还没有真正看到任何解决非常大的数据集的问题。

所以我有大量结构化的数据(数据包含有关美国各地流的信息,每个流都有时间序列数据,并且所有流都由唯一的 ID 标识)。现在它存储在 NetCDF 文件中,为了避免文件过大,这些文件被分成更小的部分。现在,如果我们只想从一个流中访问数据(因为没有多少人希望同时查看所有 270 万个流),我们必须循环遍历所有 NetCDF 文件并仅为该流提取数据。我们还构建了一个 REST API (django-rest-framework),它为任何调用端点的人做同样的事情。

就效率而言,我觉得好像有更好的方法来做到这一点。我考虑过构建一个包含所有数据的数据库,但我担心这实际上可能比循环遍历所有文件要慢,因为将所有这些数据放在一个地方会使用数 TB 的磁盘空间。我正在阅读关于 MongoDB 的 this 文章,似乎他们的产品可以帮助解决这个问题。 我的问题是,将所有这些数据存储在数据库中会节省检索数据的时间吗?实现起来有多难?

【问题讨论】:

【参考方案1】:

简短的回答是“也许”。

更长的答案是这取决于几个因素: 1. 正确构建数据。这意味着将不相关的数据拆分为单独的文档,在相关数据之间正确创建关联等。 2. 正确索引您的数据。例如,如果您有代表流的各个“块”的文档,并带有“流 ID”来标识这些块属于哪个流,那么具有“流 ID”字段的索引将确保您可以有效地抓取所有该流的块。 3. 您可以使用的资源。您可能需要研究数据库的水平扩展,即分片,这需要您真正知道自己在做什么。您可能需要一个专门的 DBA 来处理数据的设置和维护,尤其是在进行复制以避免丢失一个节点时完全杀死您的数据集。这是要花钱的。 4. 您正确准确将所有数据迁移到数据库中的能力。一个小错误可能意味着您遗漏了重要的部分,或者应该关联的数据没有,或者数据输入错误或类型错误,或者任何数量的问题。

绝对建议您使用数据库。即使数据量如此之大,仅索引和数据分离都会对数据检索的效率产生巨大影响。如果不出意外,减少的文件 I/O 和摆脱对文件内容的直接解析应该会使事情变得更快。但是,如果您要使用数据库,则需要非常小心。如果您需要保存 TB 级的现有数据,那么您不应该承担大量工作。您将需要有经验的人来处理迁移、设置和长期维护。这绝非易事。

【讨论】:

另一个小问题,如果 API 的主要目标只是为用户提供单个流的时间序列(例如,我为流 ID 192 请求 30 年的时间序列数据,并且API 返回带有我的数据的 JSON)在数据库中设置会更简单吗? 这不是API打算做什么的问题,而是迁移现有数据的困难问题。插入数据很容易,但正确插入数据并确保没有出错是困难的。

以上是关于具有大数据的数据库与文件系统存储的主要内容,如果未能解决你的问题,请参考以下文章

大数据之HDFS

大数据系列~HDFS文件管理系统介绍

常见分布式文件系统大盘点,想了解大数据先从存储开始

HDFS—Hadoop底层分布式文件存储系统

Hadoop之HDFS分布式文件系统具有哪些优点?

Hadoop之HDFS分布式文件系统具有哪些优点?