桓楠百科网

编程知识、经典语录与百科知识分享平台

关于NoSQL数据库的一切,终于说清楚了(二)

在什么应用场景下使用NoSQL

NoSQL 的应用场景比较广泛,下面简单说一下比较适合使用 NoSQL 的几个场景。

  • 对于大数据量、高并发的存储系统及相关应用。
  • 对于一些数据模型比较简单的相关应用。
  • 对数据一致性要求不是很高的业务场景。
  • 对于给定 key 来映射一些复杂值的环境。
  • 对一些大型系统的日志信息的存储。
  • 存储用户信息,如大型电商系统的购物车、会话等。
  • 对于多数据源的数据存储。
  • 对易变化、热点高频信息、关键字等信息的存储。


以上这些相关业务场景都可以使用 NoSQL 来存储。NoSQL 还有很多其他应用,在此不再细述,请读者自行参考其他相关资料。



NoSQL 的数据模型

我们知道,关系型数据库的数据模型由数据结构、数据操作及完整性约束条件组成。同样,NoSQL 也有其相关的数据模型。

NoSQL 的 4 种数据模型如下。

1) 键值对数据模型

键值对数据模型就是采用键值对形式将数据存储在一张哈希表中的一类数据库,这张哈希表具有一个特定的键和一个指向特定数据的指针。

键值对存储中的值可以是任意类型的值,如数字、字符串,也可以是封装在对象中的新的键值对。

2) 列数据模型

列数据模型就是将数据按照列簇形式来存储的一类数据库,通常用于存储分布式系统的海量数据。它也有键,这些键指向多个列,由数据库的列簇来统一安排。

3) 文档数据模型

文档数据模型以文档形式进行存储,它是键值对数据模型的升级版,是版本化的文档。

它可以使用模式来指定某个文档结构,通常采用特定格式来存储半结构化的文档,最常使用的存储格式是 XML、JSON。每个文档都是自包含的数据单元,是一系列数据项的集合。

4) 图数据模型

图数据模型采用图结构形式存储数据,它是最复杂的 NoSQL,常被用于存储一些社交网络的社交关系,适用于存储高度互联的数据。它由多个节点和多条边组成,节点表示实体,边表示两个实体之间的关系。

其中,键值对数据模型、列数据模型、文档数据模型统称为聚合模型,它们有一个共同特点:可以把一组相互关联的对象看作一个整体单元来操作,通常把这个单元称为一个聚合。

NoSQL 数据库的分类

NoSQL 数据库的种类繁多,它所存储的数据类型也是各异的。在实际应用中,企业往往会根据不同的业务场景来选择不同的 NoSQL 数据库,比如一个大型社交系统,可能需要使用多种 NoSQL 数据库才能满足业务需求。

本文我们就详细介绍一下 NoSQL 数据库的分类,以便帮助读者在实际应用中选择不同的 NoSQL 数据库来实现不同的业务需求。

NoSQL 数据库大致可以分为四大类,分别如下。

1) 键值对存储数据库

主要采用键值对形式存储数据的一类数据库。

典型代表:
Redis(由 C/C++语言开发)、Memcached、Voldemort、Berkeley DB、Tokyo Cabinet/Tyrant 等。

当采用该类数据库存储数据时,需要定义数据结构(半结构化)才能进行存储。

2) 面向列存储数据库

主要按照列存储数据的一类数据库。

典型代表:HBase(由 Java 语言开发)、Cassandra(由 Java 语言开发)、Riak(由 Erlang 语言、C语言及
JavaScript组合开发)等。

当采用该类数据库存储数据时,需要定义数据结构(半结构化)才能进行存储。

3) 面向文档数据库

主要用于存储文档的一类数据库。文档也是它的最小单元,同一张表中存储的文档属性可以是多样化的,数据可以采用 XML、JSON、JSONB 等多种格式存储。

典型代表:MongoDB(由 C++ 语言开发)、CouchDB(由 Erlang 语言开发)、RavenDB 等。

当采用该类数据库存储数据时,不需要定义数据结构(非结构化)就可以存储。

4) 面向图形数据库

主要用于存储图片信息的一类数据库。

典型代表:Neo4j(由 Java 语言开发)、InfoGrid、Infinite Graph 等。

目前,NoSQL 数据库的使用场景比较广泛,很多企业都会根据自己相关的业务场景来使用各类 NoSQL 数据库,或者混合使用它们。



各类 NoSQL 数据库的比较

前面说了那么多关于 NoSQL 数据库的相关知识,接下来我们就来比较一下各类 NoSQL 数据库的优缺点,以方便在实际应用中正确选择合适的数据库,如下表所示。
表1:各类 NoSQL 数据库的比较

分类

数据模型

优点

缺点

适用场景

不适用场景

键值对存储数据库

一系列 key 指向 value 的键值对,通过采用哈希表来实现

  • 査询速度快
  • 保存速度快
  • 兼具临时性和永久性
  • 数据无结构,通常只被当作字符串或二进制数据
  • 当进行临时性保存时,数据有可能丢失
  • 做高速缓存,实现大数据量的存储与访问
  • 缓存日志,做日志缓存系统
  • 存储用户信息,如购物车、会话等
  • 不适用于通过值来査询的业务
  • 不适用于需要存储数据之间关系的业务
  • 需要对事务提供支持,在遇到故障时事务不可以回滚

面向 列存储数据库

采用列簇形式存储,将同一列数据存放在一起

  • 査询速度快
  • 擅长以列为单位读入数据
  • 可扩展性强,尤其是分布式扩展

功能相对同限

  • 做分布式文件系统
  • 存储日志信息

不适用于需要实
现 ACID 相关事务的业务

面向
文档
数据库

釆用文档形式存储,也可以看作一系列键值对,它的每个数据项都有对应的名称和值

  • 无须定义表结构,表结构可变
  • 对数据结构要求不严格
  • 可以使用复杂的査询条件
  • 査询性能不高
  • 缺乏统一的查询语法
  • Web应用,与 key-value 类似,value 是结构化的,不同的是数据库可以了解 value 的内容
  • 存储日志信息, 做相关业务的分析

在存储文档数据 时,需要在不同的文档上添加事务时不适用

面向图形
数据

釆用图结构形式存储,实体是一个节点,节点之间的关系是边

具有很多图结构算法的支持,如最短路径算法、最小生成树算法等

  • 为了得到结果,需要对整个图形进行计算
  • 不利于做分布式应用
  • 适用范围有限
  • 应用于大型社交网络
  • 做相关推荐系统
  • 面对一些关系性强的数据

不适用于存储非
图结构的数据



控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言