`
dingoo
  • 浏览: 6091 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

【转】关系数据库还是NoSQL

阅读更多

在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发。因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库。在高速发展的WEB2.0时代,我们发现关系数据库在性能、扩展性、数据的快速备份和恢复、满足需求的易用性上并不总是能很好的满足我们的需要,我们越来越趋向于根据业务场景选择合适的数据库,以及进行多种数据库的融合运用。几年前的一篇文章《One Size Fits All - An Idea Whose Time Has Come and Gone》就已经阐述了这个观点。

当我们在讨论是否要使用NoSQL的时候,你还需要理解NoSQL也是分很多种类的,在NoSQL百花齐放的今天,NoSQL的正确选择比选择关系数据库还具有挑战性。虽然NoSQL的使用很简单,但是选择却是个麻烦事,这也正是很多人在观望的一个原因。

NoSQL的分类

NoSQL仅仅是一个概念,NoSQL数据库根据数据的存储模型和特点分为很多种类。

类型

部分代表

特点

列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

 

以上NoSQL数据库类型的划分并不是绝对,只是从存储模型上来进行的大体划分。它们之间没有绝对的分界,也有交差的情况,比如Tokyo Cabinet / Tyrant的Table类型存储,就可以理解为是文档型存储,Berkeley DB XML数据库是基于Berkeley DB之上开发的。

NoSQL还是关系数据库

虽然09年出现了比较激进的文章《关系数据库已死》,但是我们心里都清楚,关系数据库其实还活得好好的,你还不能不用关系数据库。但是也说明了一个事实,关系数据库在处理WEB2.0数据的时候,的确已经出现了瓶颈。

那么我们到底是用NoSQL还是关系数据库呢?我想我们没有必要来进行一个绝对的回答。我们需要根据我们的应用场景来决定我们到底用什么。

如果关系数据库在你的应用场景中,完全能够很好的工作,而你又是非常善于使用和维护关系数据库的,那么我觉得你完全没有必要迁移到NoSQL上面,除非你是个喜欢折腾的人。如果你是在金融,电信等以数据为王的关键领域,目前使用的是Oracle数据库来提供高可靠性的,除非遇到特别大的瓶颈,不然也别贸然尝试NoSQL。

然而,在WEB2.0的网站中,关系数据库大部分都出现了瓶颈。在磁盘IO、数据库可扩展上都花费了开发人员相当多的精力来优化,比如做分表分库(database sharding)、主从复制、异构复制等等,然而,这些工作需要的技术能力越来越高,也越来越具有挑战性。如果你正在经历这些场合,那么我觉得你应该尝试一下NoSQL了。

选择合适的NoSQL

如此多类型的NoSQL,而每种类型的NoSQL又有很多,到底选择什么类型的NoSQL来作为我们的存储呢?这并不是一个很好回答的问题,影响我们选择的因素有很多,而选择也可能有多种,随着业务场景,需求的变更可能选择又会变化。我们常常需要根据如下情况考虑:

  1. 数据结构特点。包括结构化、半结构化、字段是否可能变更、是否有大文本字段、数据字段是否可能变化。
  2. 写入特点。包括insert比例、update比例、是否经常更新数据的某一个小字段、原子更新需求。
  3. 查询特点。包括查询的条件、查询热点的范围。比如用户信息的查询,可能就是随机的,而新闻的查询就是按照时间,越新的越频繁。

NoSQL和关系数据库结合

其实NoSQL数据库仅仅是关系数据库在某些方面(性能,扩展)的一个弥补,单从功能上讲,NoSQL的几乎所有的功能,在关系数据库上都能够满足,所以选择NoSQL的原因并不在功能上。

所以,我们一般会把NoSQL和关系数据库进行结合使用,各取所长,需要使用关系特性的时候我们使用关系数据库,需要使用NoSQL特性的时候我们使用NoSQL数据库,各得其所。

举个简单的例子吧,比如用户评论的存储,评论大概有主键id、评论的对象aid、评论内容content、用户uid等字段。我们能确定的是评论内容content肯定不会在数据库中用where content=’’查询,评论内容也是一个大文本字段。那么我们可以把 主键id、评论对象aid、用户id存储在数据库,评论内容存储在NoSQL,这样数据库就节省了存储content占用的磁盘空间,从而节省大量IO,对content也更容易做Cache。

//从MySQL中查询出评论主键id列表 
commentIds=DB.query("SELECT id FROM comments where aid='评论对象id' LIMIT 0,20"); 
//根据主键id列表,从NoSQL取回评论实体数据 
CommentsList=NoSQL.get(commentIds);

NoSQL代替MySQL

在某些应用场合,比如一些配置的关系键值映射存储、用户名和密码的存储、Session会话存储等等,用NoSQL完全可以替代MySQL存储。不但具有更高的性能,而且开发也更加方便。

NoSQL作为缓存服务器

MySQL+Memcached的架构中,我们处处都要精心设计我们的缓存,包括过期时间的设计、缓存的实时性设计、缓存内存大小评估、缓存命中率等等。

NoSQL数据库一般都具有非常高的性能,在大多数场景下面,你不必再考虑在代码层为NoSQL构建一层Memcached缓存。NoSQL数据本身在Cache上已经做了相当多的优化工作。

Memcached这类内存缓存服务器缓存的数据大小受限于内存大小,如果用NoSQL来代替Memcached来缓存数据库的话,就可以不再受限于内存大小。虽然可能有少量的磁盘IO读写,可能比Memcached慢一点,但是完全可以用来缓存数据库的查询操作。

规避风险

由于NoSQL是一个比较新的东西,特别是我们选择的NoSQL数据库还不是非常成熟的产品,所以我们可能会遇到未知的风险。为了得到NoSQL的好处,又要考虑规避风险,鱼与熊掌如何兼得?

现在业内很多公司的做法就是数据的备份。在往NoSQL里面存储数据的时候还会往MySQL里面存储一份。NoSQL数据库本身也需要进行备份(冷备和热备)。或者可以考虑使用两种NoSQL数据库,出现问题后可以进行切换(避免出现digg使用Cassandra的悲剧)。

分享到:
评论

相关推荐

    关系数据库还是NoSQL数据库.doc

    选择NoSQL还是关系数据库,关键在于理解业务需求和数据特性。如果业务对数据一致性要求较高,且数据结构相对固定,关系数据库可能是更好的选择。而在需要高扩展性、高性能读写、灵活数据模型的场景下,NoSQL数据库...

    关系型数据库和NOSQL数据库的应用设计差异

    关系型数据库和NOSQL数据库在应用设计上存在显著差异,这些差异主要来源于它们各自的设计理念、存储方式、数据模型和优化策略等方面。为了深入理解这些差异,我们可以从HBase的应用实践入手,进行分析和对比。 ...

    关系型数据库与NoSQL数据库_张华强.pdf

    * 海量数据的高效率存储和访问:关系数据库应付上万次 SQL 查询还勉强顶得住,但是应付上万次 SQL 写数据请求,硬盘 IO 就已经无法承受了。 NoSQL数据库是指非关系型数据库,包括键值存储数据库、文档数据库、图...

    NoSQL数据库PPT.pptx

    二.NoSQL数据库的产生 关系数据库面临挑战 关系数据库面对超大规模和高并发的SNS类型的web2.0纯动态网站显得力不从心,暴露了很多难以克服的问题 A 大数据发展 大规模数据集合,多重数据带来了许多挑战,尤其是...

    NoSQL非关系型数据库

    #### NoSQL与关系数据库的比较 NoSQL与关系型数据库的主要区别在于设计理念的不同。下面列出了一些主要的比较点: - **数据模型**:NoSQL支持多种数据模型,如键值对、文档、列族和图形等;而关系型数据库仅支持...

    最像关系型数据库的NoSQL---MongoDb

    MongoDb是非关系型数据库的一种,它是一种基于分布式的文档型数据库。

    关系型数据库与nosql数据库.doc

    NoSQL数据库强调分布式、水平扩展、高可用性和大数据处理能力,它放弃了传统的关系模型,采用了诸如键值对、文档型、列族和图形等多种非关系型数据模型,以适应不同的应用场景。NoSQL数据库通常不支持SQL,而是提供...

    分布式key-value键值数据库与关系数据库-NoSql收集.pdf

    分布式Key-Value键值数据库与关系数据库NoSQL的对比及发展趋势 随着云计算和大数据时代的到来,传统的关系数据库(RDBMS)受到了来自非关系型数据库(NoSQL)的挑战,尤其是分布式Key-Value键值数据库。NoSQL的兴起...

    关系型数据库与NOSQL数据库的应用场景.pptx

    关系型数据库与NOSQL数据库的应用场景 关系型数据库和NOSQL数据库是现代数据库系统的两大类型,它们各有优劣,在不同应用场景下有着不同的适用性。理解关系型数据库和NOSQL数据库的特点、优劣和应用场景,可以帮助...

    知识领域: 数据库管理 技术关键词: SQL、关系数据库、NoSQL 内容关键词: 数据建模、查询优化、事务处理

    在IT行业中,数据库管理是至关重要的领域,它涵盖了多种技术和工具,如SQL、关系数据库以及NoSQL等。本文将深入探讨这些关键知识点,帮助你掌握高效的数据管理与操作技巧。 首先,我们来看SQL(Structured Query ...

    实验四:NoSQL和关系数据库的操作比较

    【实验四:NoSQL和关系数据库的操作比较】 本实验旨在对比分析四种不同的数据库管理系统:MySQL、HBase、Redis和MongoDB。这些数据库在处理大数据时各有特点,理解它们的概念及不同点是实验的关键。 1. **MySQL**...

    空间数据库技术应用:关系数据库的设计.pptx

    空间数据库技术应用:关系数据库的设计.pptx

    数据存储实验4-NoSQL和关系数据库的操作比较.doc(实验报告)

    关系数据库和NoSQL数据库操作比较实验报告 实验目的:了解四种数据库(MySQL、HBase、Redis、MongoDB)的概念和不同点,熟悉使用四种数据库操作常用的Shell命令和Java API。 实验平台:Linux操作系统,Hadoop版本...

    厦门大学-林子雨-大数据技术基础-第5章 NoSQL数据库-上机练习-关系数据库和NoSQL数据库操作实践

    《大数据技术基础》课程的第五章重点探讨了NoSQL数据库,并通过上机练习来深化学生对关系数据库和NoSQL数据库的理解。在这个环节中,学生将有机会实际操作四种不同类型的数据存储系统:MySQL(关系型数据库)、Redis...

    分布式keyvalue键值数据库与关系数据库NoSql.pdf

    分布式key-value键值数据库与关系数据库NoSql 在当前的数据库市场中,关系数据库(RDBMS)占据着统治地位,提供了简单性、健壮性、灵活性、性能和可伸缩性等优点。但是,随着应用程序的增长和云计算的普及,关系...

    Nosql非关系型数据库-NoSQL相关概念.pptx

    NoSQL,全称为Not Only SQL,它是一种非关系型数据库技术,主要针对大规模数据处理和多样化数据类型的应用场景。NoSQL数据库的出现是为了应对传统关系型数据库在处理大量非结构化和半结构化数据时面临的挑战,这些...

    NoSQL数据库原理课件-侯宾.zip

    在当今大数据时代,传统的SQL关系型数据库已经无法满足海量数据的存储和处理需求,因此分布式数据库和NoSQL数据库应运而生。本课件将深入探讨分布式数据库的原理以及NoSQL数据库的核心概念,帮助读者理解和掌握这两...

    非关系数据库NoSql介绍

    非关系数据库介绍,对于不了解非关系数据库NoSql的新手来说可以值得一看

    第19章 非关系型数据库—NoSQL.docx

    非关系型数据库-NoSQL 非关系型数据库(NoSQL)是指不使用传统的表格关系来存储数据的数据库系统。NoSQL 数据库的出现是为了弥补关系型数据库的不足之处,如大量数据的写入处理、对有数据更新的表做索引或表结构...

Global site tag (gtag.js) - Google Analytics