2014-02-18 4 views
0

простой вопрос: любые идеи, как это должно быть сделано правильно ?. У меня есть 3 файла txt с большим количеством информации, я создал класс, который будет отвечать за чтение данных из файлов txt и возврат данных в виде списка компонентов DTO (да, информация может быть расслоена как таковая логическая единица) , в зависимости от txt-файла, после чего клиент будет использовать DAO и будет использовать такой список и вставить данные в локальную базу данных (sqlite). Мое беспокойство заключается в том, что если такой список может быть требованием к памяти, я должен избегать использования такого списка и каким-то образом вставлять эти данные с помощью объекта dao напрямую, не связывая данные в dto и, наконец, такой список?как правильно вставить данные в базу данных из txt-файла

+0

Насколько велики будут ваши файлы? Если они будут слишком большими, чтобы вписаться в память, вам придется обрабатывать их в кусках. –

+0

Вы _tried_ это? Похоже, вы пытаетесь выполнить оптимизацию, даже не принимая «наивный» подход. Иногда наивное достаточно хорошо. Если вы _have_ уже пробовали это и определили, что он слишком медленный или требовательный на клиентской машине, разместите некоторый код. –

ответ

0

Вы задаете хороший вопрос и частично отвечаете на него самостоятельно. Да, конечно, если у вас действительно есть много информации, вы не должны читать всю информацию из файла, а затем хранить ее в БД. Вы должны прочитать кусок chunk-chunk или даже если это возможно (с точки зрения приложения) по очереди и сохранить каждую строку DB.

В этом случае вам понадобится память для одной линии только в любое время.

Вы можете проектировать приложение следующим образом.

  • анализатор файлов, который возвращает Iterable<Row>
  • DB писатель, который принимает Iterable<Row> и хранит строки в БД,
  • менеджер, который вызывает и другое.

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

+0

Я думал, что использовал мой DAO в качестве моего «менеджера» в том смысле, что они будут «хранить строки в БД» (строка, фактически являющаяся DTO в моем первом подходе), будет тем же, что вы предлагаете? –

+0

Нет, это не так, я снова читаю, и теперь понимаю, извините, что я не могу вас отпустить, спасибо. –

0

не возвращает список, но итератор, как в этом примере: Iterating over the content of a text file line by line - is there a best practice? (vs. PMD's AssignmentInOperand)

вы должны изменить этот итератор, чтобы вернуть DTO вместо строки:

for(MyDTO line : new BufferedReaderIterator(br)){ 
    // do some work 
} 

Теперь вы будете перебирать строки файла по линии, но вы вернете DTO вместо возврата строк. Такое решение имеет небольшой эффект памяти.

+0

Я думал об этом же самом подходе, я хотел бы, чтобы мой клиент создал какой-то объект или использовал определенный метод для создания такого цикла, чтобы, наконец, вставить данные через такое dto и помощь моего dao. Я думаю, будет использовать комбинацию вашего ответа и AlexR's. Извините, что я не могу вас поддержать. –

+0

Я не видел первого ответа - он, должно быть, был опубликован параллельно. По крайней мере, обе идеи одинаковы. –

Смежные вопросы