目前最主流的sql server、oracle、mysql、db2都是关系型数据库。随着社交网站、视频网站等互联网新业务模式的兴起,各种非关系数据库模型也在不断涌现。
以下是copy的:
数据模型概述
1关系模型
关系模型使用记录(由元组组成)进行存储,记录存储在表中,表由架构界定。表中的每个列都有名称和类型,表中的所有记录都要符合表的定义。SQL是专门的查询语言,提供相应的语法查找符合条件的记录,如表联接(Join)。表联接可以基于表之间的关系在多表之间查询记录。
表中的记录可以被创建和删除,记录中的字段也可以单独更新。
关系模型数据库通常提供事务处理机制,这为涉及多条记录的自动化处理提供了解决方案。
对不同的编程语言而言,表可以被看成数组、记录列表或者结构。表可以使用B树和哈希表进行索引,以应对高性能访问。
2键值存储
键值存储提供了基于键对值的访问方式。
键值对可以被创建或删除,与键相关联的值可以被更新。
键值存储一般不提供事务处理机制。
对不同的编程语言而言,键值存储类似于哈希表。对此,不同的编程语言有不同的名字(如,Java称之为“HashMap”,Perl称之为“hash”,Python称之为“dict”,PHP称之为“associative array”),C++则称之为“boost::unordered_map<>”。
键值存储支持键上自有的隐式索引。
键值存储看起来好像不太有用,但却可以在“值”上存储大量信息。“值”可以是一个XML文档,一个JSON对象,或者其它任何序列化形式。
重要的是,键值存储引擎并不在意“值”的内部结构,它依赖客户端对“值”进行解释和管理。
3文档存储
文档存储支持对结构化数据的访问,不同于关系模型的是,文档存储没有强制的架构。
事实上,文档存储以封包键值对的方式进行存储。在这种情况下,应用对要检索的封包采取一些约定,或者利用存储引擎的能力将不同的文档划分成不同的集合,以管理数据。
与关系模型不同的是,文档存储模型支持嵌套结构。例如,文档存储模型支持XML和JSON文档,字段的“值”又可以嵌套存储其它文档。文档存储模型也支持数组和列值键。
与键值存储不同的是,文档存储关心文档的内部结构。这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询。支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。
4列式存储
如果翻转数据,列式存储与关系存储将会非常相似。与关系模型存储记录不同,列式存储以流的方式在列中存储所有的数据。对于任何记录,索引都可以快速地获取列上的数据。
Map-reduce的实现Hadoop的流数据处理效率非常高,列式存储的优点体现的淋漓极致。因此,HBase和Hypertable通常作为非关系型数据仓库,为Map-reduce进行数据分析提供支持。
关系类型的列标对数据分析效果不好,因此,用户经常将更复杂的数据存储在列式数据库中。这直接体现在Cassandra中,它引入的“column family”可以被认为是一个“super-column”。
列式存储支持行检索,但这需要从每个列获取匹配的列值,并重新组成行。
5图形数据库
图形数据库存储顶点和边的信息,有的支持添加注释。
图形数据库可用于对事物建模,如社交图谱、真实世界的各种对象。IMDB(Internet Movie Database)站点的内容就组成了一幅复杂的图像,演员与**彼此交织在一起。
图形数据库的查询语言一般用于查找图形中断点的路径,或端点之间路径的属性。Neo4j是一个典型的图形数据库。
选择哪一种数据模型?
数据模型有着各自的优缺点,它们适用于不同的领域。不管是选择关系模型,还是非关系模型,都要根据实际应用的场景做出选择。也许你会发现单一的数据模型不能满足你的解决方案,许多大型应用可能需要集成多种数据模型。
“列式”的意思:列式数据库是以列相关存储架构进行数据存储的数据库。
行列式 [ háng liè shì ]
若干数字组成的一个方阵,它的值是按下述方式可能求得的所有不同的积的代数和,求每一个积时依次从每一行取一个元因子,而这每一个元因子又需取自不同的列,作为乘数,积的符号是正是负决定于要使各个乘数的列的指标顺序恢复到自然顺序所需的换位次数是偶数还是奇数。
分列式 [ fēn liè shì ]
军队、学生或运动员等,按着不同的兵种或编制排列成一定的队形,依次走正步、行注目礼通过检阅台,这种队形谓之分列式。
相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理
NoSQL描述的是大量结构化数据存储方法的集合,根据结构化方法以及应用场合的不同,主要可以将NoSQL分为以下几类。
(1)Column-Oriented
面向检索的列式存储,其存储结构为列式结构,同于关系型数据库的行式结构,这种结构会让很多统计聚合 *** 作更简单方便,使系统具有较高的可扩展性。这类数据库还可以适应海量数据的增加以及数据结构的变化,这个特点与云计算所需的相关需求是相符合的,比如GoogleAppengine的BigTable以及相同设计理念的Hadoop子系统HaBase就是这类的典型代表。需要特别指出的是,Big Table特别适用于MapReduce处理,这对于云计算的发展有很高的适应性。
(2)Key-Value。
面向高性能并发读/写的缓存存储,其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发 *** 作,非常适合通过主键对数据进行查询和修改等 *** 作。Key-Value数据库的主要特点是具有极高的并发读/写性能,非常适合作为缓存系统使用。MemcacheDB、BerkeleyDB、Redis、Flare就是Key-Value数据库的代表。
(3)Document-Oriented。
面向海量数据访问的文档存储,这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON(JavaScriptObjectNotations)或者XML等格式的文档来进行存储。这种存储方式可以很方便地被面向对象的语言所使用。这类数据库可在海量的数据中快速查询数据,典型代表为MongoDB、CouchDB等。
NoSQL具有扩展简单、高并发、高稳定性、成本低廉等优势,也存在一些问题。例如,NoSQL暂不提供SQL的支持,会造成开发人员的额外学习成本;NoSQL大多为开源软件其成熟度与商用的关系型数据库系统相比有差距;NoSQL的架构特性决定了其很难保证数据的完整性,适合在一些特殊的应用场景使用。
按国际上通用的分类方法,数据库分为以下三大类:
1、参考数据库,是能指引用户到另一信息源获取原文或其他细节的数据库。
2、源数据库,指能直接提供所需原始资料或具体数据的数据库。
3、混合型数据库,能同时存贮多种类型数据的数据库。
按数据结构来分类,有三种:
1、层次式数据库:是将数据组织成有向有序的树结构,并用“一对多”的关系联结不同层次的数据库。
2、网络式数据库:具有实时高效的特性,它要能够并行处理多个终端同一时刻的数据 *** 作
以上就是关于当前主流的数据库系统通常采用哪几种模型全部的内容,包括:当前主流的数据库系统通常采用哪几种模型、“列式”是什么意思、非关系型数据库主要包括几类各有什么特点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)