Каковы мои варианты хранения данных при использовании React Native? (iOS и Android)



Я все еще новичок в мире React Native, и, как правило, в мобильном/родном мире, и я нахожу документацию немного недостающей, когда дело доходит до сохранения данных.



Каковы мои варианты хранения данных в React Native и последствия каждого типа? Например, я вижу, что есть локальное хранилище и асинхронное хранилище, но тогда я также вижу такие вещи, как Realm, и я смущен, как все это будет работать с внешней базой данных.



I конкретно хочу знать:




  • каковы различные варианты сохранения данных?

  • для каждого из них каковы пределы этого постоянства (т. е. когда данные больше не доступны)? Например: при закрытии приложения, перезагрузить телефон и т. д.

  • для каждого из них существуют ли различия (кроме общей настройки) между реализацией в iOS и Android?

  • как сравнить параметры для доступа к данным в автономном режиме? (или как работает в автономном режиме доступ обычно обрабатывается?)

  • есть ли другие соображения, которые я должен иметь в виду?


Спасибо за вашу помощь!

1082   3  

3 ответов:

вот что я узнал, когда я определяю лучший способ двигаться вперед с несколькими моими текущими проектами приложений.

Асинхронный Хранения ("встроенный" реагировать родной)

Я использую AsyncStorage для приложения в производстве. Хранилище остается локальным для устройства, не зашифровано (как упоминалось в другом ответе), уходит, если вы удалите приложение, но должно быть сохранено как часть резервных копий вашего устройства и сохраняется во время обновлений (как собственные обновления ala TestFlight, так и обновления кода через CodePush).

вывод: локальное хранилище; вы предоставляете свое собственное решение для синхронизации/резервного копирования.

SQLite

другие проекты, над которыми я работал, использовали sqlite3 для хранения приложений. Это дает вам SQL-подобный опыт, с сжимаемыми базами данных, которые также могут быть переданы на и с устройства. У меня не было никакого опыта синхронизации их с задней частью, но я предполагаю, что существуют различные библиотеки. Есть РН библиотек подключение к SQLite.

данные хранятся в традиционном формате базы данных с базами данных, таблицами, ключи, индексы и т. д. все сохранено на диск в двоичном формате. Прямой доступ к данным доступен через командную строку или приложения, которые имеют драйверы SQLite.

вывод: локальное хранилище; вы предоставляете синхронизацию и резервное копирование.

военнослужащих

Firebase предлагает, среди прочего, базу данных noSQL в реальном времени вместе с хранилищем документов JSON (например, MongoDB), предназначенный для синхронизации от 1 до n клиентов. В документах говорится об автономной сохраняемости, но только для собственного кода (Swift/Obj-C, Java). Собственный вариант JavaScript Google ("Web"), который используется React Native, не предоставляет опцию кэшированного хранения (см. обновление 2/18 ниже). Библиотека написана с предположением, что веб-браузер будет подключаться, и поэтому будет полупостоянное соединение. Вероятно, вы могли бы написать локальный механизм кэширования дополните вызовы хранилища Firebase, или вы можете написать мост между собственными библиотеками и React Native.

[обновление 2/2018] с тех пор я нашел React Native Firebase который обеспечивает совместимый интерфейс JavaScript для собственных библиотек iOS и Android (делая то, что Google, вероятно, мог/должен был сделать), предоставляя вам все плюсы собственных библиотек с бонусом поддержки React Native. С введением компанией Google в магазине документ JSON рядом база данных в реальном времени, я даю Firebase хороший второй взгляд на некоторые приложения в реальном времени, которые я планирую построить.

база данных в реальном времени хранится как JSON-подобное дерево, которое вы можете редактировать на веб-сайте и импортировать/экспортировать довольно просто.

вывод: с react-native-firebase RN получает те же преимущества, что и Swift и Java. [/update] хорошо масштабируется для сетевых устройств. Низкая цена для низкого использования. Прекрасно сочетается с другими облачными предложениями Google. Данные видны и редактируемый из их интерфейса.

область

также хранилище объектов в реальном времени с автоматической синхронизацией сети. Они рекламируют себя как "первое устройство", и демонстрационное видео показывает, как устройства обрабатывают спорадическое или потерянное сетевое подключение.

Они предлагают бесплатную версию хранилища объектов, которое вы размещаете на своих собственных серверах или в облачном решении, таком как AWS или Azure. Также можно создать хранилища в памяти, которые не сохраняются на устройстве, хранилища только для устройств, которые не синхронизируются с сервером, хранилища только для чтения и полный параметр чтения-записи для синхронизации между одним или несколькими устройствами. У них есть профессиональные и корпоративные варианты, которые стоят больше в месяц, чем Firebase.

В отличие от Firebase, все возможности Realm поддерживаются в React Native и Xamarin, так же как и в приложениях Swift/ObjC/Java (native).

ваши данные привязаны к объектам в коде. Потому что они определены объекты, у вас есть схема, и контроль версий является обязательным для здравомыслия кода. Прямой доступ доступен через GUI tools Realm предоставляет. Файлы данных на устройстве являются кросс-платформенными совместимыми.

вывод: устройство во-первых, дополнительная синхронизация с бесплатными и платными планами. Все функции поддерживаются в React Native. Горизонтальное масштабирование дороже, чем военнослужащих.

iCloud

Я честно не сделал много играть с этим, но будет делаем это в ближайшее время.

Если у вас есть собственное приложение, которое использует CloudKit, вы можете использовать CloudKit JS для подключения к контейнерам вашего приложения из веб-приложения (или, в нашем случае, React Native). В этом случае у вас, вероятно, будет собственное приложение iOS и приложение React Native для Android.

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

