数据是核心

来源:互联网 发布:靠谱的和田玉淘宝店 编辑:程序博客网 时间:2024/05/16 09:59

作者:保罗·W·霍默(Paul W . Homer)

软件开发人员最初一般将软件理解为是由命令、函数和算法构成的系统。在学习构建软件的方法时,从面向指令的视角(instruction-oriented view)来认识软件确有帮助,但也正是这一视角,在开发人员尝试创建较大规模的系统时,开始造成阻碍。

如果稍稍后退站远一点看,计算机只不过是能访问与操作一堆数据的时髦工具而己。对于了解管理庞大系统的复杂性,数据的结构处于核心地位。数以百万计的指令有其固有的复杂性,但是,我们可以把注意力集中于底层那些小得多的基本数据结构集上。

举例而言,如果想了解Unix操作系统,通过源代码逐行挖掘是不大可能奏效的。但是,如果你读过一本讲解Unix内部数据结构的书,由于数据结构与进程处理、文件系统等关系密切,因此,如果你读过了一本概括Unix内部数据结构的书,便可更好地了解UNIX在底层是如何运行的。从概念上来看,数据要比代码更加精炼,也更好理解。

代码在计算机中运行时,底层数据的状态在不断发生变化。在某种抽象意义上,可以认为任何算法都只是数据从一个版本到另一个版本的迁移(transformation)而己。我们可以把功能视为是“多个定义良好的迁移所构成的集合”(a larger set of well-defined transformations),在多个版本间连续推动数据的流动。

即使对于最复杂的系统,通过这种面向数据的视角(data-oriented perspective),即通过底层信息的结构整体来看待系统,也可以将之缩减为细节的有形集合(a tangible collection of details)。为了了解复杂系统是如何构建和运行的,必须降低其复杂性。

数据在大多数问题中处于核心地位,业务领域问题经由数据蔓延到代码中。举例而言,大多数关键算法往往易于理解,频繁变化的反而是结构及数据之间的关系。像升级这类运维问题,如果影响到数据,解决起来也会相当困难。要改变代码和行为不是大问题,将之发布即可,但是要将数据结构从老版本迁移到一个新版本,可能需要付出巨大努力。

诚然,软件架构中的许多基础问题确实和数据相关。系统是否在正确的时间收集了正确的数据?谁能够看到数据或修改数据?如果数据己经存在,其质量如何?增长速度如何?如果数据以前不存在,该如何设计数据的结构?何处是数据的可靠来源?从这种视角看,一旦数据己进入系统,剩下的唯一问题便是:是否己经存在查看和编辑特定数据的方法?还是有待增加这些方法?

从设计角度来看,大多数系统的关键问题,就是要在正确的时间从系统中获得正确的数据。从这种角度出发,对数据执行迁移(transformation)操作,便是获取数据、运行功能,然后保存运行结果。为了提供功能,大多数系统其实并不需要特别复杂的底层,它们只是需要积累起越来越多的数据。最先可以看到的确实是系统的功能,但是,只有数据真正构成了每个系统的核心。

0 0