NOSQL数据库数据模型以及系统介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关键词:关系型数据库;非关系型数据库nosql ;云计算技术;数据模型
一、nosql数据库概述
关系型数据库越来越无法满足云计算的应用场景,为了解决此类问题,非关系型数据库应运而生,由于在设计上和传统的关系型数据库相比有了很大的不同,所以此类数据库被称为“nosql(not only sql)”系列数据库。
与关系型数据库相比,它们非常关注对数据高并发读写和海量数据的存储,在架构和数据模型方面作了简化,而在扩展和并发等方面作了增强。
二、nosql数据库优势
nosql数据库主要有以下优势:
扩展简单,去掉关系型数据库的关系型特性,数据之间无关系这样就非常容易扩展。
典型例子是cassandra,由于其架构类似于经典的p2p,因此能够通过简单添加新的节点来扩展集群;
读写快速,典型例子是redis,由于数据之间无关系,纯内存操作,因此其具有非常出色的性能,单节点每秒可以处理超过10万次的读写操作;
灵活的数据模型,nosql 数据库无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
在关系型数据库中,处理大数据量的表,增加字段的工作量是非常庞大的;
成本低廉,企业级数据库的价格很高,并且随着系统的规模增大而不断上升。
高昂的建设和运维成本无法满足云计算应用对数据库的需求。
nosql一般都是以开源的形式存在,可以聚集很多人的智慧,获得很多人得关注,可以减少高昂的成本支出。
三、nosql数据库数据模型
目前,主流的nosql数据库包括bigtable、hbase、cassandra、simpledb、couchdb、mongodb以及redis等。
nosql常用数据模型包括以下3种。
(1)column-oriented(列式)
(2)key-value(键值)
虽然key-value这种模型和传统的关系型相比较简单,有点类似常见的hashtable,一个key对应一个value,但是它能提供非常快的查询速度、大的数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作,虽然不支持复杂的操作,但是可以通过上层的开发来弥补这个缺陷。
(3)document(文档)
在结构上,document和key-value是非常相似的,也是一个key对应一个value,但是这个value主要以json或者xml等格式的文档来进行存储,是有语义的,并且document db 一般可以对value来创建secondary index来方便上层的应用,而这点是普通key-value db 所无法支持的。
四、主要nosql系统的介绍
根据nosql常用的数据模型进行分类,并在每类中选出一种典型系统进行介绍。
(1)面向列存储系统――bigtable
bigtable已经在超过60个google的产品和项目上得到了应用,包括 google analytics、googlefinance、orkut等。
它具有用性广泛、可扩展、高性能和高可用性的特点。
bigtable 是一个是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序map,采用面向列的存储方式来提高数据的读取效率。
bigtable其它特征:稀疏,分布式,持久化。
持久化的意思很简单,bigtable的数据最终会以文件的形式放到gfs去。
bigtable建立在gfs之上本身就意味着分布式,当然分布式的意义并不仅限于此。
稀疏的意思是,一个表里不同的行,列可能完完全全不一样。
(2)面向键值存储系统――dynamo
dynamo是亚马逊的key-value模式的存储平台,它的最大特点是去中心化的分布式系统,dynamo 的主要特性:首先系统成本低 dynamo 不像一些商用数据库产品,需要昂贵的服务器来得到良好的性能,而在 dynamo上,由于是利用一堆廉价机器来存数据,于是你可能只需要很少的钱买个普通机器加入到集群里就行了;其次,dynamo 是一个面向键值存储,因此他不支持外键和关联查询什么的。
其value值是二进制存储的,所以查询条件也只能作用在 key 上;第三,配置简单的分布式存储 - 这是由于 dynamo 是去中心化地设计,在集群中它的每一台机器都是对等的,不像 mongodb 这样的中心化设计,于是它也不会有单点问题。
(3)面向文档存储系统――mongodb
mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。
它是一种可扩展的,高性能的,开源的nosql数据库,用c++编写的。
传统的数据库由数据库(database)、表(table)、记录(record)三个层次概念组成,mongodb同样也是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。
文档类似于json的键值对。
{“name”:“jack”,“age”:15};集合是一组文档的集合。
一个集合下的稳定无模式限制。
五、各nosql系统与关系型数据库的比较
通过以上三种不同结构的nosql系统的介绍,我们可以比较出nosql数据库与传统的关系型数据库有很大不同,其不同的地方主要体现在查询、架构、读写特性、扩展性以及负载策略等几个方面,下面选取当今最流行的开源的关系型数据库mysql与三种nosql数据库系统做一个比较,如下图所示。