Подтвердить что ты не робот

Нужно ли создавать новую базу данных SQLite каждый раз, когда приложение обновляется?

У меня есть приложение Xamarin Forms, которое я хотел бы разработать. Он будет иметь базу данных SQLite, и я хочу сделать это доступным на iOS и Android. База данных будет заполнена данными из базы данных SQL Server в облаке с начальными данными семян. Я думаю, что это будет около 500 строк данных с каждой строкой около 1 КБ.

То, что я не понимаю, - это когда и как это заполнять. Должен ли я попытаться поместить данные в файл CSV и заполнить ли это базу данных при установке приложения или при первом запуске? Каков обычный способ заполнения данных семян, отличных от строк внутри кода, с большим количеством операторов вставки.

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

Спасибо

4b9b3361

Ответ 1

Прерывает проблему.

Являются ли начальные данные, которые вы хотите использовать в своем приложении, со временем меняться?

Если вы включаете какие-либо предварительно заполненные данные (SQLite, Realm или CSV файл,...), а данные, которые вы включаете, идут устаревшие, и вы должны обновить их (.apk/.ipa), чтобы ваш новый пользователь установил обновленные данные (подробнее об этом ниже).

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

Это приложение бизнес-класса (LoB), опубликованное через публикацию Ad-Hoc, частного магазина и/или iOS Enterprise?

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

Будет ли распространено это приложение через общедоступные магазины Apple и Google App Store?

Здесь вы должны быть очень осторожны с тем, какие предварительно заполненные данные вы включаете в свое приложение.

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

Play Store обычно составляет менее 24 часов при публикации обновлений приложений, и, хотя Apple Store может быть одинаковым, не делайте ставку на него.

Мы регулярно видим задержки в 48-72 часа и произвольно отклоняемся, и, таким образом, может потребоваться неделя или больше, чтобы получить приложение для обновления в Apple Store. У нас были отклонения, откладывающие обновление приложения более месяца, и они вошли в процесс апелляции и даже удалили уже существующие функции, чтобы получить повторное опубликование.

Примечание. Каждое обновление приложения в магазине Apple сбрасывает ваши отзывы пользователей: - (

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

Что эти данные стоят вашего конечного пользователя и вас?

Отрицательные расходы на вас как разработчика приложений - плохие отзывы и удаленные ссылки. Посмотрите, как эти "данные" влияют на конечных пользователей на ваше приложение и как они реагируют. Более длительное время загрузки, обычно приемлемо. Более длительное время запуска приложения, менее приемлемое... и т.д.

На каких рынках будет использоваться ваше приложение? Скорость сети и стоимость передачи данных на многих рынках по всему миру являются медленными и дорогостоящими...

Каков истинный размер данных?

Я "предварительно заполняю" экземпляр данных Realm с тысячами строк с 5 МБ данных JSON за секунду. SQLite занимает больше времени, но все равно неплохо. Сами данные хранятся в zip файле и доступны как статический файл (на основе https-get) и с коэффициентом сжатия 80%, 1 Мбайт сжатых данных извлекается с сервера (AWS S3) за одну секунду с использованием сотовых данных LTE скорость и разжатие его как потока при десериализации JSON на лету для обновления экземпляра Realm добавляет еще секунду...

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

Примечание. Это означает предположить, что пользователь будет иметь доступ к сетевым данным при первом запуске приложения... На многих рынках по всему миру это не так, поэтому используйте это в своем дизайн приложения.

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

Итак, следует ли включать в пакет приложений какие-либо предварительно заполненные данные?

Конечно, когда эти данные абсолютно необходимы, чтобы как можно быстрее запустить и запустить пользователя, чтобы улучшить работу пользователя. Игры - отличный пример этого в комплекте с 100 мегабайтами или даже гигабайтами через .obb... с различными уровнями, медиафайлами и т.д.... в приложение, чтобы пользователь не испытывал 10+ минут. время ожидания при открытии приложения в первый раз.

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

И что делать?

Лично я рассматриваю этот вопрос в каждом отдельном случае. Я смотрю на данные, и если он не изменится и только добавится и, возможно, будет сокращен с течением времени, включите его в качестве предварительно заполненного SQLite или хранилища Realm или... Почему заставить пользователя ждать веб-запросов, обновления баз данных и использование дополнительных сетевых данных и связанные с ними затраты. Если данные будут устаревать, не связывайте их в свое приложение.

Что касается механики установки предварительно заполненных данных:

См. мой ответ на этот вопрос. Вопрос о Предварительно созданных файлах пакета

Ответ 2

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

  • OnCreate(): вы должны реализовать этот метод и создать свою базу данных sqlite с заполненными данными с сервера. Он вызывается, когда приложение запускается в первый раз.
  • OnUpgrade(): вы должны реализовать этот метод, если хотите изменить базу данных (добавить новую таблицу или столбец в таблицу) или заполнить дополнительные данные.

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

Проверьте следующие примеры, объясняющие, как использовать базу данных sqlite с Xamarin:

Использование Sqlite в приложении Xamarin.Android, разработанном с использованием Visual Studio

и

Введение в Xamarin.Forms и SQLite