《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一2.3 图模式
基于事实的模型中的每个事实都捕捉了一段信息。但事实本身不能表达数据背后的结构。也就是说,数据集中没有包含事实类型的描述,也没有它们之间关系的任何解释。本节将介绍图模式—图捕获使用基于事实的模型进行存储的数据集的结构。我们将讨论图模式的元素,以及使得一个模式可实施的需要。
让我们首先将FaceSpace的事实构建成一个图。
2.2节详细讨论了FaceSpace事实。每个事实都代表一条用户信息或两个用户之间的关系。图2-16描述了一个图模式,用以表示FaceSpace事实之间的关系,针对用户、他们的个人信息和他们之间的关系,它提供了一个有用的可视化。
图2-16 可视化FaceSpace事实之间的关系
该图强调了图模式的三个核心组件—节点、边和属性:
节点是系统中的实体。在这个例子中,节点是FaceSpace用户,由用户ID表示。再如,如果FaceSpace允许用户将自己看作一边是节点之间的关系。在FaceSpace中,边的含义是显而易见的—用户之间的边代表了FaceSpace朋友关系。以后你可以在用户之间添加额外的边类型,用以标识同事、家人或同学。
属性是关于实体的信息。在这个例子中,年龄、性别、位置和所有其他个人信息都是属性。
节点之间的边是严格的:尽管在图2-16中,属性和节点看起来是连接的,但这些线不是边。它们只是用于辅助说明用户及其个人信息之间的关系。我们用实线代表边、虚线代表属性连接,来表示它们之间的不同。
图模式对数据集包含的所有数据提供了一个完整的描述。接下来将讨论确保数据集内的所有事实都严格遵循该模式的必要性。2.3.2 可实施模式的必要性
这时,信息被存储为事实,并且用图模式描述了数据集包含的事实的类型。你觉得都准备好了,是吗?不,你还需要确定以什么格式存储事实数据。
一种方法是使用半结构化的文本格式,比如JSON。这种格式可实现简单性和灵活性,基本上允许将任何数据写入主数据集,但在这种情况下,对我们的需求来说有点过于灵活了。
为了说明这个问题,假设你选择使用JSON来表示Tom的年龄:
这对于单个事实的表示是没有问题的,但没有办法确保所有随后的事实都遵循相同的格式。由于人为错误,数据集也可能包含这样的事实:
这些例子都是有效的JSON,但它们格式不一致或丢失了数据。尤其是,2.2节强调了每个事实有一个时间戳的重要性,但文本格式不能执行此要求。为了有效地使用数据,你必须为数据集的内容提供保障。
另一种方法是使用一个可实施的模式来严格定义事实的结构。可实施的模式预先需要做更多的工作,但是它们保证所有必需的字段都存在,并确保所有值是预期的类型。有了这些保证,开发人员将对他们期待的数据充满自信—每个事实都有一个时间戳,用户的名字永远是一个字符串,等等。关键之处在于,当创建一块数据发生错误时,可实施的模式会即刻给出错误提示,而不是稍后有人试图在不同的系统中使用数据时才发现错误。错误越早暴露为bug,就越容易捕捉和修复。
在第3章中,你将看到如何使用序列化框架来实现一个可实施的模式。序列化框架提供了一种与语言无关的方式来定义模式中的节点、边和属性,然后生成代码(可能以很多不同的语言),用来序列化和反序列化模式中的对象,这样它们就可以存储到主数据集并被检索到。
此时你可能很想知道细节,不要担心—最好的学习方式是实践。在2.4节中,我们将在SuperWebAnalytics.com实体中设计基于事实的模型,并在第3章中使用序列化框架来实现它。
Preface 前 言 当第一次进入大数据的世界时,我仿佛置身于软件开发的美国西部荒原。许多人放弃了关系型数据库,转而选择带有高度受限模型的NoSQL数据库,主要是因为其使用体验良好、熟悉度较高且这种数据库可以扩展到成千上万台机器上。
相关文章
- Kubernetes — 作业副本与水平扩展
- 可编程数据平面将OpenFlow扩展至电信级应用(二)
- Atitit.一个cms有多少少扩展点,多少api wordpress  cms有多少api。。扩展点
- 学渣乱搞系列之扩展KMP的那点事
- 手把手教你怼一个operator扩展kubernetes的能力
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一1.7 Lambda架构
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一1.10 总结
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一第2章 大数据的数据模型
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一2.2 基于事实的数据表示模型
- 《大数据系统构建:可扩展实时数据系统构建原理与最佳实践》一第3章 大数据的数据模型:示例
- CSDN日报190823:Linux内核争抢式并发在SMP多核扩展上的不足
- 关于泛型类和扩展方法的一点思考
- easyui datagrid remoteSort的实现 Controllers编写动态的Lambda表达式 IQueryable OrderBy扩展
- ThinkPHP 3.2.3 Widget 扩展的使用
- xinetd - 扩展的互联网服务守护进程
- Ubuntu18.04 一些好用的扩展
- 此问题可能是由配置更改或安装另一个扩展导致的
- swift是面向对象、面向协议、高阶类型、灵活扩展、函数式编程语言
- linux下编译安装pthreads扩展
- LVM详解笔记pv-vg-lv创建和扩展
- 【监控笔记】【2.2】扩展事件——死锁监控
- SQL Server扩展事件-- 使用system_health默认跟踪会话监控死锁