数据库种类及关系型数据库原理

一、数据库种类及关系型数据库原理

1.1数据库种类:

按照早期的数据库理论,比较流行的数据库模型有三种:
层次式数据库
网络式数据库
关系型数据库

在当今互联网中,最常用的数据库模型:
关系型数据库
非关系型数据库

关系型数据库使用类似于excel表格来表示
关系型数据库使用结构化查询语言SQL语句来对数据进行存取
代表作品,mysql oracle

随着互联网web2.0网站的兴起,传统的关系型数据库在应付web2.0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网络瓶颈都难以有效突破,于是开始出现了大批针对特定场景,以高性能和使用便利为目的的功能特异化的数据库产品,NoSQL(非关系型)类的数据库就是在这样的情境中诞生并得到了非常迅速的发展。

【动态请求越来越多,对数据库的要求越来越高,传统的数据库遵循SAD理论(保持数据一致性,存放磁盘等)存取数据很慢,在这种情况下,非关系型数据库就诞生了】

NoSQL:
Google的BigTable
Amazon的Dynamo
成功的商业NoSQL

开源NoSQL:
Facebook的Cassandra
Apache的HBase
Redis,mongodb

1.2非关系型数据库种类

(1)键值(Key-Value)存储数据库

键值数据库就类似传统语言中使用的哈希表。可以通过key来添加、查询或者删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性。
键值(Key-Value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个特向指定的数据。Key/Value模型对于IT系统来说的有时在于简单、易部署、高并发。
典型产品:Memcached、Redis、MemcacheDB、Berkeley DB

(2)列存储(Column-oriented)数据库

列存储数据库将数据存储在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是有列家族来安排的。
典型产品:Cassandra,HBase

(3)面向文档(Document-Oriented)数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
面向文档数据库会将数据以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以使复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不通的,数据可以使用XML、JSON或者JSONB等多种形式存储。
典型产品:MogoDB、CouchDB

(4)图形(Graph)数据库

图形数据库允许我们将数据库以图的方式存储。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体,Steve Jobs、Apple和Next,则会有两个"Founded by"的边将Apple和Next连接到Steve Jobs.
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要指定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。
典型产品:Neo4J、InfoGrid

1.3非关系型数据库产品介绍

(1)Memcached(key-value)

  Memcached是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态Web应用,最初版本由LiveJournal的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度。
注意:Memcache是这个项目的名称,而Memcached是服务器端的主程序文件名。

(2)redis(key-value)

和Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集、差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不方式的排序。与memcached一样,为了保证效率,redis的数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且再此基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
官网:http://www.redis.io/documemtation

redis特点:

1.支持内存缓存,这个功能相当于memcached
2.支持持久化,这个功能相当于memcachedb,ttserver
3.数据类型更丰富。比其他key-value库功能更强
4.支持集群,分布式
5.支持队列等特殊功能

(3)MongoDB(Document-oriented)

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,累似json的bjson格式,因此可以存储比较复杂的数据类型。Mogodb最大的特点是他支持的查询语言非常强大,它的语法有点类似于面向对象的查询语言,几乎可以实现关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。

主要功能特性:

1.面向集合存储,易存储对象类型的数据
2.模式自由
3.支持动态查询
4.支持完全索引, 包含内部对象
5.支持查询
6.支持复制和故障恢复
7.使用高效的二进制数据存储,包括大型对象(如视频等)
8.自动处理碎片,以支持云计算层次的扩展性
9.支持ruby,python,java,c++,php等多种语言
10.文件存储格式为bson(一种json的扩展)
11.可通过网络访问

默认端口27017
http://www.mongodb.org/display/DOCS/Manual
http://www.mongodb.org/display/DOCS/Home

(4)Cassandra(Column-oriented)

    Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据。Facebook目前在使用此系统。
    主要特性:
    分布式
    基于column的结构化
    高伸展性
    Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在集群里面添加节点就可以了。

其他不常用非关系型数据库

HBase,MemcacheDB,Berkeley DB,Tokyo Cabinet\Tokyo Tyrant(ttserver)

猜你喜欢

转载自blog.csdn.net/shangyuanlang/article/details/77973149