结构化数据指的可以在一个记录文件里面以固定格式存在的数据,它依赖于提前建立好的数据标准规范(有时候也称元数据),例如:需要多少个属性,每个属性什么类型,每个属性的取值范围等等,类似下图所示,提前定义好了一个二维矩阵的元数据,包含有列名称、列的类型、列的约束等:
可见,虽然结构化数据的存储和排列是很有规律的,这对查询和修改等操作很有帮助。但是,它的扩展性不好(比如,业务需要增加一个字段,此时就需要将已存储入库的所有数据全部更新一遍,效率极低)。
非结构化数据是指信息无法预先定义其格式规范的数据模型。非结构化数据一般指文字型数据但同时数据中又存在很多诸如时间、数字等的信息。相对于传统的在数据库中或者标记好的文件,由于他们的非特征性和歧义性会更难理解。包括所有格式的办公文Word、PPT、文本、图片、各类报表、图像和音频/视频信息等等。
对非结构化的数据,我们一般以二进制的形式直接整体进行存储。
半结构化数据就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全非结构的数据(如声音、图像文件等)之间的数据,它并无明确的数据模型结构,但包含相关标记定义可用来分隔语义元素以及对记录和字段进行分层。因此,它也被称为自描述的结构。
半结构化数据,属于同一类的实体可以有不同的属性,即使他们被组合在一起,且这些属性的顺序也并不重要。例如,日志文件、HTML文件、XML文档、JSON文档、Email等。
现以常见的XML文件举例如下(属性的顺序可以调整,且属性的个数是可以不一样):
可见,半结构化的数据格式可以自由地表达、更新很多有用的信息。所以,半结构化数据的扩展性是很好的。