Я работал в Android-приложении, которое читало большой текстовый файл с сервера (20 МБ) по очереди, после каждой строки вставлять в SQL-данные SQL некоторые данные, извлеченные из этой строки и так далее.
проблема в том, что это приложение занимает около часа, чтобы закончить чтение этого файла. примечание: в этом файле 400 000 строк.
как я могу ускорить эту операцию за 3 или 4 минуты? Спасибо за вашу помощь.
public void readArData() {
try {
URL url = new URL("http://10.0.2.2/xy.txt");
BufferedReader in = new BufferedReader(new
inputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
// insert into Sqlite DB
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
}
Текстовые файлы сильно сжимаются, поэтому используйте сжатие gzip, доступное на Android.
Другие варианты:
разбивая ваш набор данных на несколько файлов и снова используя gzip, загружайте их отдельно
засеивание базы данных во время установки и создание метода синхронизации для обновления новых записей и доведение актуальной версии мобильных устройств. \
удалять избыточные данные с использованием эффективного дизайна базы данных и загружать только то, что требуется
ОБНОВИТЬ
Чтобы уточнить:
Теперь у вас должна быть копия вашего txt файла на локальном хранилище, чтобы вы могли удалить локальный zip файл.
Основные различия в этом подходе
а. что вы загружаете меньше данных b. загрузка не прерывается sql-вставками.
Вы также можете попробовать использовать транзакцию для улучшения скорости вставки, как описано в базе данных Android SQLite: медленная вставка
db.beginTransaction();
for (entry : listOfEntries) {
db.insert(entry);
}
db.setTransactionSuccessful();
db.endTransaction();
Вы уверены, что 3 - 4 минуты - это достижимое количество времени? Я прошу, потому что вы должны:
1) Загрузите содержимое файла 2) Разберите содержимое файла 3) Вставьте в базу данных
Некоторые из этих операций могут выполняться одновременно, но # 1 сильно зависит от скорости сети, а 2/3 сильно зависят от того, какие системные ресурсы у вас имеются.
Вместо этого мы можем спросить, почему вам нужно вытащить все эти данные на телефон и отбросить его в базе данных? Есть ли проблема с вашим приложением, запрашивающим базу данных, размещенную на веб-сервере, которая содержит.txt? Какой у вас доступ к.txt? Можете ли вы изменить его на сервере, чтобы синтаксический анализ можно было сделать быстрее?
Короче говоря, я думаю, нам нужно больше данных для анализа вашей проблемы. Можете ли вы опубликовать несколько примеров строк из.txt и кода, который вы используете для его анализа?
этот подход также позволит вам возобновить прерванную загрузку, что неплохо.