NoSQL生态系统

发表于:2011-12-13 09:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:iammutex    来源:51Testing软件测试网采编

  要想了解NoSQL,必须先了解现有的这些工具,去理解那些引导它们开拓出新的存储领域的设计思路。

  NoSQL 其名

  在给 NoSQL 下定义之前,我们先来试着从它的名字上做一下解读。顾名思义,NoSQL 系统的数据操作接口应该是非 SQL 类型的。但在 NoSQL 社区,NoSQL 被赋予了更具有包容性的含义,其意为 Not Only SQL,即 NoSQL 提供了一种与传统关系型数据库不同的存储模式,这为开发者提供了关系型数据库之外的另一种选择。

  NoSQL 的启示

  NoSQL 运动受到了很多相关研究论文的启示,在所有资料中,最核心的有两个:Google 的 BigTable 论文和 Amazon 的 Dynamo 论文。

  特性概述

  NoSQL 系统舍弃了一些 SQL 标准中的功能,取而代之的是一些简单灵活的功能。NoSQL 的构建思想就是尽量简化数据操作,尽量让操作的执行效率可预估。当你去考查一个 NoSQL 系统时,下面的几点是值得注意的。

  数据模型及操作模型:你的应用层数据模型是行、对象还是文档型的呢?这个系统是否能支持你进行一些统计工作呢?

  可靠性:当你更新数据时,新的数据是否立刻写到持久化存储中去了?新的数据是否同步到多台机器上了?

  扩展性:你的数据量有多大,单机是否能容下?你的读写量需求单机是否能支持?

  分区策略:考虑到对扩展性、可用性或者持久性的要求,你是否需要一份数据被存在多台机器上?你是否需要知道或者说你能否知道数据在哪台机器上?

  一致性:你的数据是否被复制到了多台机器上?这些不同节点的数据如何保证一致性?

  事务机制:业务是否需要 ACID 事务机制?

  单机性能:如果你打算持久化的将数据存在磁盘上,哪种数据结构能满足你的需求(你的需求是读多还是写多)?写操作是否会成为磁盘瓶颈?

  负载可评估:对于一个读多写少的应用,诸如响应用户请求的网络应用,我们总会花很多精力来关注负载情况。你可能需要进行数据规模的监控,对多个用户的数据进行汇总统计。你的应用场景是否需要这样的功能呢?

  NoSQL 数据模型及操作模型

  数据库的数据模型指的是数据在数据库中的组织方式,数据库的操作模型指的是存取这些数据的方式。通常数据模型包括关系模型、键值模型以及各种图 结构模型。操作语言可能包括 SQL、键值查询及 MapReduce 等。NoSQL 通常结合了多种数据模型和操作模型,提供不一样的架构方式。

  基于Key值存储的NoSQL数据模型

  在键值型系统中,复杂的联合查询以及满足多个条件的数据查询操作就不那么容易实现了,需要换一种思维来建立和使用键名。比如要获取部门号为 20 的所有员工的信息,应用层可以先获取 Key 为 employee_departments:20的这个列表,然后再循环地拿这个列表中的 ID 通过获取 employee:ID 得到所有员工的信息。

  Key-Value 存储

  Key-Value 存储可以说是最简单的 NoSQL 存储,每个 Key 值对应一个任意的数据值。对 NoSQL 系统来说,这个任意的数据值是什么,它并不关心。比如在员工信念数据库里,employee:30这个 Key 对应的可能就是一段包含员工所有信息的二进制数据。这个二进制的格式可能是 Protocol Buffer、Thrift 或者 Avro 都无所谓。

  Key-结构化数据存储

  Key-结构化数据存储的典型代表是 Redis,Redis 将 Key-Value 存储的 Value 变成了结构化的数据类型。Value 的类型包括数字、字符串、列表、集合以及有序集合。除了 set/get/delete 操作以为,Redis 还提供了很多针对以上数据类型的特殊操作,比如针对数字可以执行增、减操作,对 list 可以执行 push/pop 操作,通过提供这种针对单个 Value 进行的特定类型的操作,Redis 可以说实现了功能与性能的平衡。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号