Плюсы и минусы SQLite и общих настроек

115

Каков хороший механизм для хранения информации из базы данных SQLite и общих настроек?

Зачем использовать общие настройки? Зачем использовать sqlite? Я попытался найти разницу между ними, и это лучший механизм для хранения данных, но я не могу найти соответствующий ответ в Google. Пожалуйста, помогите мне с примером и пояснениями.

  • 0
    Это в значительной степени зависит от вида данных, которые вы хотите сохранить. SharedPreferences обеспечивает более быстрый и простой доступ к данным, его удобнее использовать при хранении небольших объемов данных.
  • 2
    Не храните ничего в Shared Preferences, кроме простых строк и примитивов - и если вы используете отдельный файл для каждого - несмотря на то, что документы Shared Preferences не являются поточно-ориентированными, и даже если они используются исключительно в основном потоке, чрезвычайно подвержены повреждению, если вы сохраните больше чем 1 пара ключ-значение в файле.
Показать ещё 1 комментарий
Теги:
database
sharedpreferences
data-storage

5 ответов

121
Лучший ответ

Это действительно зависит от данных, которые вы хотите сохранить.

SQLite

Большие количества одинаковых структурированных данных должны храниться в базе данных SQLite, поскольку базы данных предназначены для такого рода данных. Поскольку данные структурированы и управляются базой данных, можно запросить получение подмножества данных, которые соответствуют определенным критериям, с использованием языка запросов, такого как SQL. Это позволяет выполнять поиск в данных. Конечно, управление и поиск больших наборов данных влияет на производительность, поэтому чтение данных из базы данных может быть медленнее, чем чтение данных из SharedPreferences.

SharedPreferences

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

  • 20
    В качестве примера, SharedPreferences полезны для хранения пользовательских настроек, где есть лишь несколько переменных, которые необходимо сохранить. SQLite, с другой стороны, был бы лучше для хранения данных там, где имеется большой набор элементов, таких как названия песен в музыкальной библиотеке, которые необходимо найти.
  • 4
    Вам не нужно знать имена ключей, чтобы использовать SharedPreferences. Смотрите getAll ().
Показать ещё 7 комментариев
70

У этого вопроса есть принятый ответ, но я думаю, что есть еще что сказать по теме - относительно скорости.

Приложение SharedPreferences и Sqlite DB являются как просто файлами, хранящимися в каталогах приложений в файловой системе устройства. Если объем данных не слишком велик, параметр Sqlite будет включать в себя более крупный и более сложный файл с большим количеством служебных накладных расходов для простого доступа.

Итак, если природа данных не диктует ваш выбор (как объясняется в принятом ответе), а скорость имеет значение, то, вероятно, лучше использовать SharedPreferences.

И чтение некоторых данных часто происходит на критическом пути к отображению основной активности, поэтому я считаю, что скорость часто очень важна.

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

  • 5
    Как насчет читаемости кода? Я думаю, что при хранении нескольких записей в SharedPrefs вместо таблицы БД код становится запутанным. Синтаксис Sql легче читать, чем зацикливание записей SharedPrefs ...
  • 6
    Игорь, я бы не согласился. SharedPreferences действительно одномерны, очень просто использовать предпочтения. Например, я создаю приложение для проверки акций, я просто храню символы акций в настройках. Мне не нужно брать их по отдельности, так как я всегда перечисляю их все, и это все, что я делаю, храни или храню. Это так просто, намного проще, чем использовать БД.
Показать ещё 6 комментариев
10

Я считаю, что речь идет не о скорости или размере, а о том, какие операции вы хотите делать с вашими данными.

Если вы планируете выполнять join, сортировать, и другие операции с БД на своих данных, перейдите для Sqlite. Например, сортировка данных по дате.

Если вы хотите сопоставить простые значения (например, int, boolean, String), используйте Настройки. Операции с БД здесь не сработают, и, разумеется, вам нужно иметь все ключи. Примером может служить пользовательский пароль или конфигурация приложения.

Большим соблазном принять предпочтения является то, когда вы хотите использовать его для хранения сплющенного POJO (сериализованного объекта JSON) в качестве String. Такая потребность в действительности является признаком использования Sqlite. Зачем? Потому что сложные данные в конечном итоге потребуют сложных отпечатков. Представьте себе получение конкретной записи, которую можно было бы обработать простым "SELECT... WHERE id = 1". В пути Preferences это будет долгий процесс от десериализации до повторения результатов.

1
  • Для хранения огромного количества данных перейдите на систему баз данных SQLite. Эта позволят пользователю также искать данные.

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

  • 0
    300 пар ключ-значение - это огромный объем данных? Мне нужно хранить это точно.
  • 0
    В этом случае вы должны перейти на базу данных SQLite. В противном случае будет сложно управлять этими 300 данными и получать их.
-2

Забудьте SQLLite забудьте о SharedPreferences, используйте Realm. Единое решение для всего вашего локального хранилища. Вы можете использовать простые старые объекты Java как RealmObjects и хранить свои данные там. Вы можете конвертировать selcted запросы в файлы JSON. Не нужно разбирать всю базу данных. Проверьте эту ссылку: https://realm.io/news/introducing-realm/

  • 9
    забудьте все, что вы знаете о чехлах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню