Эффективная обработка сохранения данных объекта с изображением в MongoDB
Здесь я хочу сохранить один объект в MongoDB, используя Java. Я обнаружил, что Morphia, Jongo, Springs предоставляют основу для ее достижения.
Для хранения изображений в mongoDB я нашел GridFS
Вот моя проблема,
1. У меня есть один объект, который содержит как данные, так и изображение. Я должен хранить и делать много математических вычислений по отношению к полям в нем. Также я хочу искать определенное изображение, если определенное условие удовлетворяет..??
2. Если я разделяю изображение с изображением хранилища объектов, используя GridFs и данные в качестве данных BSon, то как связать этот документ с изображением?
3. В то время как я отделяю данные от объекта, если эти данные существуют, 16 МБ означает, как я должен справиться с этим..?? Для этого также, если я иду на GridFs означает, что он конвертируется в куски, я хочу анализировать поле за полем..??
4. В определенное время я могу найти размер объекта в Java, прежде чем записать его в mongodb..??
Может кто-нибудь, пожалуйста, предложите мне преодолеть эту проблему.. любую ссылку.. или любую идею, какая Java-платформа с MongoDB будет очень эффективной для обработки всего этого сценария в реальном времени..??
Больше информации о структуре данных:
Я хочу хранить сложный бизнес-объект. Например, если я хочу сохранить один объект класса, он содержит много учеников, каждый ученик содержит много фотографий. В классе предмет имеет свои данные. И у каждого ученика есть свои данные со списком фотографий. Я должен эффективно запрашивать и анализировать данные здесь. Это может быть в классе или в школе.
1 ответ
Вы можете сохранить метаданные для изображения в обычном документе, который также включает имя файла GridFS, в котором можно найти двоичные данные.
Размещение метаданных в GridFS будет означать, что они станут двоичным массивом данных. Тогда у вас больше не будет возможности запросить его выполнение по имени файла. Поэтому, когда ваши метаданные изображения также рискуют превысить предел в 16 МБ, это означает, что вам следует пересмотреть схему базы данных и разделить ее на несколько документов.
Если вы хотите провести анализ данных как на уровне класса, так и на уровне учащегося, вы должны поместить каждого учащегося в отдельный документ, а затем либо попросить классные комнаты ссылаться на учащихся, либо ученики указывать на классные комнаты (или оба).
Я предполагаю, что ваши ученики будут добавлять все больше и больше изображений в течение срока действия приложения. MongoDB не любит документы, которые со временем растут, потому что растущие объекты означают, что MongoDB необходимо постоянно перераспределять свое пространство хранения, что является фактором, снижающим производительность при операциях записи. В таком случае у вас также должен быть отдельный документ для каждого изображения, в котором содержится ссылка на учащегося, к которому они принадлежат. Но когда это не так (список изображений создается один раз при создании, а затем редко изменяется), вам лучше встроить изображения в виде массива в объект Student.
Независимо от того, вставляете ли вы изображения или ссылаетесь на них, документы / объекты изображений должны содержать только метаданные, тогда как сами двоичные данные изображений должны храниться в GridFS и указываться по имени файла из документа изображений.