# 4.2 NoSQL数据库
## 4.2 NoSQL数据库
NoSQL数据库是一种非关系型数据库。跟使用SQL的关系型数据库相比,它具有以下一些特点:
- 无模式(schema)
- 易于水平扩展(horizontal scaling)
- 需要为查询而设计文档结构
- 对事务(transaction)的支持有限,或需要用户自己实现
常见的NoSQL数据库有两类:面向文档的(document-oriented)数据库和“键-值”(key-value)数据库。前者往往以JSON文档作为数据存储,如[MongoDB](https://www.mongodb.org/);后者就像一个Hash表,把数据按“键-值”对存储,而且往往整个数据库都位于内存中以实现较快的存取速度(因而常作为缓存使用),如[Redis](http://redis.io/),[Memcached](http://www.memcached.org/)。
需要指出的是,现在已经有不少SQL数据库支持JSON文档的存储和查询,如MySQL(从版本5.7开始),PostgreSQL(从版本9.4开始)和Oracle,这使得SQL数据库和NoSQL数据库的边界变得模糊,对用户来说则意味着更多的选择。
### 流行的开源NoSQL数据库
- [MongoDB](https://www.mongodb.org/)是一种具有高扩展性(scalability)的文档数据库,常用于大数据[1](#fn_1)存储。
- [Redis](http://redis.io/)是一种多功能的“键-值”数据库:不但可以用作缓存,还可以用作消息代理(message broker)实现[“订阅/发布”模式](https://redis.io/topics/pubsub)。
- [Memcached](http://www.memcached.org/)是一种高性能的、专用于缓存的“键-值”数据库。
更多关于NoSQL数据库的介绍和产品可参考:<https://en.wikipedia.org/wiki/NoSQL>
> 1. 大数据专指海量数据,几个甚至几十个GB的数据其实算不上“大”,一般的SQL数据库即可处理。[↩](#reffn_1 "Jump back to footnote [1] in the text.")
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超链接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客户端请求
- 1.5.2 服务器应答
- 1.5.3 进一步了解HTTP
- 1.6 HTTPS
- 2 Web浏览器
- 2.1 HTML
- 2.1.1 文档类型声明
- 2.1.2 标签和属性
- 2.1.3 文档结构
- 2.1.4 DOM
- 2.1.5 进一步了解HTML
- 2.2 CSS
- 2.2.1 样式与样式表
- 2.2.2 样式表语法
- 2.2.3 级联样式表
- 2.2.4 进一步了解CSS
- 2.3 JavaScript
- 2.3.1 script标签
- 2.3.2 操纵DOM
- 2.3.3 jQuery
- 2.3.4 进一步了解JavaScript
- 2.4 Ajax
- 2.5 移动设备与响应式Web设计
- 3 Web服务器
- 3.1 方法与资源
- 3.2 状态代码
- 3.3 静态内容与动态内容
- 3.4 编程语言与技术
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服务器架构
- 3.7 Web缓存
- 3.8 服务器推送
- 4 数据库
- 4.1 关系型数据库
- 4.2 NoSQL数据库
- 5 Web服务器的其他组件
- 5.1 Cron
- 5.2 消息队列
- 5.3 邮件服务器
- 6 开发工具与技术
- 6.1 Git
- 6.1.1 Git基础操作
- 6.1.2 Git基本原理
- 6.1.3 进一步了解Git
- 6.2 敏捷开发