простой вопрос: любые идеи, как это должно быть сделано правильно ?. У меня есть 3 файла txt с большим количеством информации, я создал класс, который будет отвечать за чтение данных из файлов txt и возврат данных в виде списка компонентов DTO (да, информация может быть расслоена как таковая логическая единица) , в зависимости от txt-файла, после чего клиент будет использовать DAO и будет использовать такой список и вставить данные в локальную базу данных (sqlite). Мое беспокойство заключается в том, что если такой список может быть требованием к памяти, я должен избегать использования такого списка и каким-то образом вставлять эти данные с помощью объекта dao напрямую, не связывая данные в dto и, наконец, такой список?как правильно вставить данные в базу данных из txt-файла
ответ
Вы задаете хороший вопрос и частично отвечаете на него самостоятельно. Да, конечно, если у вас действительно есть много информации, вы не должны читать всю информацию из файла, а затем хранить ее в БД. Вы должны прочитать кусок chunk-chunk или даже если это возможно (с точки зрения приложения) по очереди и сохранить каждую строку DB.
В этом случае вам понадобится память для одной линии только в любое время.
Вы можете проектировать приложение следующим образом.
- анализатор файлов, который возвращает
Iterable<Row>
- DB писатель, который принимает
Iterable<Row>
и хранит строки в БД, - менеджер, который вызывает и другое.
В этом случае логика, ответственная за чтение и запись файла, будет инкапсулирована в определенные модули, и дополнительное потребление памяти не потребуется.
Я думал, что использовал мой DAO в качестве моего «менеджера» в том смысле, что они будут «хранить строки в БД» (строка, фактически являющаяся DTO в моем первом подходе), будет тем же, что вы предлагаете? –
Нет, это не так, я снова читаю, и теперь понимаю, извините, что я не могу вас отпустить, спасибо. –
не возвращает список, но итератор, как в этом примере: 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 вместо возврата строк. Такое решение имеет небольшой эффект памяти.
Я думал об этом же самом подходе, я хотел бы, чтобы мой клиент создал какой-то объект или использовал определенный метод для создания такого цикла, чтобы, наконец, вставить данные через такое dto и помощь моего dao. Я думаю, будет использовать комбинацию вашего ответа и AlexR's. Извините, что я не могу вас поддержать. –
Я не видел первого ответа - он, должно быть, был опубликован параллельно. По крайней мере, обе идеи одинаковы. –
- 1. Как правильно вставить данные в базу данных в php
- 2. Вставить данные из datagridview в базу данных
- 3. Вставить данные в базу данных из массива
- 4. Вставить данные из файла в базу данных
- 5. Вставить данные в базу данных?
- 6. Вставить данные в базу данных
- 7. Как вставить данные ArrayList в базу данных
- 8. Не удается правильно вставить данные в базу данных
- 9. Как вставить данные в базу данных C#?
- 10. C#: Как вставить данные в базу данных?
- 11. Невозможно правильно вставить данные в базу данных с помощью Hibernate
- 12. Как вставить данные в базу данных
- 13. Как вставить данные в базу данных Laravel?
- 14. Как вставить данные в базу данных Kentico
- 15. Как вставить данные edittext в базу данных
- 16. Как вставить данные в базу данных?
- 17. Как вставить данные сессии в базу данных
- 18. Как вставить данные в базу данных?
- 19. Вставить данные набора данных в базу данных
- 20. Вставить данные итерации в базу данных
- 21. Вставить данные в базу данных WinForm в базу данных
- 22. Не удается вставить данные в базу данных
- 23. Как вставить данные в базу данных django из файла views.py?
- 24. Как вставить данные из выпадающего списка в базу данных
- 25. Как вставить данные в базу данных mysql из таблицы HTML
- 26. Как вставить данные из bean в базу данных Spring MVC?
- 27. Как вставить данные из файла CSV в мою базу данных?
- 28. Как вставить данные в базу данных из wavemaker
- 29. Как вставить данные в базу данных из основного файла?
- 30. Как вставить данные в базу данных оракула из JTextfield?
Насколько велики будут ваши файлы? Если они будут слишком большими, чтобы вписаться в память, вам придется обрабатывать их в кусках. –
Вы _tried_ это? Похоже, вы пытаетесь выполнить оптимизацию, даже не принимая «наивный» подход. Иногда наивное достаточно хорошо. Если вы _have_ уже пробовали это и определили, что он слишком медленный или требовательный на клиентской машине, разместите некоторый код. –