Sharding GridFS на MongoDB
Я документирую GridFS и возможность очертить его между разными машинами.
Считывая документацию здесь, предлагаемый осколочный ключ - chunks.files_id. Этот ключ будет связан с _id коллекции файлов, таким образом, этот _id является инкрементным. Каждый новый файл, который я сохраняю в Grid, будет иметь новый инкрементный _id.
В книге O'Reilly "Scaling MongoDB" использование инкрементного ключа осколка не рекомендуется, чтобы избежать HotSpots (последний осколок получит все записи и чтение).
Каково ваше предложение по сборке коллекции GridFS?
Кто-нибудь испытал проблему с HotSpot?
спасибо.
Ответы
Ответ 1
Вы должны окопаться на files_id
, чтобы объединить фрагменты файлов, но вы правы, что это создаст точку доступа. Если вы можете, используйте что-то другое, кроме ObjectId для _id
в коллекции fs.files(вероятно, MD5 лучше, чем ObjectIds).
Мы добавим хеширование для sharding, которое решит это, но не до тех пор, пока не будет 2.0.
Ответ 2
Вы можете обрезать данные gridfs, потому что gridfs это всего два экземпляра: куски и файлы. И gridfs обманывают его очень полезное и замечательное. Что касается ключа gridfs shard, он всегда плохо выбирает случайный или инкрементный ключ осколка, потому что данные не равномерно распределяются по осколкам. В случае инкрементного ключа осколка все записи переходят к последнему осколку, и он растет, а раз разность между 10 или более кусками, балансировка перемещает данные в другие осколки. Перемещение данных на другой осколок всегда является трудной задачей, которую следует избегать, насколько это возможно.
Поэтому, когда вы выбираете ключ осколка, вы должны заботиться о равномерном распределении данных.
Также, если вам удастся создать mb-автора " Scaling MongoDB" kristina (отличный специалист по клавишам осколка), ответьте на ваш вопрос. < ш > В документации говорится, что в обычных случаях вы должны выбрать индекс по умолчанию fileId:1,n:1
как ключ осколка:
Существуют различные способы, с помощью которых GridFS могут быть отложены, в зависимости от необходимости. Один общий способ осколки, основанный на ранее существовавшие индексы:
"files" коллекция не опечатана. Все записи файлов будут жить в 1 осколке. Это настоятельно рекомендуется сделать это осколок очень упругий (не менее 3 nodeнабор реплик) коллекция "кусков" с использованием существующего индекса "files_id: 1, n: 1". Некоторые файлы на конец диапазонов может иметь свои куски разделить по осколкам, но большинство файлов будет полностью тот же осколок.
Ответ 3
В настоящее время MongoDB с версии 1.8.1 поддерживает только очертание в поле "file_id", из-за использования md5 для проверки загрузки, но это не
пока работайте через осколки. Таким образом, вы не можете разделить один файл на осколки.
Ответ на группу google 7