Хранение данных Android - Файл против SQLite - PullRequest
11 голосов
/ 26 ноября 2009

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

Каков наилучший вариант для хранения данных с точки зрения экономии времени автономной работы ? Каждая отправка данных представляет собой сериализованный объект (класс имеет 5 полей, включая дату, числа и строки) размером около 5–10 тыс.

Есть еще идеи?

Ответы [ 3 ]

15 голосов
/ 26 ноября 2009

Я не думаю, что имеет значение, используете ли вы SQLite или файл, потому что база данных SQLite - это просто файл в системе (хранится в /data/data/<your_package>/databases/). Вам нужно будет зафиксировать базу данных в нужное время, точно так же, как вам нужно, чтобы сохранить файл на жесткий диск в нужное время. Другими словами, так или иначе вы можете использовать столько же операций записи на жесткий диск.

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

Что я могу вам сказать наверняка, так это то, что не следует использовать для сохранения файла при сериализации, если вы выбрали именно этот путь. Android сериализация медленная, медленная, медленная и создает большие файлы. По причинам производительности гораздо лучше написать собственный формат XML или JSON.

13 голосов
/ 26 ноября 2009

Я понятия не имею, что касается времени автономной работы, но одним из критериев будет то, что проще в управлении? Меньшее количество операций по управлению данными означало бы меньшее количество циклов ЦП и, в свою очередь, более длительное время автономной работы.

Я бы сказал, что вариант SQLite проще. Вы можете поместить столбец даты в таблицу SQLite, в которой хранятся ваши данные, что упрощает удаление старых представлений, которые вам больше не нужны - и все это обрабатывается с помощью собственной библиотеки SQL. Управление всей загрузкой файла - или, что еще хуже, одним файлом - с вашим собственным Java-кодом было бы намного больше работы.

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

4 голосов
/ 27 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...