MongoDB C++ gridfs worked example

使用libmongoc,参考:http://mongoc.org/libmongoc/current/mongoc_gridfs_t.html

#include <mongoc.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

class MongoGridFS {
public:
    MongoGridFS(const char* db);
    ~MongoGridFS();

    void saveFile(const char* input_file_path, const char* filename);
private:
    mongoc_gridfs_t *gridfs;
    mongoc_client_t *client;
};

MongoGridFS::MongoGridFS(const char* db) {
    assert(db != NULL);
    mongoc_init ();
    /* connect to localhost client */
    client = mongoc_client_new ("mongodb://127.0.0.1:27017?appname=gridfs-example");
    assert (client);
    mongoc_client_set_error_api (client, 2);

    /* grab a gridfs handle in test prefixed by fs */
    bson_error_t error;
    gridfs = mongoc_client_get_gridfs (client, db, "fs", &error);
    assert (gridfs);
}

void MongoGridFS::saveFile(const char* input_file_path, const char* filename) {
    assert(input_file_path != NULL && filename != NULL);
    mongoc_stream_t *stream = mongoc_stream_file_new_for_path (input_file_path, O_RDONLY, 0);
    assert (stream);

    mongoc_gridfs_file_opt_t opt = {0};
    opt.filename = filename;

    /* the driver generates a file_id for you */
    mongoc_gridfs_file_t *file = mongoc_gridfs_create_file_from_stream (gridfs, stream, &opt);
    assert (file);

    mongoc_gridfs_file_save (file);
    mongoc_gridfs_file_destroy (file);
}

MongoGridFS::~MongoGridFS() {
     mongoc_gridfs_destroy (gridfs);
     mongoc_client_destroy (client);
     mongoc_cleanup ();
}

int
main (int argc, char *argv[])
{
    MongoGridFS gridfs("test2gridfs");
    gridfs.saveFile("test.py", "test.py");
    return 0;
}
时间: 2024-11-05 21:52:26

MongoDB C++ gridfs worked example的相关文章

MongoDB之GridFS存储文件

1.MongoDB 的 GridFS 详细分析 GridFS简介 GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件. http://www.mongodb.org/display/DOCS/GridFS http://www.mongodb.org/display/DOCS/GridFS+Specification GridFS使用 MongoDB提供了一个命令行工具mongofiles可以来处理GridFS,在bin目录下. 列出所有文件: mongofiles list

MongoDB 进阶(GridFS)

?? GridFS是一种在MongoDB中存储大二进制文件的机制.使用GridFS存文件有如下几个原因: ● GridFS可以简化需求.如果已经用了MongoDB,GridFS就可以不需要独立的文件存储架构. ● GridFS利用已经建立的复制和分片机制,所以对于文件存储来说故障恢复和扩展都很容易. ● GridFS可以避免用于存储用户上传内容的文件系统出现的某些问题.例如:GridFS在同一目录下放置大量文件是没有任何问题的. ● GridFS不产生磁片,因为MongoDB分配的数据文件空间以

【MongoDB学习笔记28】MongoDB的GridFS存储机制

GridFS作为MongoDB的存储机制,用来存放二进制大文件: GridFS有以下优点: (1)使用GridFS简化存储栈,在MongoDB中替代独立的存储工具: (2)GridFS会自动平衡已有的复制和自动分片,对文件存储做故障转移挥着横向扩展会更容易: (3)MongoDB中以2GB的大小来分配数据文件,在GridFS中文件存储集中度会比较高: GridFS当然也有缺点: (1)从GridFS中读取文件没有直接从文件系统中快: (2)修改存放在GridFS中的文档,只有先删除就文档然后从新

【MongoDB学习笔记29】MongoDB的GridFS存储深入

GridFS的原理是将大文件分割为多个比较大的块,将每个块作为独立的文档进行存储. (1)GridFS中的块会被存贮到专用的集合中,默认为fs.chunks; (2)除了将文件的每一个块单独存储外,还需要将每个文件块的元信息放入一个文档存储,并将这些文档默认集中在fs.files集合中: 例如将foo.txt文档加入到数据库foo中: [[email protected] ~]# echo "hello world" >foo.txt    [[email protected] 

实验mongodb使用gridfs存放一个大文件

1.启动mongoDB 2.使用gridfs存放大文件 3.观察fs.chunks和fs.files的情况 命令 db.fs.chunks.find()查到的是一些二进制文件:

MongoDB GridFS最佳应用概述

<MongoDB GridFS最佳应用概述> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs GridFS是MongoDB数据库之上的一个简单文件系统抽象.如果你熟悉Amazon S3的话,那么GridFS与之相似.为什么像MongoDB这样的NoSQL数据库会提供这样的一个文件层抽象呢? 一.使用GridFS的理由 理由如下: 1)存储用户产生的文件内容 大多数Web应用都允许用户上传文件.当用户使用关系数据库时,这些用户产生的文件会存储在文件系

MongoDb GridFS的使用

MongoDb GridFS 是MongoDB的文件存储方案,主要用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频等),对大文件有着更好的性能. 要在C#中使用GridFS,首先安装Nuget包: MongoDB.Driver.GridFS Bucket GridFS中的数据也是分集合存储的,每个集合叫一个bucket,每个bucket里面可以存储多个文件: 在C#中使用bucket和使用集合差不多,创建一个GridFSBucket对象即可. var bucket = ne

MONGODB全面总结

关于Mongodb的全面总结,学习mongodb的人,可以从这里开始! 分类:            MongoDB2013-06-08 09:5610213人阅读评论(0)收藏举报 目录(?)[+] BSON 效率 传输性 性能 写入协议 数据文件 名字空间和盘区 内存映射存储引擎 其他 MongoDB的架构 MongoDB的特点 MongoDB的功能 MongoDB的局限性与不足 适用范围 MongoDB的不适用范围 要点 MongoDB分布式复制 MongoDB语法与现有关系型数据库SQL

MongoDB初探系列之二:认识MongoDB提供的一些常用工具

在初探一中,我们已经可以顺利的将MongoDB在我们自己的机器上跑起来了.但是在其bin目录下面还有一些我们不熟知的工具.接下来,将介绍一下各个小工具的用途以及初探一中MongoDB在data文件夹下创建的文件的用途. 1.bin目录下面的各种小工具简介及使用方式 bsondump.exe 用于将导出的BSON文件格式转换为JSON格式mongo.exe mongoDB的客户端 mongod.exe 用于启动mongoDB的Server mongodump.exe 用于从mongodb数据库中导