NoSQL简介

来源:互联网 发布:java des加密 base64 编辑:程序博客网 时间:2024/05/18 01:21

1.    简介

NoSQL,指的是非关系型的数据库,NoSQL(NoSQL= Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

2.      传统关系型数据库面临的问题

2.1.       High performance - 对数据库高并发读写的需求

web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。

2.2.       Huge Storage - 对海量数据的高效率存储和访问的需求

对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。

2.3.       High Scalability &&High Availability- 对数据库的高可扩展性和高可用性的需求

在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web serverapp server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。

3.      NoSQL与关系型数据库设计理念比较

关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

4.      NoSQL特点(优点)

4.1.       性能瓶颈大幅提升

NoSQL的支持者称,通过NoSQL架构可以省去将WebJava应用和数据转换成SQL友好格式的时间,执行速度变得更快。“SQL并非适用于所有的程序代码,”对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。

4.2.       操作相对较少

虽然NoSQL的支持者也承认关系数据库提供了无可比拟的功能集合,而且在数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。

4.3.       扩展相对容易

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

4.4.       高性能、大数据量、高可用性(三高)

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用 Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如CassandraHBase模型,通过复制模型也能实现高可用。

5.      NoSQL缺点

5.1.       没有正式的官方支持

5.2.       NoSQL并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验

6.      NoSQL常见开源数据库

6.1.       Membase

6.1.1.  简介

Membase NoSQL 家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,可以下载beta版本的Linux二进制包。该产品主要是由North Scalememcached核心团队成员开发完成,其中还包括ZyngaNHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。Membase容易安装、操作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置的告警信息。Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。另外,对存储的数据进行再分配仍然是必要的。这方面的一个有趣的特性是NoSQL解决方案所承诺的可预测的性能,准确性的延迟和吞吐量。

6.1.2.  特点

◆自动将在线数据迁移到低延迟的存储介质的技术(内存,固态硬盘,磁盘)

◆可选的写操作一一异步,同步(基于复制,持久化)

反向通道再平衡[未来考虑支持]

◆多线程低锁争用

◆尽可能使用异步处理

◆自动实现重复数据删除

◆动态再平衡现有集群

◆通过把数据复制到多个集群单元和支持快速失败转移来提供系统的高可用性。

6.2.       MongoDB

6.2.1.  简介

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

6.2.2.  特点

◆面向集合存储,易存储对象类型的数据

“面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)

◆模式自由

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

◆支持动态查询

◆支持完全索引,包含内部对象

◆支持查询

◆支持复制和故障恢复

◆使用高效的二进制数据存储,包括大型对象(如视频等)

◆自动处理碎片,以支持云计算层次的扩展性

◆支持RUBYPYTHONJAVAC++PHP等多种语言

◆文件存储格式为BSON(一种JSON的扩展)

BSONBinary Serializeddocument Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。

◆可通过网络访问

MongoDB服务端可运行在LinuxWindowsOS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB32位模式运行时支持的最大文件尺寸为2GB

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

6.3.       Apache Cassandra

6.3.1.  简介

Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook在使用此系统。

6.3.2.  特点

◆分布式

◆基于column的结构化

◆高伸展性

Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。Cassandra是一个混合型的非关系的数据库,类似于GoogleBigTable。其主要功能比 Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0

6.4.       更多数据库参考http://www.cnblogs.com/skyme/archive/2012/07/26/2609835.htm

 

 

原创粉丝点击