MongoDB_特殊集合&聚合&GridFS

  1. 固定集合:

    需要事先创建好并指定大小,固定集合的行为类似于循环队列,如果集合空间已满,新插入数据时,会将最老的文档删除。

    db.createCollection(“my_collection”,{“capped”:true,“size”:100000,“max”:100})

    以上创建了一个大小为100000字节,最大文档数量100的集合。固定集合的属性不能再被修改,只能将它删除。
    可以将已有常规集合转换为固定集合:

    db.runCommand({“convertToCapped”:“test”,“size”:10000})

    无法将固定集合转换为非固定集合

  2. 自然排序

    固定集合自然排序返回的结果是插入文档时的顺序,即从旧到新排列。当然也可以从新到旧排列:

    db.my_collection.find().sort({“$natural”:-1})

  3. 循环游标

    用于固定集合之上,循环游标上的结果集取光之后不会被关闭,超过10分钟没有新的结果时才会被释放。10分钟之内有新的数据插入时,循环游标会继续取到结果。

  4. 聚合框架

    ① 使用聚合框架可以对集合中的文档进行变换和组合。可以用多个构件创建一个管道,用于对一连串的文档进行处理。这些构件包括筛选“ match project”、分组“group”、排序“sort”、限制“limit”、跳过“$skip”。实际运行时要将这些操作分别传给aggregate()函数

    ② 有两个操作符不能用流式工作方式对文档进行处理:

    “$group”必须要等收到所有的文档之后,才能对文档进行分组,之后才能将各个分组发送给管道中的下一个操作符。这意味着在分片的情况下,“$group”会先在每个分片上执行,然后各个分片上的分组结果会被发送到mongos再进行最后的统一分组,剩余的管道工作也都是在mongos(而不是分片)上运行的
    “$sort”排序:强烈建议在管道的第一阶段进行排序,这时的排序操作可以使用索引。“$sort”也必须要接收到所有文档之后才能进行排序。先在各个分片上进行排序,然后将各个分片的排序结果发送到mongos做进一步处理
    

    ③“$unwind”可以将数组中的每一个值拆分成为单独的文档

    ④ MongoDB不允许单一的聚合操作占用过多的系统内存:如果某一个聚合操作占用了20%以上的内存,这个操作会直接输出错误

    ⑤ MapReduce:它能够在多态服务器之间并行执行,但它的速度比较慢,不应该在实时的数据分析中使用

    ⑥ 聚合命令:
    count()用于返回集合中的文档数量
    distinct()用于找出给定键的所有不同值
    完成器(finalizer)用于精简从数据库传到用户的数据
    将函数作为键使用:“$keyf”:function(x){ }

  5. 使用GridFS存储文件

    GridFS是MongoDB的一种存储机制,用来存储大型二进制文件。下面是使用GridFS作为文件存储的理由:
    ① 使用GridFS能够简化你的栈
    ② GridFS会自动平衡已有的复制或者为MongoDB设置的自动分片,所以对文件存储做故障转移或者横向扩展会更容易。
    ③ GridFS文件系统可以在同一个目录下存储大量的文件
    ④ GridFS中文件存储的集中度会比较高,因为MongoDB是以2GB为单位来分配数据文件的

    GridFS也有一些缺点:
    ① GridFS性能比较低:从MongoDB中访问文件,不如直接从文件系统中访问文件速度快
    ② 如果要修改GridFS上的文档,只能先将已有文档删除,然后再将整个文档重新保存。MongoDB将文件作为多个文档进行存储,所以它无法在同一时间对文件中的所有块加锁
    如果你有一些不常改表但是经常需要连续访问的大文件,那么使用GridFS再适合不过了。

  6. GridFS的使用

    最简单的方式是使用mongofiles工具,运行mongofiles –help就可以查看它的可用选项
    包括上传put、查看list、下载get、搜索search、删除delete等

    GridFS背后的理念是:
    可以将大文件分割为多个比较大的块,将每个块作为独立的文档进行存储。由于MongoDB支持在文档中存储二进制数据,所以可以将块存储的开销降到非常低。除了将每一个块单独存储之外,还有一个文档用于将这些块组织在一起并存储该文件的元信息

    GridFS中的块会被存储到专用的集合中,默认为fs.chunks。
    每个文件的元信息被保存在一个单独的集合中,默认为fs.files。这个集合中的每一个文档表示GridFS中的一个文件。该文档中,有几个键是GridFS规范规定必须要有的:

    “_id”:文件的唯一id,这个值就是文件的每个块文档中“files_id”的值
    “length”:文件所包含的字节数
    “chunkSize”:组成文件的每个块的大小
    “uploadDate”:文件被上传到GridFS的日期
    “md5”:文件内容的md5校验值,这个值由服务器端计算得到。用户可以通过检查文件的md5校验值来确保文件上传正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值