首页 > 数据库 >6.MongoDB系列之特殊索引和集合类型

6.MongoDB系列之特殊索引和集合类型

时间:2022-10-16 13:56:47浏览次数:73  
标签:文件 存储 MongoDB 索引 文档 GridFS 集合

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:[email protected]: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": { }
}

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

标签:文件,存储,MongoDB,索引,文档,GridFS,集合
From: https://www.cnblogs.com/shenjian-online/p/16796095.html

相关文章

  • 1.MongoDB之服务启动
    1.编写docker-compose.yaml文件version:"3"services:mongo:image:mongo:4.2.6ports:-27017:27017volumes:-./data:/data/db:rw-......
  • 2.MongoDB系列之创建更新删除文档
    1.插入文档//单条插入db.getCollection('blog').insertOne({'type':'mongodb'})//批量插入db.getCollection('blog').insertMany([{'type':'elasticsearch'},{'......
  • 4.MongoDB系列之索引(一)
    1.执行计划查看db.getCollection('users').find({'username':'shenjian'}).explain('executionStats')结果查看,先大致看一遍,后续慢慢来深入理解{"queryPlanner"......
  • 3.MongoDB系列之查询
    1.find简介//查询所有文档db.users.find({})//查询指定条件文档db.users.find({'name':'shenjian'})//查询指定字段,1查询键0剔除键db.users.find({'name':'sh......
  • 5.MongoDB系列之索引(二)
    1.$运算符如何使用索引1.1低效的运算符$ne、$not查询可以使用索引,但不是很有效,尽量避免1.2范围查询范围查询其实是多值查询,根据复核索引规则,尽可能先等值精确匹配,然......
  • mongodb基础整理篇————副本概念篇[外篇]
    前言副本集整理。开始逐步把mongodb博客补齐了。正文什么是副本集副本集是一组服务器,其中一个是用于处理写入操作的主节点,还有多个用于保存主节点的数据副本的从节点......
  • 集合—HashSet
    HashSet和ArrayList区别:HashSet无序不可重复,ArrayLIst有序可重复HashSet(无序不重复)1.add方法//以下会去掉重复值hashSet.add(100);hashSet.add(100);System.out.p......
  • MongoDB笔记
    MongoDB笔记非关系型数据库中的文档数据库本质就是存各种各样的JSON(数据库(集合(文档)))(数据库(集合(文档)))安装使用步骤:--下载安装--将bin文件目录添加到path路径--在C盘根......
  • Mysql单表访问方法,索引合并,多表连接原理,基于规则的优化,子查询优化
    参考书籍《mysql是怎样运行的》非常推荐这本书,通俗易懂,但是没有讲mysql主从等内容书中还讲解了本文没有提到的子查询优化内容,本文只总结了常见的子查询是如何优化的系......
  • 索引基本操作
    索引格式PUT/my_index{ ##settings用来设置分片,副本等信息"settings":{...anysettings...},##字段映射,类型,分词器等 "mappings":{"p......