Storm作者Nathan Marz的大作《Big Data: Principles and Best Practices of Scalable Realtime Data Systems》原版授权翻译,未经允许不得转载!
为了找到如何正确构建数据系统的方法,你必须回到第一性原则。那么在最基本的层面上,一个数据系统是做什么的呢?
让我们开始于一个直观的定义:一个数据系统基于过去到现在的信息来回答问题。所以社交网络资料回答像“这个人的名字是什么?”、“这个人有多少朋友?”这样的问题。银行账户网页回答像“我的当前余额是多少?”,“最近我的账户发生了什么交易?”这样的问题。
数据系统不只是记录和重现信息。它们把零碎信息结合在一起,来生成它们的答案。例如,银行账户余额,是基于结合该账户上的所有交易信息得到的。
另一个重要的观察是,并非所有信息都是平等的。一些信息来自于其他信息。银行账户余额是源自历史交易的。朋友数是来源于朋友列表的,朋友列表来自用户资料中添加和删除朋友的总次数。
当你一直追踪信息来源于哪里时,你最终会得到不是来自任何事物的信息。这是最原始的信息:你掌握的信息是真实的只是因为它是存在的。我们称之为信息数据。
你也许对数据这个词有不同的理解。通常数据与信息这个词是可以互换使用的。但在这本书的剩余部分,我们使用数据这个词时,我们指的是一切派生得到的特殊信息。
如果一个数据系统通过查看过去的数据来回答问题,那么最通用的数据系统通过查看整个数据集来回答问题。所以我们给数据系统最通用的定义如下:
query = function (all data)
任何你能想象的数据处理都可以表示为一个函数,该函数接受你所有的数据作为输入。记住这个等式,因为它是你将学习到的所有东西的关键。我们将反复提及这个等式。
Lambda 架构提供了一个通用的方法,来实现任意数据集上的任意函数,并且让这个函数低延迟地返回结果。这并不意味着每次实现一个数据系统时,你永远使用完全相同的技术。你使用的具体技术可能基于你的需求的改变而改变。但是Lambda 架构定义了一个一致性的方法来选择这些技术并将它们连接在一起以满足你的需求。
现在我们讨论数据系统必须呈现出的属性。