node.jsexpressgridfsgridfs-stream

Are there cons to using GridFS as a default with MongoDB?


I'm creating a RESTful API with node, express, and mongodb and the book I'm using as a reference recommends using GridFS (namely gridfs-stream) for cases where one needs to handle files larger than the MongoDB cut-off (16MB)

I'm not sure if my app will ever need to handle files that size, but I'm wondering if there are cons to using it anyways in case I may need that feature later.

Are there any cons (i.e. significant unnecessary performance penalties, stability issues) that I should be aware of to help make this decision?

I'm also open to suggestions for alternate file management solutions that you may have.

Thanks!


Solution

  • dont use Gridfs for small binary data GridFS requires two queries: one to fetch a file’s metadata and one to fetch its contents Therefore, if you use GridFS to store small files, you are doubling the number of queries that your application has to do. GridFS is basically a way of breaking up large binary objects for storage in the database. GridFS is for storing big data—larger than will fit in a single document. As a rule of best practice anything that is too big to load all at once on the client is probably not something you want to load all at once on the server. Therefore, anything you’re going to stream to a client is a good candidate for GridFS. Things that will be loaded all at once on the client, such as images, sounds, or even small video clips, should generally just be embedded in your main document

    Furthermore, if your files are all smaller the 16 MB BSON Document Size limit, consider storing the file manually within a single document instead of using GridFS. You may use the BinData data type to store the binary data. See your drivers documentation for details on using BinData.

    see https://docs.mongodb.com/manual/core/gridfs/

    please mark correct if this helped