Лучший способ поделиться большим двоичным объектом с сервером объектов Realm

#realm #realm-mobile-platform

#realm #realm-мобильная платформа

Вопрос:

Для мобильной базы данных Realm было установлено ограничение на размер большого двоичного объекта в 16 МБ. Согласно документу:

Для хранения больших объемов данных либо разбейте их на блоки размером 16 МБ, либо сохраните их непосредственно в файловой системе, сохраняя пути к этим файлам в Realm.

Если мы собираемся использовать сервер объектов Realm для хранения наших данных, должны ли мы разделить данные на фрагменты? Мы не ожидаем сохранения видео или образа диска в Realm, но мы видим, что пользователи иногда добавляют большие файлы.

Комментарии:

1. Ну, у вас может быть другой сервер, на котором вы храните файлы, а сервер объектов Realm будет хранить URL-адреса в этом другом месте?

2. Это один из способов сделать это. Однако, поскольку файлы не являются общедоступными, нам придется создавать аутентификацию и авторизацию, которые отражают Realm. В таком случае я бы предпочел метод chunks.

Ответ №1:

Мобильная платформа Realm не обязательно предназначена для хранения очень больших файлов. Например, 16 МБ — это все еще значительный объем данных для передачи по воздуху (особенно при подключении 3G / 4G).

Как указано в EpicPandaForce, вы можете разместить файл в сторонней системе и сохранить токен аутентификации в Realm вместе с URL-адресом. Эта система довольно хорошо работает с S3, что позволяет вам создавать секретный URL-адрес (со встроенным токеном доступа), действительный в течение x определенного времени.

Это не требует огромного объема работы; это просто требует правильного управления вашими сегментами S3 на стороне сервера. Используя корпоративную версию Realm Object Server, на самом деле очень легко генерировать эти URL-адреса, когда это требуется устройству, и только тогда, когда это требуется, в течение короткого промежутка времени (обычно вы все равно кэшируете такие большие файлы на устройстве, чтобы не загружать их повторно все время).

В качестве альтернативы, как указано в документах, вы можете хранить все в виде блоков размером 16 МБ. Пожалуйста, имейте в виду, что это может привести к увеличению использования хранилища, поскольку фактический файл Realm будет содержать каждый фрагмент размером 16 МБ, но журнал транзакций также будет содержать тот же фрагмент размером 16 МБ (чтобы алгоритм слияния мог правильно функционировать на стороне сервера).