NoSql简介 - morris131/morris-book GitHub Wiki
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDMBS)来处理。通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
- 模式自由, 不需要定义表结构,数据表中的每条记录 都可能有不同的属性和格式。
- 逆范式化, 不遵循范式要求,去掉完整性约束,减少 表之间的依赖。
- 多分区存, 数据进行分区,将记录分散到多个节点上。
- 弹性可扩展, 可在系统运行过程中,动态增 加和删除节点,数据自动平衡 移动。
- 多副本异步复制, 数据快速写入一个节点,其余 节点通过读取写入节点日志来 实现异步复制。
- 软事务, 不能完全满足事务的ACID特性,保证事务 的最终一致性。
类型 | 典型代表 | 应用场景 | 数据模型 | 优点 | 缺点 |
---|---|---|---|---|---|
键值 | Redis | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等 | Key指向Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列式 | HBase | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档 | MongoDB | Web应用 | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法 |
图形 | Neo4J | 社交网络,推荐系统等。 | 专注于构建关系图谱、图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案 |