从 cfs:gridfs 迁移到 cfs:s3

Migrating from cfs:gridfs to cfs:s3

在一个流星项目中,我认为有理由考虑从 gridfs 作为后端转移到 CollectionFS 并转向 s3

我很想做的一件事是迁移当前使用 gridfs 集合存储的图像/文件。

以前有人尝试过吗?我找不到任何指南甚至建议。

我现在的想法是:

  1. 创建一个由 s3 支持的新集合
  2. 迭代旧集合将数据推送到 s3
  3. 更新代码以指向新集合

这听起来合理吗?

我刚刚做到了!

你基本上是对的,这就是我的做法。迁移是一个非常简单的过程。我已经从 GridFS 转到 S3。

1) 通过添加new FS.Store.S3("store_name",{}),CollectionFS 会自动为您的新商店克隆旧商店中现有文件的元数据。但是,这个新商店中的所有文件大小都是零。

Images = new FS.Collection("images", {
    stores: [
        new FS.Store.S3("s3images", {}),
        new FS.Store.GridFS("images", {})
    ]
});

2) 当您同时拥有两个商店时,您需要使用此处引用的管道手动迁移内容 https://github.com/CollectionFS/Meteor-CollectionFS/wiki/How-to:-Convert-a-file-already-stored

if(Meteor.isServer) {
Images.find().forEach(function (fileObj) {
var readStream = fileObj.createReadStream('images');
var writeStream = fileObj.createWriteStream('s3images');
readStream.pipe(writeStream);
});
}

希望在此之后您会看到新商店的文件大小与旧商店的文件大小相匹配!

3) (可选)删除旧商店。如果同时保留两者,则插入的文件将同时添加到两者中,并优先考虑数组中的第一个存储。

参考:https://github.com/CollectionFS/Meteor-CollectionFS/issues/747