1.1 什么是NoSQL
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
1.2 为什么使用NoSQL
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
随着互联网 web2.0 网站的兴起,传统的关系数据库在应付 web2.0 网站,特别是超大规模和高并发的 SNS 类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
1.3 RDBMS vs NoSQL
RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
1.4 NoSQL 简史
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from
real_world where relational=false;"。因此,对NoSQL最普遍的解释是"非关联型的",强调Key-
Value Stores和文档数据库的优点,而不是单纯的反对RDBMS
1.5 NoSQL 产品
常见的NoSQL产品:redis、memcache、mongdb等
NoSQL 产品的显著特点:
1、NoSQL产品一般不使用严格的表关系;
2、NoSQL产品的数据查询一般不用在sql上;
NoSQL Databases List by Hosting Data - Updated 2022
1.6 NoSQL数据库的分类
键值数据库
相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
应用:内容缓存
优点:扩展性好、灵活性好、大量写操作时性能高
缺点:无法存储结构化信息、条件查询效率较低
使用者:百度云(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和
Memcached)
列族数据库
相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS
应用:分布式数据存储与管理
优点:查找速度快、可扩展性强、容易进行分布式扩展、复杂性低
使用者:Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、
Facebook(HBase)
文档数据库
相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit
应用:存储、索引并管理面向文档的数据或者类似的半结构化数据
优点:性能好、灵活性高、复杂性低、数据结构灵活
缺点:缺乏统一的查询语言
使用者:百度云数据库(MongoDB)、SAP(MongoDB)
图形数据库
相关产品:Neo4J、OrientDB、InfoGrid、GraphDB
应用:大量复杂、互连接、低结构化的图结构场合,如社交网络、推荐系统等
优点:灵活性高、支持复杂的图形算法、可用于构建复杂的关系图谱
缺点:复杂性高、只能支持一定的数据规模
使用者:Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)
NoSQL 数据库分类
类型 | 部分代表 | 特点 |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
key-value存储 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 | db4o Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
文档存储 | MongoDB CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
xml数据库 | Berkeley DB XML BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如 XQuery,Xpath。 |
1.7 谁在用
现在已经有很多公司使用了 NoSQL:
- Mozilla
- Adobe
- Foursquare
- Digg
- McGraw-Hill Education
- Vermont Public Radio
NoSQL 在国内使用的案例
1、新浪微博
目前新浪微博是 Redis 全球最大的用户。 在新浪有 200 多台物理机在运行着 Redis, 有大量的数据跑在 Redis 上来为微博用户提供服务。
新浪 NoSQL 和 MySQL 在大多数情况下是结合使用的, 根据应用的特点选择合适的存储方式。 关系型数据, 如索引使用 MySQL 存储。 非关系数据库, 例如: 一些 K/V 需求的,对并发要求比较高的放入Redis 存储。
2 、淘宝数据平台
淘宝网拥有国内最具商业价值的海量数据。 截至当前, 每天产生超过 30 亿的店铺及商品浏览记录, 10亿在线商品数, 上千万的成交、 收藏和评价数据。 如何从这些数据中挖掘出真正的商业价值, 进而帮助淘宝和商家进行企业的数据化运营, 帮助消费者进行理性的购物决策, 是淘宝数据平台与产品部的使命。
淘宝 Tair 是由淘宝自主开发的 Key/Valiie 结构数据存储系统, 并且于 2010 年 6 月 30号在淘宝开源平台上正式对外幵源, 在淘宝网有着大规模的应用。
3 、视觉中国网站
在“ 视觉中国” 成立之初, 他们选用的数据库是 MySQLo 2009 年之后他们才选用了MongoDB 作为系统的支撑数据库
4、优酷运营数据分析
目前优酷的在线评论业务已部分迁移到 MongoDBo 运营数据分析及挖掘处理目前在使用 Hadoop/HBase。
在 Key-Value 产品方面, 它也在寻找更优的 Memcached 替代品, 如Redis。 相对Memcached,除 了 对 Value 的存储支持三种不同的数据结构外, 同一个 Key的 Value 进行部分更新也会更适合一些对 Value 频繁修改的在线业务。 同时在搜索产品中应用了Tokyo Tyrant。