rx
как вариант, если нужна только уникальность, в один "проход" при достаточной памяти
- выделяется общая для всех потоков/процессов область памяти под задачу, адреса в однозначном соответствии с crcXX по заданному правилу, значение бита памяти 0/1 в зависимости от того есть строка или нет (если требуется атомарность то 2 бита) (для crc32 потребуется 4гб(8гб))
- указывается максимум N фрагментов, на которые делится исходный файл для обработки, как вариант - автоматом с указанием Y кб на 1 фрагмент
- поток/процесс берет Nую часть по порядку, считывает заданное кол-во байт с общего файла начиная с рассчетного оффсета с первого найденного конца строки (или начала файла для первой по порядку) до последнего конца строки с учетом заданной длины фрагмента, и инкриментирует порядковое число взятых в обработку фрагментов на 1 (атомарно)
- поток/процесс считает crcXX строки, проверяет соответствующее значение бита в памяти, если 0 - меняет на 1 (если нужна атомарность реализует через второй бит) и пишет в общий файл уникальных записей, если 1 - игнорит
- потоки/процессы плодятся до оптимальной загрузки, отслеживаемой или в реалтайме, или до изначально заданного максимума потоков/процессов
idk2045
Дартаньян писал:
grozny: только 700 гиг в базу на выходе она будет совсем другой.
ну будет больше, не вижу проблемы. если постоянно нужно - надо винтов добавить есессно.
atrius
сори, с ребенком дома сидел, в сеть не выходил.
в файликах разное кол-во строк. ну в среднем около 1.5-2 миллиарда.
там народ интересовался сколько времени sort отрабатывает - около 3 суток. сейчас заметили интересную вещь, файлики можно сортить параллельно =)
т.е. можно запускать 4 сорта на 4 разных файла. при этом нагрузка на винты не растет, т.к. каждый файл положили на отдельный диск.
в принципе теперь получается приемлемая скорость, наверное.
спасибо всем. рад что есть люди, которые любят нестандартные решения =)
еще раз всем спасибо