sql >> Databasteknik >  >> NoSQL >> MongoDB

Frågar du MongoDB GridFS?

GridFS fungerar genom att lagra ett antal bitar för varje fil. På så sätt kan du leverera och lagra mycket stora filer utan att behöva lagra hela filen i RAM. Detta gör att du också kan lagra filer som är större än den maximala dokumentstorleken. Den rekommenderade chunkstorleken är 256kb.

Filmetadatafältet kan användas för att lagra ytterligare filspecifik metadata, vilket kan vara mer effektivt än att lagra metadata i ett separat dokument. Detta beror mycket på dina exakta krav, men metadatafältet erbjuder i allmänhet mycket flexibilitet. Tänk på att en del av de mer uppenbara metadata redan är en del av fs.files dokument, som standard:

> db.fs.files.findOne();
{
    "_id" : ObjectId("4f9d4172b2ceac15506445e1"),
    "filename" : "2e117dc7f5ba434c90be29c767426c29",
    "length" : 486912,
    "chunkSize" : 262144,
    "uploadDate" : ISODate("2011-10-18T09:05:54.851Z"),
    "md5" : "4f31970165766913fdece5417f7fa4a8",
    "contentType" : "application/pdf"
}

För att faktiskt läsa filen från GridFS måste du hämta fildokumentet från fs.files och bitarna från fs.chunks . Det mest effektiva sättet att göra det är att streama detta till klienten bit för bit, så att du inte behöver ladda hela filen i RAM. chunks samlingen har följande struktur:

> db.fs.chunks.findOne({}, {"data" :0});
{
    "_id" : ObjectId("4e9d4172b2ceac15506445e1"),
    "files_id" : ObjectId("4f9d4172b2ceac15506445e1"),
    "n" : 0, // this is the 0th chunk of the file
    "data" : /* loads of data */
}

Om du vill använda metadata fältet fs.files för dina frågor, se till att du förstår punktnotationen, t.ex.

> db.fs.files.find({"metadata.OwnerId": new ObjectId("..."), 
                    "metadata.ImageWidth" : 280});

Se också till att dina frågor kan använda ett index med explain() .



  1. Mongodb, sharding och flera fönstertjänster

  2. MongoDB vs. Cassandra

  3. Returnerar inre arrayelement från flera dokument i sorterad form

  4. Ta bort database.yml när du använder Mongoid i Rails 3.2