天天看点

MongoDB

1、mongodb是一款强大、灵活、且易于扩展的通用性数据库。它的设计采用的是横向扩展。

面向文档的数据模型使它能很容易的在多台服务器之间进行数据分割。能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。这样,开发者能够集中精力编写应用程序,而不需要考虑如何扩展的问题。如果一个集群需要更大的容量,只需要向集群添加新服务器,mongodb就会自动将现有数据向服务器传送。

由于需要存储的数据量不断增长,开发者面临一个困难,应该如何扩展数据库。

纵向扩展:使用计算能力更强的机器(买性能更好的机器,但非常昂贵并且早晚还是会遇到数据极限)

横向扩展:通过分区将数据分散到更多机器上(购买服务器,但管理多台服务器较困难)

2、面向文档

MongoDB

3、区分类型、区分大小写、一个文档不能有重复的键、文档中的键值是有序的

4、文档:

db.testbylj.insert({"title":"my blog post","content":"here's my blog post."});

db.testbylj.find()

5、mongodb的文档与javascript的对象相近,类似于json,但json没有日期类型,只有一种数字类型,无法区分浮点数和整数,更别说区分32bit和64bit数字,mongodb在保留json基本键值对特性基础上,添加了其他一些数据类型。

6、limit、skip、sort、索引

7、特殊的集合和索引:

用于类队列数据的固定集合:capped collection,如果没有空间了,老的文档被删除,新的文档进去

用于缓存的ttl索引

用于存储大文件的gridfs:用来存储大型二进制文件,如果有一些不常改变但是经常需要连续访问的大文件,那么使用gridfs再合适不过了

8、想对数据库中的数据进行分析?,通过聚合工具:

一、聚合(aggregate)框架:eg排序(sorting)、限制(limiting)、跳过(skipping)

二、mapreduce

三、简单聚合命令:count、distinct、group

聚合框架:

eg:一个集合中有很多文档,key中有sourceip,想统计sourceip出现的次数,如下:

{"$project":{"sourceip":1}}, //将ip投射出来

{"$group":{"_id":"$sourceip","count":{"$sum":1}}}, //将ip排序,统计每个ip出现的次数

{"$sort":{"count":-1}}, //按照出现次数降序排列

{"$limit":5} //将返回结果限制为前5个

mapreduce:

是聚合工具中的明星,非常强大、灵活。有些问题无法使用聚合框架来弄的,可以用mapreduce,但它非常慢,不应该用在实时的数据分析中。它能够在多台服务器之间并行执行,将一个大问题拆分为多个小问题,将各个小问题发送到不同机器处理,再合并为一个完整的解决方案.

需要几个步骤:

2.1、映射(map):将操作映射到集合中的每个文档

2.2、洗牌:按照键分组,并将产生的键值组成列表放到对应的键中

2.3、化简(reduce):把列表中的值化简成一个单值,值返回,然后接着洗牌,直到只有一个值为止,这个值也是最终的结果

eg:找出集合中所有键:流程如附件

function map() {

for(var key in this){

 emit(key,{count:1});

}

function reduce(key, emits) {

total = 0;

for(var i in emits){

total +=emits[i].count;

return {"count":total};

9、副本集:如果只是开发,用单独服务器就可以了。但在生成环境,最好考虑用到副本集。

副本集:一组服务器,其中一个为主服务器,用于处理客户度请求,还有多个备份服务器,用于保存主服务器的数据副本,如果主服务崩溃了,备份服务器会自动将其中一个成员升级为新的主服务器。

默认情况下,驱动程序会将所有的请求都路由到主节点,但有些时候希望将读请求发送到备份节点,基于一致性、负载的考虑,不建议这样做。但如果希望应用程序在主节点挂掉时仍然能够执行读操作(不在意读到的数据是否是最新的),可以考虑这么做。从备份节点读取数据有一个常用的参数(nearest)是获得低延迟的数据。

如果某些读请求必须从主节点读取数据,那么对请求使用primary选项

如果某些读请求不要求数据是最新的,那么可以对请求使用secondary perfered

如果某些读请求对低延迟的要求大过一致性要求,那么可以使用nearest

10.主从模式

这种情况下,mongodb不会自动(可以手动)故障转移,而且要明确声明主节点和从节点。当副本集能够支持无限数据成员时候,主从模式可能会立即废除。两种情况下可以考虑用主从模式:

1、需要11台以上的备份节点

2、需要复制单个数据库

12、内存》固态磁盘》机械磁盘  (性能比较)