Я не знаю, насколько легко получить доступ к необработанным данным; схемы могут быть созданы на сайте Apple.

вывод: отлично подходит для приложений, ориентированных на Apple.

информационная

большое имя, много больших компаний за ним. Есть Community Edition и Enterprise Edition со стандартными расходами на поддержку.

у них есть учебник на своем сайте для подключения вещей к React Native. Я также не потратил много времени на это, но это выглядит как жизнеспособная альтернатива Realm с точки зрения функциональности. Я не знаю, насколько легко получить ваши данные за пределами вашего приложения или любых API, которые вы создаете.

[Edit: найдена более старая ссылка, которая говорит о Couchbase и CouchDB, и CouchDB может быть еще одним вариантом для рассмотрения. Двух исторически связанных, но в настоящее время совершенно разные продукты. Смотрите это сравнение.]

вывод: Кажется, имеют одинаковые возможности в мире. Может быть только для устройства или синхронизированы. Мне нужно это попробовать.

MongoDB

Я использую эту сторону сервера для части приложения, которое использует asyncstorage локально. Мне нравится, что все хранится как объекты JSON, что делает передачу на клиентские устройства очень простой. В моем случае использования он используется в качестве кэша между вышестоящим поставщиком данных TV guide и моими клиентскими устройствами.

там нет жесткого структура данных, как схема, поэтому каждый объект хранится как "документ", который легко доступен для поиска, фильтрации и т. д. Подобные объекты JSON могут иметь дополнительные (но разные) атрибуты или дочерние объекты, что обеспечивает большую гибкость в том, как вы структурируете свои объекты/данные.

Я не пробовал никаких функций синхронизации клиента с сервером, и я не использовал его встроенным. React Native code для MongoDB действительно существует.

вывод: локальное только решение NoSQL, нет очевидный вариант синхронизации как царство или опорного пункта.


[Edit] я провел некоторое время с Realm, так как я изначально написал это. Мне нравится, как мне не нужно писать API для синхронизации данных между приложением и сервером, подобно Firebase. Бессерверные функции также выглядят очень полезными с этими двумя, ограничивая количество бэкэнд-кода, который я должен написать.

Мне нравится гибкость хранилища данных MongoDB, так что это становится моим выбором для серверной части веб-приложения и другие приложения, необходимые для подключения.

нашел RESTHeart, который создает очень простой, масштабируемый RESTful API для MongoDB. Не должно быть слишком сложно построить компонент React (Native), который читает и записывает объекты JSON в RESTHeart, который, в свою очередь, передает их в/из MongoDB.


[Edit] я добавил информацию о том, как хранятся данные. Иногда важно знать, сколько работы вы можете выполнить во время разработки и тестирования, если вы должны настроить и проверить данные.

быстрый и грязный: просто использовать возвращение + react-redux + redux-persist + AsyncStorage для react-родной.

Он почти идеально подходит для react native world и работает как шарм для android и ios. Кроме того, вокруг него есть солидное сообщество и много информации.

для рабочего примера см. F8App от Facebook.

в чем разница варианты сохранения данных?

с react native, вы, вероятно, хотите использовать redux и redux-persist. Он может использовать несколько систем хранения. AsyncStorage и вместе корячиться-файловая система-хранилище вариантов РН.

есть и другие варианты, такие как Firebase или Realm, но я никогда не использовал их в проекте RN.

для каждого из них каковы пределы этого постоянства (т. е. когда данные больше не доступны)? Например: при закрытии применение, перезагрузка телефона и т. д.

с помощью redux + redux-persist вы можете определить, что сохраняется, а что нет. Если данные не сохраняются, они существуют во время работы приложения. При сохранении данные сохраняются между выполнением приложения (закрыть, открыть, перезагрузить телефон и т. д.).

AsyncStorage имеет ограничение по умолчанию 6 МБ на Android. Можно настроить больший предел (на Java-коде) или использовать redux-persist-filesystem-storage в качестве механизма хранения для Андроид.

для каждого из них существуют ли различия (кроме общей настройки) между реализацией в iOS и Android?

использование redux + redux-persist + AsyncStorage настройка точно такая же на android и iOS.

Как сравнить параметры для доступа к данным в автономном режиме? (или как обычно обрабатывается автономный доступ?)

используя обертывание, offiline доступа практически в автоматическом режиме благодаря ее частей конструкции (действий создатели и редукторы).

все данные, которые вы извлекли и сохранили, доступны, вы можете легко хранить дополнительные данные, чтобы указать состояние (выборка, успех, ошибка) и время его извлечения. Обычно запрос выборки не делает недействительными старые данные, и ваши компоненты просто обновляются при получении новых данных.

то же самое применяется в другом направлении. Вы можете хранить данные, которые вы отправляете на сервер, и которые все еще находятся в ожидании, и обрабатывать их соответствующим образом.

есть ли другие соображения, которые я должен иметь в виду?

React способствует реактивный способ создания приложений и Redux подходит очень хорошо на нем. Вы должны попробовать его, прежде чем просто использовать опцию, которую вы будете использовать в своем обычном приложении для Android или iOS. Кроме того, вы найдете гораздо больше документов и помощи для них.

люди выше попали в правильные заметки для хранения, хотя если вам также нужно рассмотреть любые данные PII, которые необходимо сохранить, то вы также можете спрятать в брелок, используя что-то вроде https://github.com/oblador/react-native-keychain так как ASyncStorage не зашифрован. Он может быть применен как часть конфигурации persist в чем-то вроде redux-persist.

Comments

    Ничего не найдено.