13.MongoDB之Gridfs

article/2025/10/14 8:59:33

参照官网如下(如下链接依次递进):

https://docs.mongodb.com/manual/core/gridfs/
https://docs.mongodb.com/database-tools/mongofiles/#mongodb-binary-bin.mongofiles
https://docs.mongodb.com/database-tools/installation/installation/

FS:即文件系统(File System)。

GridFS简介。

      MongoDB中的文档(数据)是以BSON格式存储的,由于BSON的限制只能存储16M以下的数据;为了应对这个问题Mongodb提供了GridFS子模块,他可以存储大于16M的文件。GridFS是一种将大型文件存储在MongoDB的文件规范。所有官方支持的驱动均实现了GridFS规范。

注:实际上小于16M的可以直接用MongoDB的bson存就好了,大于16M的才需要借助Gridfs。

        GridFS使用两个集合来存储文件:fs.files与fs.chunks。其中fs.files集合存放文件的信息,fs.chunks存放文件的数据。GridFS会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk作为Mongodb的一个文档存储在chunks集合中。

mongofiles工具

        mongofiles可执行程序提供了命令行操作存储在GridFS对象中MongoDB实例中的文件,它提供了存储在文件系统中的对象和GridFS之间的接口。由官网知道从MongoDB4.4开始,mongofiles现在与MongoDB服务器分开发布,并使用自己的版本控制,初始版本为100.0.0。以前,mongofiles与MongoDB服务器一起发布,并使用匹配的版本控制。关于工具的安装,参见官网即可。

mongofiles的使用方法主要参见 --help,如下:

 为了方便使用这里专门提供两条实例命令行语句:

./mongofiles --uri='mongodb://mongouser:qidian%40weixin@11.186.6.xxx:27017' --db db_shuozhuo put service.yaml./mongofiles --host 11.186.6.xxx:27017 -u mongouser -p wexin@mongo -d db_shuozhuo put build_vs_env.sh

验证上传是否成功的方法也很简单。一是看执行后的输出,二看目标db是否有对应的条目。如下图可以看到两个集合实际上都存了什么东西。

一些思考。

        虽然gridfs可以存文件意味着业务可以不用额外引入其他文件存储(如cos)、另外还有易于横向扩展等优点。但个人感觉gridfs这东西不是很实用。首先是成本方面。对于图片、文件直接用专门的 对象存储(cos)更专业的同时成本还低,用数据库显得不是那么自然。另外就是性能方面。从mongodb访问文件比直接从文件系统访问文件速度慢(中间层开销)。此外如果要修改GridFs上的文档必须要先删除在整个重新保存。

看了下网上其他人也有类似的观点:这里  如果做文件系统的话最好用专业的。比如TFS(Taobao File System,针对大量随机访问小图片)、FastDFS、mooseFS等。

        当然对于玩耍类的小项目应该还是有意义的,例如只用MongoDB一款数据库即能存消息、也能存文件、还能充当redis,一个数据库就能满足所有需求,简化工程代码、大大降低同各种存储打交道的成本。


http://chatgpt.dhexx.cn/article/PXsnnb8O.shtml

相关文章

MongoDB(四)——GridFS

GridFS MongoDB的一个重要子模块,可基于MongoDB来持久存储文件,并且支持分布式存储和读取。 持久存储:对应瞬时数据如内存,指保存到数据库中,能持久保存。 分布式存储:将数据分散地存储于多个位置。 存在的…

在Keil MDK中无法使用gmtime函数进行时间戳转换

硬件平台STM32&#xff0c;软件平台Keil MDK 5.18 由于项目中需要用到UNIX时间戳和日历的来回转换&#xff0c;于是想到C库函数<time.h>里面有现成的函数可以使用。 于直接使用mktime和gmtime两个函数进行时间戳转换&#xff0c;前者把日历转为时间戳&#xff0c;后者把…

C++中获取日期函数gmtime和localtime区别

函数gmtime和localtime的声明如下&#xff1a; struct tm * gmtime (const time_t * timer); struct tm * localtime (const time_t * timer); 它们均接收一个time_t的const指针类型&#xff0c;time_t类型通常是一个大整数值&#xff0c;该整数值表示自UTC时间1970年1月1日0…

C语言学习笔记---时间函数ctime()和gmtime()

函数原型如下&#xff1a; __CRT_INLINE char *__cdecl ctime(const time_t *_Time);__CRT_INLINE struct tm *__cdecl gmtime(const time_t *_Time);ctime函数 ctime函数可以将当前时间值转换为字符串格式返回。返回的字符串格式为&#xff1a;Www Mmm dd hh:mm:ss yyyy 其中&…

Linux系统编程一:时间和延时、gmtime和localtime函数返回相同

目录 1. 概述2. 延时函数3. 当前时间3.1 时间调用函数3.2 时间转换函数 4. gmtime和localtime函数返回相同测试代码 1. 概述 前面的几篇文章Linux学习笔记一到七&#xff0c;主要是开发环境的搭建&#xff0c;都是一些准备工作。从本篇文章开始&#xff0c;将学习Linux系统编程…

逆向 time.h 函数库 time、gmtime 函数

