Android-хранилище данных - File vs SQLite

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

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

Любая другая идея?

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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