NoSQL简介
关系型数据库(relational database)从20世纪八十年代兴起,一直处于主流地位,它能保证数据的持久性、一致性,并且使用SQL进行数据库操作。关系型数据库表之间的关系需要用户自己进行设计,比如一个购物网站上客户Ann的购买信息其实需要用多个表进行存储,比如用户表、订单表等。所以我们查询用户Ann的所有信息时就需要查找不同的表,最后对所有查到的信息进行整合。
现在非常火热的是NoSQL数据库,NoSQL名字的来源其实是twitter上的一个tag, 现在一般解读为“Not Only SQL”,但它本身并没有确切的含义。NoSQL数据库包含很多种类:
-
key-value类:例如redis, riak
-
document类:例如mongoDB, couchDB
-
column-family类:例如HBase, Cassandra
key-value类本身还是key-value的关系,根据一个key得到value;doucument类是基于文档的,将一个文档的数据放在一起,根据文档ID进行查询;column-family类是从Google著名三篇论文之一Google File System衍生出来的,是通过行和列组成一个key进行查询。
这三种类型都属于聚合型数据库,即对于一个key,相关的所有信息是存在一起的。这就和关系型数据库不同,现在如果我们需要知道Ann的所有信息,我们只需要在一个地方查询就可以了。
相比于关系型数据库,我们免除了设计表之间的逻辑的烦恼,使用起来更加轻松自由,但是因为数据是按照一种方法聚集的,如果当你想要用另一种方法来聚集的时候就会很麻烦。举个例子,我们用NoSQL存储博客上的所有文章,这些文章会按照文章ID进行存储,所有关于这个文章ID的信息,比如作者,时间,评论等都聚合在这个文章ID下。
那么如果你需要找到一个作者写的所有文章该怎么办呢?直观来说并没有很好的方法,因为所有文章都是按照文章ID存储的而不是按照作者存储的,于是就想到我们可以用MapReduce来解决。可以这么说,关系型数据库天然地携带着MapReduce的需求。所以我们可以通过查询数据的需求来选择是用关系型数据库还是用聚合型数据库。如果你只需要查询一种聚合方式,那么聚合型数据库是非常好的选择。
作者:Mingche Su
链接:http://zhuanlan.zhihu.com/p/20697807
来源:知乎
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/4961/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料