在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发。因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库。在高速发展的WEB2.0时代,我们发现关系数据库在性能、扩展性、数据的快速备份和恢复、满足需求的易用性上并不总是能很好的满足我们的需要,我们越来越趋向于根据业务场景选择合适的数据库,以及进行多种数据库的融合运用。
当我们在讨论是否要使用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
如此多类型的NoSQL,而每种类型的NoSQL又有很多,到底选择什么类型的NoSQL来作为我们的存储呢?这并不是一个很好回答的问题,影响我们选择的因素有很多,而选择也可能有多种,随着业务场景,需求的变更可能选择又会变化。我们常常需要根据如下情况考虑:
-
数据结构特点。包括结构化、半结构化、字段是否可能变更、是否有大文本字段、数据字段是否可能变化。
-
写入特点。包括insert比例、update比例、是否经常更新数据的某一个小字段、原子更新需求。
-
查询特点。包括查询的条件、查询热点的范围。比如用户信息的查询,可能就是随机的,而新闻的查询就是按照时间,越新的越频繁。
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的悲剧)。
总结
本文只是简单的从MySQL和NoSQL的角度分析如何选择,以及进行融合使用。其实在选择NoSQL的时候,你可能还会碰到关于CAP原则,最终一致性,BASE思想的考虑。因为使用MySQL架构的时候,你也会碰到上面的问题,所以这里没有阐述。
转自:http://www.cnblogs.com/sunli/archive/2011/01/24/nosql_or_relation.html
分享到:
相关推荐
一、NoSQL概念与分类 NoSQL,全称为“Not Only SQL”,意在强调数据库不仅仅局限于传统的SQL关系型数据库,而是涵盖了一系列非关系型数据库技术。NoSQL数据库的出现,旨在解决传统关系型数据库在大数据处理、高并发...
在选择适用于企业的NoSQL解决方案时,首先需要理解NoSQL的分类和架构特点。NoSQL数据库大致可以分为四类:键值存储(Key-Value)、列式存储(Column-Family)、文档存储(Document-Oriented)以及图数据库(Graph-...
1. **NoSQL数据库的分类和选择**:书中可能会讲解各种类型的NoSQL数据库,如MongoDB(文档型)、Cassandra(列族)、Redis(键值对)、Neo4j(图形)等,并指导读者如何根据业务场景选择合适的数据库。 2. **NoSQL...
3. **NoSQL数据库分类**:深入讲解了不同类型NoSQL数据库的特点和适用场景,帮助读者根据具体需求选择合适的技术。 4. **最佳实践**:分享了实施NoSQL项目时的一些最佳实践,包括数据建模技巧、性能优化方法等。 5. ...
总结起来,NoSQL数据库的分类多样,每种类型都有其独特的应用场景和优势。选择合适的NoSQL数据库应考虑数据的结构、查询模式以及系统的需求。例如,键值对存储适用于高速缓存,文档存储适合处理结构化和半结构化数据...
NoSQL数据库的选择和使用需要根据具体的应用场景来决定。在实际应用中,如HBase、Redis和MongoDB等NoSQL数据库因其不同的特性和优势,在大数据处理、缓存系统、文档存储等多个领域都得到了广泛的应用。 HBase是一种...
- NoSQL的分类:主要包括键值存储、列族、文档型和图形数据库四种主要类型。 2. **键值存储** - 如Redis和Memcached,它们提供简单的键值对存储,适用于缓存和快速访问场景。 - 关键特性:高性能、低延迟,但不...
### NoSQL分布式数据库知识点解析 #### 一、选择题知识点详解 ...这些知识点涵盖了 NoSQL 分布式数据库的重要概念和技术细节,对于理解和掌握 NoSQL 数据库的核心原理及其实现机制具有重要意义。
CAP定律是NoSQL数据库存在的三大基石之一,CAP定律是指在分布式系统中,无法同时满足一致性、可用性和分区容忍性这三个属性。其中,一致性是指所有节点在同一时间看到相同的数据;可用性是指每个请求都能收到响应,...
### NoSQL介绍与比较 #### 一、NoSQL概述 NoSQL(Not Only SQL)泛指非关系型数据库,旨在解决传统关系型...通过对不同类型的NoSQL数据库及其特点的理解,可以帮助开发者选择最适合其应用场景的数据库解决方案。
2. **数据模型的选择**:选择合适的NoSQL数据模型对于应用的成功至关重要,错误的选择可能会导致性能问题或其他问题。 3. **技能短缺**:相较于关系型数据库,NoSQL数据库的技术栈更加复杂,需要开发者掌握新的技能...
算法的选择 Quorum NRW Vector clock Virtual node gossip Gossip (State Transfer Model) Gossip (Operation Transfer Model) Merkle tree Paxos 背景 DHT Map Reduce Execution Handling Deletes 存储实现 节点...
NoSQL系列:选择合适的数据库 为什么使用NoSQL数据库? 1、阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 2、待处理的数据量很大 数据量超过关系型数据库的...
NoSQL(Not Only SQL)数据库是一种非关系型数据库管理系统,其设计初衷是为了处理大规模数据存储需求,特别是在大数据和实时Web应用中,NoSQL能够提供更好的可扩展性和灵活性。 #### NoSQL发展背景与动机 NoSQL...
NewSQL 数据库将关系数据库和 NoSQL 数据库的优点结合起来,提供了一个新的选择。 NoSQL 数据库是大数据时代的产物,旨在解决关系数据库无法满足的需求。NoSQL 数据库具有灵活的可扩展性、灵活的数据模型和与云计算...
在了解NoSQL基本原理及常用开源实现之前,我们需要了解NoSQL数据库的分类和特点,以及它们在实际应用中的优缺点。只有这样,我们才能更好地选择合适的NoSQL数据库来满足我们的应用场景。 resources: NoSQL基本原理...
- **AP/CP(可用性和分区容忍性/一致性和分区容忍性)**:大多数NoSQL数据库选择了这两个组合中的一个。它们通常牺牲一致性以换取更好的可用性和分区容忍性,这使得NoSQL非常适合于需要高度可扩展性和可用性的现代...
2. NoSQL数据库的分类:涵盖多种NoSQL数据库类型,如键值存储、列族、文档数据库和图形数据库,以及它们各自的应用场景。 3. NoSQL数据库的核心原理:深入理解CAP理论,即一致性、可用性和分区容错性之间的权衡,...