title: NoSQL 数据存储 category: page slug: no-sql-datastore sortorder: 0503 toc: False sidebartitle: NoSQL 数据存储 meta: NoSQL 数据存储持久化数据所采取的方式与传统的关系型数据库不同。到 Full Stack Python 上学习更多有关 NoSQL 的知识。 updated: 2016-07-10 11:46 authors: haiiiiiyun.github.io

NoSQL 数据存储

绝大多数的 Web 系统都采用关系型数据库存储系统来持久化数据。但是还有另外几种不同的存储表示形式。

  1. 键值对
  2. 面向文档
  3. 列簇表

这些持久化数据存储表示法通常不是用来完全替代关系型数据库的,而是作为辅助使用的。由于 NoSQL 数据库所采用的低层持久化形式与关系型数据库不同,这通常也导致了不同的性能特性:在某些读/写条件下有更好的表现,而在另外一些条件下则性能欠佳。

键值对

键值对型的数据存储系统基于 哈希映射 这个数据结构。

键值对数据存储

  • Redis 是一个开源的内存键值对数据存储系统。Redis 经常被称为 ”Web 应用开发的瑞士军刀“。它可用于存储缓存、列队、和会话数据等,在多数案例中,它的存取速度都比传统关系型数据库快。 Redis-py 是 Python 用于操作 Redis 的一个健壮的客户端。

  • Memcached 是另一个广泛使用的内存键值对存储系统。

键值对相关资源

Redis 相关资源

Redis 安全性

应该对 Redis 的默认配置进行修改,从而能防范未认证和未授权的用户。下面这些资源提供了关于 Redis 安全性及数据防护的一些建议。

  • 针对 Redis 服务器的渗透测试 阐述了安全问题无论在你的应用中还是你使用的数据库上都是非常重要的。

  • Redis,和其它任何的关系型或者 NoSQL 数据库一样,都需要依据 安全准则 进行安全设置。这有一篇文章讲述了 Redis 的主要作者 通过攻击 Redis 来展示了 Redis 默认配置在易用性和安全性之间进行的权衡。

面向文档

面向文档的数据库为嵌套数据提供半结构化的表示方式。

面向文档的数据存储系统

  • MongoDB 是一个开源的面向文档的数据存储系统,它使用二进制对象表示法 (BSON)存储格式,该格式和 JSON 类似,因此 Web 开发人员都很熟悉。PyMongo 这个客户端在 Python 代码中通常被用于和一个或多个 MongoDB 实例交互。MongoEngine 是一个针对 MongoDB 的 Python ORM 系统,它基于 PyMongo 开发。

  • Riak 是一个开源的分布式数据存储系统,它注重可用性、容错性和大规模可部署性。

  • Apache CouchDB 也是一个开源项目,它的关注点是倡导使用 RESTful 风格的 HTTP 存取方式来处理存储的 JSON 数据。

面向文档的数据存储系统相关资源

列蔟表

列蔟表形式的 NoSQL 数据存储系统基于键值对类型。 每个键值对可以被认为是一行,而列蔟则可类比于关系型数据库模型中的一个表。

列蔟表数据存储系统

图数据库通过三个方面来表示和存储数据:结点、边和属性。

一个 结点 表示一个实体,如一个人或一家公司。

一条 表示两个实体之间的关系。例如,一条边可以表示人实体结点和公司实体结点之间的雇佣关系。

属性 用于表示结点的相关信息。例如,表示一个人的实体可能会有一个性别属性。

图数据存储系统

  • Neo4j 是一个最常用的图数据库,它运行于 Java 虚拟机系统之上。

  • Cayley 是一个开源的图数据存储系统,它由 Google 发布,并且主要是用 Go 编写的。

  • Titan 是针对多结点簇而开发的一个分布式图数据库。

图数据存储系统相关资源

  • 图数据库简介 上的内容涵盖了 NoSQL 数据存储的发展趋势以及图数据库与其它类型的数据存储系统的对比。

NoSQL 第三方服务

  • MongoHQ 提供 MongoDB 服务。 它无论是在标准的 LAMP 堆栈上还是在 Heroku 上都非常容易设置。

NoSQL 数据存储系统相关资源

  • NoSQL 数据库: 概论 讲解了什么是 NoSQL,相较于关系型系统,数据是如何以不同方式被存储的,以及什么是一致性、可用性和分区容忍性 (CAP) 定律。

  • CAP 定律概述 介绍了所有数据库操作中必须权衡的一些基本限制。

  • 什么是 NoSQL 数据库?通过 Python 编写一个来学习 这篇详细的文章揭开了 NoSQL 数据库低层是如何运作的神秘面纱。

  • CAP 定律系列 讲解了与 NoSQL 相关的一些概念,如 ACID 与 CAP 的对比, CP 与 CA 的对比,以及大规模部署环境下的高可用性。

  • NoSQL 周刊 这份免费的电子邮件时讯聚合了有关非关系型数据存储的文章、教程和视频内容。

  • NoSQL 比较 列出了大量流行的、基于 BigTable的、特殊用途等的数据库系统,并对每个数据库的特性及其最佳用途做了说明。

  • MySQL 和 PostgreSQL 等关系型数据库在其最近的版本中都加入了一些特性来模仿 NoSQL 数据存储系统的一些功能。例如,可以查看这篇博客 将 MySQL 作为一个键值对存储系统使用 和这篇文章 在 PostgreSQL 中存储 JSON

NoSQL 数据存储系统学习清单

  1. 理解 NoSQL 数据存储系统为什么在某些情况下使用会比关系型数据库更适合。但是通常这些优势只能在大规模的情况下才能显现出来,因此可能不太适用于你的 Web 应用。

  2. 将 Redis 整合入你的项目中,相比于较慢的持久化存储系统, 这能提升速度。将会话数据保存在内存中,相比于将数据保存在使用持久化存储器的传统关系型数据库中,通常来说运行会更快。值得注意的是当内存清空后,其中的数据会被删除,因此任何需要持久化保持的数据仍须定期备份到磁盘上。

  3. 评估其它的用例,如将临时的日志存储到 MongoDB 等面向文档的数据存储系统中。