My app is offline-first, и поэтому Realm отлично подходит для хранения и доступа к данным. Я люблю это. Тем не менее, я также хочу хранить пользовательские данные в облаке (для резервного копирования, а также в случае добавления веб-поддержки позже). Я знаю, что это именно то, для чего нужен Realm Object Server, но я думаю, что предпочел бы использовать DynamoDB по следующим причинам:Использование Realm с Amazon DynamoDB
1) Я уже инвестировал в аутентификацию DynamoDB и Amazon (Cognito).
2) Мне нравится, что Realm - это реляционная база данных, потому что от клиента мне нужно запускать сложные запросы. Тем не менее, на бэкэнд я в основном просто хочу сделать резервную копию всех данных таким образом, чтобы я мог легко получить к нему доступ и манипулировать при необходимости с помощью функций Lambda). Я полностью согласен с решением NoSQL для этого, и я понимаю, что DynamoDB - экономичная база данных с горизонтальным масштабированием, которая мне нравится. Если бы я хотел получить доступ к данным таким образом с помощью Realm Object Server, я бы понял, что это будет стоить не менее 1500 в месяц.
3) Не обижайтесь команде Королевства, но я был прикован к отключению Парса, и поэтому я хотел бы использовать то, что, я могу доверять, будет около 5+ лет в качестве моего бэкэнда.
Во всяком случае, с этим из пути, вот как я в настоящее время делаю эту работу:
1) Всякий раз, когда я создание или редактирования объекта Realm, у меня есть логика, которая будет отображать эти изменения в мою DynamoDB схему (который состоит из гораздо меньшего количества таблиц, чем Realm).
2) Я вызываю эти обновления UpdateTasks
, и я их помещаю в очередь и объединяя их по мере необходимости (если вы, например, изменили одно и то же свойство более одного раза).
3) Я прохожу через очередь и передаю куски UpdateTasks
функции Lambda, которую я написал, которая будет проходить через обновления и выполнять необходимые команды put или update DynamoDB.
4) Я повторить логику в месте в случае, если вы находитесь в автономном режиме или запрос терпит неудачу
5) Предполагая, что все синхронизируется правильно, если вы получили новый телефон и подписанный в, у меня есть отдельная функция лямбды, что будет извлекать все данные пользователя и заполнять файл Realm так же, как и раньше.
Как я уже сказал, все это работает прямо сейчас, но он чувствует себя хрупким, и я не могу не чувствовать, что я об этом не так. Кроме того, он не поддерживает двухстороннюю синхронизацию или связь в режиме реального времени, если я хотел бы добавить некоторые социальные функции.
Итак, мой вопрос в том, является ли это разумным подходом к синхронизации Realm с DynamoDB или если есть лучшее/более надежный способ? Также, если я должен пересмотреть использование Realm Object Server или что-то еще вместо DynamoDB, мне было бы интересно узнать, почему.
Это большое решение для меня, поэтому я буду благодарен за любую помощь, которую я могу получить! Спасибо
Я думаю, что DynamoDB (или любая другая БД) предоставит вам гибкость, которую вы ищете. Так что да, я бы использовал пользовательский API сборки для управления данными с/на устройства. Что касается синхронизации в реальном времени и общения, в частности, чата или чего-то еще, подход API синхронизации не может быть идеальным. Для фокусировки на реальном времени socket.io станет лучшей идеей. – Orlando
«Не обижайтесь команде Realm, но я был ввернут Parse» --- Не принято, однако обратите внимание, что ROS - это решение самого хозяина, поэтому, даже если мы должны идти по пути додо, никто может отнять это у вас :). – teotwaki