1. 地理空间索引及全文搜索

与Elasitcsearch一样,MongoDB同样支持地理空间索引及全文搜索,由于选型常用ES而非MongoDB此处略过

2. TTL索引

首先先了解下固定集合,其类似于循环队列 ,当满的时候,最旧的文档会被覆盖。而TTL索引允许允许为每个文档设置一个超时时间,当一个文档过期时就会被删除。这种类型的索引对于类似会话保存这样的缓存场景非常有用。

//  设置TTL索引,过期时间为24小时
db.getCollection('sessions').createIndex({'lastUpdated': 1}, {'expireAfterSeconds': 60*60*24})
3. 使用GridFS存储文件

GridFS是MongoDB存储大型二进制文件的一种机制

优点:

  • 使用GridFS能够简化技术栈, 如果项目已在使用MongoDB,呢么可以使用GridFS代替独立的文件存储工具
  • GridFS可以利用MongoDB已经设置好的复制或自动分片机制,因此实现故障转移与横向扩展容易些
  • GridFS没有在同一个目录下存储大量文件的问题

缺点:

  • 性能比较低。不如 从文件系统访问文件速度快
  • 修改文档,需要先删除,后重新保存。因为MongoDB会将文件作为多个文档进行存储,无法对同一文件的所有块进行枷锁
3.1 GridFS存储示例

可以使用mongofile进行上传查看

mongofiles --uri mongodb://admin:admin@127.0.0.1:27017/study?authSource=admin -l ok.txt put ok.txt

2022-07-09T16:11:52.620+0800    connected to: mongodb://[**REDACTED**]@127.0.0.1:27017/study?authSource=admin
2022-07-09T16:11:52.750+0800 added gridFile: ok.txt
3.2 GridFS底层机制

GridFS背后的理念是将大文件分割为多个,并将每个块作为独立的文档进行存储。文档的结构如下

{
// 块唯一ID
"_id": ObjectId("..."),
// 块在文件中的相对位置
"n": 0,
// 块所包含的二进制数据
"data": BinData("..."),
// 此块所属文件元数据的文档ID
"files_id": ObjectId("...")
}

每个文件的元数据保存在一个单独的集合中,默认情况下是fs.files,可以执行db.fs.files.find({})查看结果

{
// 文件的唯一ID
"_id": ObjectId("62c93848cf13162ba9c71cad"),
// 文件总字节数
"length": NumberLong("2"),
// 组成文件的每个块的大小
"chunkSize": NumberInt("261120"),
// 上传时间
"uploadDate": ISODate("2022-07-09T08:11:52.747Z"),
"filename": "ok.txt",
"metadata": { }
}

欢迎关注公众号算法小生沈健的技术博客

6.MongoDB系列之特殊索引和集合类型的更多相关文章

  1. MongoDB系列四(索引).

    一.索引简介 再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似.有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,这能使查找速度提高 ...

  2. Mongodb 笔记04 特殊索引和集合、聚合、应用程序设计

    特殊索引和集合 1. 固定集合:固定集合需要事先创建好看,而且它的大小是固定的.当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除. 2. 创建固定集合:db.createC ...

  3. Scala 系列(六)—— 常用集合类型之 List & Set

    一.List字面量 List 是 Scala 中非常重要的一个数据结构,其与 Array(数组) 非常类似,但是 List 是不可变的,和 Java 中的 List 一样,其底层实现是链表. scal ...

  4. Scala 系列(七)—— 常用集合类型之 Map & Tuple

    一.映射(Map) 1.1 构造Map // 初始化一个空 map val scores01 = new HashMap[String, Int] // 从指定的值初始化 Map(方式一) val s ...

  5. MongoDB系列一(索引及C#如何操作MongoDB)

    索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureIndex({"username": ...

  6. 4.MongoDB系列之索引(一)

    1. 执行计划查看 db.getCollection('users').find({'username': 'shenjian'}).explain('executionStats') 结果查看,先大 ...

  7. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  8. MongoDB学习笔记-04 索引

    索引是用来加速查询的.有了索引之后,数据库不必进行全表扫描,只需先在索引中查找,再根据找到的索引查找数据.MongoDB的索引几乎和传统关系型数据库一样. 创建索引 创建索引是在相应的集合中使用ens ...

  9. 【mongoDB中级篇②】索引与expain

    索引的操作 数据库百分之八十的工作基本上都是查询,而索引能帮我们更快的查询到想要的数据.但是其降低了数据的写入速度,所以要权衡常用的查询字段,不必在太多字段上建立索引. 在mongoDB中默认是用bt ...

随机推荐

  1. 关于Tornado5.1:到底是真实的异步和还是虚假的异步

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_107 我们知道Tornado 优秀的大并发处理能力得益于它的 web server 从底层开始就自己实现了一整套基于 epoll ...

  2. GTID主从和lamp架构运行原理

    目录 GTID主从 GTID概念介绍 GTID工作原理 GTID主从配置 lamp lamp简介 web服务器工作流程 cgi与fastcgi http协议 是什么? lamp架构运行的原理 Apac ...

  3. placeholder 设置字体颜色

    input::-webkit-input-placeholder { /* WebKit browsers */ color: #999; } input:-moz-placeholder { col ...

  4. 2019国家集训队论文《整点计数》命题报告 学习笔记/Min25

    \(2019\)国家集训队论文<整点计数>命题报告 学习笔记/\(Min25\) 补了个大坑 看了看提交记录,发现\(hz\)的\(xdm\)早过了... 前置知识,\(HAOI\)< ...

  5. Java学习第七周

    这周学习了集合,stream流等知识 List集合 – List系列集合:添加的元素是有序,可重复,有索引 1.ArrayList: 添加的元素是有序,可重复,有索引 2.LinkedList: 添加 ...

  6. 搭建 Webpack 项目步骤

    前言 Node.js 就像是 Java 的虚拟机 + JDK,可以让 js 脱离浏览器沙盒,且提供模块机制.I/O 操作.数据库操作.网络操作等.Node.js 又提供了大量的库,NPM(类似于 Ma ...

  7. CSS3(一)

    (一)CSS简介 CSS主要用来美化页面.布局页面 1.HTML的局限性 HTML主要是做结构,显示元素内容.只关注内容,但是丑.虽然可以做简单的样式,但是非常臃肿和繁琐 2.CSS网页的美容师 CS ...

  8. springBoot项目实现发送邮件功能

    需要的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  9. grub2配置文件丢失如何修复

    实验操作准备 此步骤因实验需要所做,系统开机属grub界面无需此步! lsblk命令为了查看根分区挂载在什么位置 rm -rf /boot/grub2/grub.cfg命令为删除grub2配置文件到达 ...

  10. Controller以及RestFul风格

    Controller以及RestFul风格 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方式实现 控制器负责解析用户的请求并将其转换为一个模型 在Spr ...