Как обрабатывать огромное количество данных с ограниченными ресурсами обработки? [закрыто]

Я ежедневно получаю из внешнего источника очень большой объем данных (около 250 ГБ с 260 миллионами строк текста фиксированной ширины), распределенных по 5 текстовым файлам. Я пишу Java-приложение, которое должно объединять первую группу данных (файлы 1-4) со второй группой (файл 5) на основе некоторой бизнес-логики.

Но многократный доступ /чтение из 250 ГБ текстовых файлов занимает довольно много времени. Поэтому я решил найти более эффективный способ обработки моих данных. Я думаю, чтобы сохранить данные в базе данных (например, MySQL Workbench) и сделать обработку с использованием базы данных вместо текстовых файлов. Эта база данных будет удалена после завершения обработки.

Может ли такой подход использования временной базы данных улучшить производительность по сравнению с текстовыми файлами? Или есть какие-нибудь лучшие предложения, как спроектировать эту массовую обработку?

Примечание: мое приложение должно быть запущено на сервере Windows R2 с 32 ГБ ОЗУ, процессором Intel Xeon E5645 и жестким диском 1 ТБ

1 голос | спросил KicksheepSon 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 07 Sep 2018 13:58:43 +0300 2018, 13:58:43

1 ответ


3

Трудно дать простой ответ, не зная, как связаны между собой первые 4 файла, как бизнес-логика объединяет данные и можно ли сделать какие-либо предположения относительно упорядочения файлов. Тем не менее, вот некоторые общие идеи, которые помогут вам оценить подход, который вы рассматриваете.

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

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

Эти накладные расходы могут быть сведены к минимуму:

  • Если у вас есть только несколько индексов, стоимость их построения в принципе должна быть меньше, чем сортировка текстовых файлов (поскольку для сортировки текстовых файлов требуется несколько полных переписываний всех данных).

  • Временные таблицы базы данных могут быть определены как имеющие только те поля, которые имеют отношение к бизнес-логике, причем напоминание о каждой входной текстовой строке помещается в большие текстовые поля фиксированного размера. Это может снизить накладные расходы на преобразование (например, даты, числа и т. Д.) При импорте до минимума и в принципе на том же уровне, что и преобразование текста в файлах самостоятельно. Это также уменьшило бы операции с внутренней базой данных при извлечении строк (чем больше полей, тем больше времени уходит на построение внутренних наборов данных в памяти).

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

Механизмы баз данных имеют функции, которые могут значительно ускорить обработку данных:

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

  • Как правило, оптимизатор запросов автоматически оптимизирует запросы (что потребует тщательного ручного анализа без него).

  • Алгоритмы кэширования базы данных используются для оптимизации доступа (особенно повторного доступа).

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

Важное замечание: самой тяжелой и деликатной частью подхода к базе данных будет импорт (особенно на старом компьютере). К счастью, вы можете оценить выполнимость этого подхода с очень ограниченными усилиями: определите структуру базы данных, используйте знакомый вам движок sql и попробуйте использовать mysqlimport .

ответил Christophe 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2018 17:43:52 +0300 2018, 17:43:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132