16

我在这里的演讲中遇到的这两个陈述的区别和含义是什么:

1. Traditional databases enforce schema during load time.

2. Hive enforces schema during read time.
4

1 回答 1

42

您谈到了 Hadoop 和其他 NoSQL 策略如此成功的原因之一,所以我不确定您是否希望获得一篇论文,但它就在这里!数据分析中额外的灵活性和敏捷性可能促成了“数据科学”的爆炸式增长,只是因为它通常使大规模数据分析更容易。

传统的关系数据库在存储数据时会考虑到模式。它知道第二列是一个整数,它知道它有 40 列,等等。因此,您需要提前指定您的模式并妥善规划。这是“写入时的模式”——也就是说,在将数据写入数据存储时应用模式。

Hive(在某些情况下)、Hadoop 和许多其他 NoSQL 系统通常都是关于“读取模式”的——当从数据存储中读取数据时应用模式。考虑以下原始文本行:

A:B:C~E:F~G:H~~I::J~K~L

有几种方法可以解释这一点。~可能是分隔符,也:可能是分隔符。谁知道?读取模式时,没关系。您在分析数据时决定架构是什么,而不是在编写数据时决定。这个例子有点荒谬,因为你可能永远不会遇到这种情况,但它希望能说明问题。

读取模式后,您只需将数据加载到数据存储中,然后考虑如何解析和解释。在这个解释的核心,阅读模式意味着先写你的数据,然后再弄清楚它是什么。写入模式意味着首先弄清楚您的数据是什么,然后再写入。


这里有一个权衡。其中一些是主观的和我自己的观点。

写入模式的好处

  • 对静态数据进行更好的类型安全和数据清理
  • 由于数据已经被解析,通常更有效(存储大小和计算)

写入模式的缺点:

  • 在存储数据之前,您必须提前计划您的模式(即,您必须进行 ETL)
  • 通常,您会丢弃原始数据,如果您的摄取过程中有错误,这可能会很糟糕
  • 对同一数据有不同的看法更难

阅读模式的好处:

  • 灵活定义数据在加载时的解释方式
    • 这使您能够随着时间的推移发展您的“模式”
    • 这使您可以拥有不同版本的“模式”
    • 这允许更改原始源数据格式,而无需合并为一种数据格式
  • 您可以保留原始数据
  • 您可以在知道如何处理数据之前加载数据(因此您不会将其丢在地上)
  • 使您能够灵活地存储非结构化、不干净和/或无组织的数据

读取模式的缺点:

  • 通常它的效率较低,因为您每次都必须重新解析和重新解释数据(这对于 XML 等格式可能很昂贵)
  • 数据不是自记录的(即,您无法查看模式来确定数据是什么)
  • 更容易出错,您的分析必须考虑脏数据
于 2012-08-01T17:32:54.997 回答