2017-02-21 10 views
2

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, мне было бы интересно узнать, почему.

Это большое решение для меня, поэтому я буду благодарен за любую помощь, которую я могу получить! Спасибо

+0

Я думаю, что DynamoDB (или любая другая БД) предоставит вам гибкость, которую вы ищете. Так что да, я бы использовал пользовательский API сборки для управления данными с/на устройства. Что касается синхронизации в реальном времени и общения, в частности, чата или чего-то еще, подход API синхронизации не может быть идеальным. Для фокусировки на реальном времени socket.io станет лучшей идеей. – Orlando

+0

«Не обижайтесь команде Realm, но я был ввернут Parse» --- Не принято, однако обратите внимание, что ROS - это решение самого хозяина, поэтому, даже если мы должны идти по пути додо, никто может отнять это у вас :). – teotwaki

ответ

1

Отказ от ответственности: Я возглавляю ROS, поэтому я явно предвзято. Я отправляю это не как ответ, а как общие комментарии, которые не соответствуют формату комментария.

Мне нравится, что это Realm эффективно реляционная база данных, потому что от клиента мне нужно запускать сложные запросы.

Вы собираетесь рассердить богов, называя Realm реляционной базой данных. Мы поддерживаем запросы, ссылки и все такое, но мы очень сильно отличаемся от реляционной базы данных;).

Также, если я должен пересмотреть использование Realm Object Server или что-то еще вместо DynamoDB, мне было бы интересно узнать, почему.

Вам не хватает нескольких очень важных функций, предлагаемых платформой Realm Mobile Platform, путем переопределения синхронизации.

Главным образом, у нас есть несколько тысяч строк кода для обработки разрешения слияния без конфликтов, в случае, когда у вас несколько клиентов, записывающих данные в одно и то же Realm, а все в автономном режиме. Кроме того:

  • Мы обрабатываем сеть для вас. Вам не нужно беспокоиться или заботиться о настройке соединений, протоколе между клиентом и сервером, а также о том, правильно ли происходит сериализация.
  • Наш протокол также очень легкий, потому что мы можем перенести только журнал транзакций из базы данных Realm; не сериализованные объекты или что-то в этом роде.
  • Наша синхронизация очень быстрая. Вероятно, вы видели демонстрационный видеоролик, когда мы запустили RMP. Поскольку наша синхронизация интегрирована непосредственно в Царство, мы можем сжимать дополнительную производительность. Мы создали несколько чат-приложений и то, что не внутренне, и люди постоянно удивляются скорости передачи сообщений.
  • Вы работаете с тем же SDK и API на сервере и клиенте (хотя и на другом языке).
  • Мы постоянно добавляем функции, которые вам не придется создавать вручную (например, часто запрашиваемые частичные репликации и разрешения на уровне объекта).

С другой стороны:

Системы, которую вы построили очень близко напоминает методы, которые мы использовать, чтобы отправлять заказы/запросы на внутренний интерфейс сервера. Как правило, мы создаем на клиенте объекты FooRequest, которые синхронизируются, а затем обработчик событий выбирает их, обрабатывает их и создает объект FooResponse, который синхронизируется с клиентом.

В целом, я очень впечатлен тем, что вы построили все это поверх ванильного царства. Если однажды мы получим эту возможность, мне бы хотелось взглянуть на весь ваш стек.

И наконец, мы работаем над нашей ценой, потому что ваши отзывы о цене не уникальны (но это очень полезно!).