0x01 time 函数 函数原型&#xff1a;time_t time(time_t *t)函数功能&#xff1a;返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间&#xff0c;以秒为单位。如果 seconds 不为空&#xff0c;则返回值也存储在变量 seconds 中C\C 实现&#xff1a; #include <stdio.…

python gmtime_在Python中操作日期和时间之gmtime()方法的使用

在Python中操作日期和时间之gmtime()方法的使用 这篇文章主要介绍了在Python中操作日期和时间之gmtime()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 gmtime()方法转换历元到一struct_time以UTC其中dst的标志值始终为0以秒表示时间。如果不设置秒时或None&a…

gmtime与localtime的区别

目录 gmtime函数 linux环境下&#xff1a; window环境下 localtime函数 gmtime函数 gmtime转换的时间是UTL时间&#xff0c;与北京时间相差了8个小时 如果你想要得到北京时间&#xff0c;不建议你将gmtime转换后的时间直接加上八个小时 linux环境下&#xff1a; 执行结…

【C库函数】strerror函数详解

目录 strerror 函数原型 参数详解 返回值详解 函数讲解 strerror 返回错误码&#xff0c;所对应的错误信息 函数原型 char *strerror( int errnum ); 参数详解 参数errnum解析错误码信息(errno) 返回值详解 strerror函数就是返回这些错误码所对应错误信息的字符串起始地…

详解:strerror函数:将错误码转化为错误信息

对于大家在浏览网页的时候&#xff0c;或多或少的会见识过不少的错误信息&#xff1a;比如&#xff1a;最常见的就是&#xff1a;404 但是&#xff0c;使用strerror函数&#xff0c;可以将错误码转化为错误信息&#xff01;不知道偶然间看见的读者是否有兴趣进行深入研究一下&…

Strerror函数和Perror函数的介绍及使用

Strerror 通过标准错误的标号&#xff0c;获得错误的描述字符串 &#xff0c;将单纯的错误标号转为字符串描述&#xff0c;方便用户查找错误。 需要引用的头文件 #include <errno.h> #include <string.h> 用法&#xff1a;如果调用函数失败&#xff0c;会产生错误码…

strerror函数使用

。 char *strerror(int errnum); 功能&#xff1a;通过标准错误的标号&#xff0c;获得错误的描述字符串 &#xff0c;将单纯的错误标号转为字符串描述。 参数&#xff1a;errnum&#xff1a;最新的错误标号。 返回值&#xff1a;指向错误信息的指针。#include <stdio.h>…

Linux 应用编程之strerror函数

在 Linux 系统下对常见的错误做了一个编号&#xff0c;每一个编号都代表着每一种不同的错误类型&#xff0c;当函数执行发生错误的时候&#xff0c;操作系统会将这个错误所对应的编号赋值给 errno 变量&#xff0c;每一个进程&#xff08;程序&#xff09;都维护了自己的 errno…

C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()

C语言函数&#xff1a; 字符串函数及模拟实现strtok()、strstr()、strerror() strstr()函数: 作用&#xff1a;字符串查找。在一串字符串中&#xff0c;查找另一串字符串是否存在。 形参: str2在str1中寻找。返回值是char*的指针 原理&#xff1a;如果在str1中找到了str2&…

【strerror函数的使用】

strerror函数的使用 一&#xff0c;说明二&#xff0c;具体使用场景 一&#xff0c;说明 strerror会返回错误码&#xff0c;我们可以将其翻译成所对应的错误信息&#xff1b; c语言的库函数在运行的时候&#xff0c;如果发生错误&#xff0c;就会将错误码存放在一个变量中&…

strerror 函数

收藏 75 23 strerror编辑 本词条缺少 名片图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来 编辑吧&#xff01; 通过标准错误的标号&#xff0c;获得错误的描述字符串 &#xff0c;将单纯的错误标号转为字符串描述&#xff0c;方便用户查找…

strerror函数介绍

认识strerror 库函数调用失败的时候会产生错误码&#xff0c;而每一个错误码对应着一条错误信息&#xff0c;strerror函数的作用就是将错误码给转化成错误信息。 在C语言中有一条全局的错误码errno&#xff0c;在程序运行过程中&#xff0c;只要库函数调用失败&#xff0c;我们…

strerror perror

strerror这个函数把错误码转化为错误信息,把错误信息的起始地址返回 X86下的代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() { printf("%s\n", strerror(0)); printf("%s\n", strerror(1…

关于strerror

1功能 strerror用于返回错误码信息的首字符的地址。 可以这样理解&#xff0c;函数运行过程中如果失败的话&#xff0c;会返回一个错误码放在errno中&#xff0c;&#xff08;原先设计中就已经存在的&#xff09;调用strerror函数的话&#xff0c;可以打印对应的错误信息 2 …

Multipass虚拟机入门教程

目录 一、Multipass介绍 二、Multipass的安装 1. 系统版本 2. 下载地址和官网教程 3. 安装 4. 查看版本并测试是否安装成功 5. 若启动失败 三、Multipass的简单使用 1. 设置虚拟化提供方式&#xff08;忽略该步骤&#xff09; 2. 创建名为test虚拟机&#xff0c;分配…