powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Работа с большими данными
25 сообщений из 112, страница 3 из 5
Работа с большими данными
    #39508083
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак быть с его толстым файлом который в 150Г ?
sort -u -T temp-directory file.txt > result.txt
Очень давно я чистил базы слов для сео (типа базы кеев пастухова в текстовых файлах, только сам собирал). Команда sort очень быстрая, по сравнению с моими реализациями и в несколько раз быстрее, чем реализации в БД. Для выборки кеев я в БД ваще только минусы вижу.
оффтопик
Как человек, который писал html поиск по главным нескольких десятков миллионов популярных доменов -- крайне рекомендую разобраться в своих кодировках. У азиатов и исламистов тексты к уникоду очень часто не имеют никакого отношения, а вот для сеошников некоторых любые из них важнее, чем немцы.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508084
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov, ну так вы с самого начала могли решать эту задачу! В чем у вас тогда вопрос?
Если вы можете решить ее через Delphi::hashMap - то решайте.

Но как верно заметил MasterZiv - проверьте локаль для каждой страны. Чтоб при конверсиях
строк не потерять ни одного символа. Это важно.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508085
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Александрович.Есть свободные 3 тб те куда делать временные таблицы есть
Маловато если исходных данных 2 Тб. Но если дублей много, то может и хватит.

ИМХО БД тут лишняя. Алгоритм примерно такой просится:
1-й проход набираем данных сколько в память влезет, сортируем, сохраняем в файл №1, следующая порция - файл №2 и т.д.
Затем слияние сортированных блоков попарно . В процессе слияния дубли выкидываем.
В итоге будет один файл с уникальными отсортированными записями, а дальше его можно в БД, а можно как есть использовать, если надо только читать.

Например при 8 Гб оперативки получим 256 файлов. По загрузке диска: 1+8 циклов чтение-расчет-запись на диск. Для 18 Тб на скорости 100 Мб/сек потребуется 50 часов дискового IO. Можно потоковое сжатие использовать, gzip/deflate, тогда в несколько раз быстрее работа с диском будет и места меньше потребуется.
Первый этап, т.е. первичная сортировка блоков, будет тормозной из-за проца, т.к. там больше проц будет загружен, поэтому его лучше распараллелить по количеству ядер.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508086
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

я много задач могу решить, но это вовсе не значит, что я должен решать каждую :-)
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508088
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovmayton,

я много задач могу решить, но это вовсе не значит, что я должен решать каждую :-)
Ну ОК. На самом деле в вашей задаче интересен только 150Гб файл. Все остальное решается
как угодно... sort, uniq, база. И у меня для вас минимум два алгоритма. Было. Сейчас я
думаю что вам с Delphi+MSSQL сам бох велел залить в табличку с опцией IGNORE_DUP_KEY.

Тут я думаю траблы будут другие.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508089
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovmikron,

во-первых, записей никогда не будет больше, чем слов в одном языке ,
во-вторых, они прекрасно лягут в хеш-таблицу в памяти .
Мне кажется ваше допущение не коректно, что запись равна слову язука. Автор сказал что запись содержит слово языка но не значит что она / запись состоит только из слова.
В любом случае ваше допущение не обяснит как автор набрал 2 тб данных.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508090
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAleksandr Sharahovmayton,

я много задач могу решить, но это вовсе не значит, что я должен решать каждую :-)
Ну ОК. На самом деле в вашей задаче интересен только 150Гб файл. Все остальное решается
как угодно... sort, uniq, база. И у меня для вас минимум два алгоритма. Было. Сейчас я
думаю что вам с Delphi+MSSQL сам бох велел залить в табличку с опцией IGNORE_DUP_KEY.

Тут я думаю траблы будут другие.
Сорян. Не туда запостил ну вобщем-то к автору.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508091
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль, что не удалось услышать начальника транспортного цеха.

Автор так ничего и не сказал, как организованы его 180 петабайт данных, из фраз "проверить дубликаты и скомпоновать данные" "Файлы представляют собой хранилища слов всех языков мира" и "собираюсь писать на Delphi" никак непонятна организация слов в файлах и дубликаты чего ему, автору, надо проверять.
Мне кажется, автору надо установить сумму вознаграждения и написать в форум "Работа".
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508094
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronAleksandr Sharahovmikron,

во-первых, записей никогда не будет больше, чем слов в одном языке ,
во-вторых, они прекрасно лягут в хеш-таблицу в памяти .
Мне кажется ваше допущение не коректно, что запись равна слову язука. Автор сказал что запись содержит слово языка но не значит что она / запись состоит только из слова.
В любом случае ваше допущение не обяснит как автор набрал 2 тб данных.

Даже если запись занимает 60 байт, то 60 мегабайт в памяти - не проблема.
Плюс таблица 16 мегабайт.

Загрузка данных хеш-таблицу пройдет практически со скоростью чтения данных с диска,
а дубликаты отсеются в процессе загрузки.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508098
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovmikronпропущено...

Мне кажется ваше допущение не коректно, что запись равна слову язука. Автор сказал что запись содержит слово языка но не значит что она / запись состоит только из слова.
В любом случае ваше допущение не обяснит как автор набрал 2 тб данных.

Даже если запись занимает 60 байт, то 60 мегабайт в памяти - не проблема.
Плюс таблица 16 мегабайт.

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

Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей?
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508100
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто при условии что хэш таблица с результатом будет умещаться в памяти.
Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск.

Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей?

Ну почему не будет-то?

10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508101
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОткуда вообще 60 байт? Вроде автор вообще не говорил ничего подобного.
И при чем здесь сортировка?
Автор не говорил, но от чего то надо отталкиватся.
Интересно было бы услышать автора сколько у него записей.
Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки?
Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно?
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508102
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronmaytonОткуда вообще 60 байт? Вроде автор вообще не говорил ничего подобного.
И при чем здесь сортировка?
Автор не говорил, но от чего то надо отталкиватся.
Интересно было бы услышать автора сколько у него записей.
Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки?
Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно?

Не верно, я тут уже ссылку давал в 20736814 , почитай.
Хеш-таблица отсекает 10^6 дубликатов из 2*10^6 объектов за доли секунды.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508106
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovDima TЭто при условии что хэш таблица с результатом будет умещаться в памяти.
Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск.

Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей?

Ну почему не будет-то?

10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6

По тому что 10^ 6 это не обоснованное допущение.
Запись может содержать слово языка плюс ещё что то, пусть его перевод на другой язык.
Например:
allow;ru;разрешать
allow;ru;позволять
allow;de;erlauben
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508107
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovmikronпропущено...

Автор не говорил, но от чего то надо отталкиватся.
Интересно было бы услышать автора сколько у него записей.
Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки?
Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно?

Не верно, я тут уже ссылку давал в 20736814 , почитай.
Хеш-таблица отсекает 10^6 дубликатов из 2*10^6 объектов за доли секунды.
Что конкретно не верно?
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508110
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovDima TЭто при условии что хэш таблица с результатом будет умещаться в памяти.
Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск.

Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей?

Ну почему не будет-то?

10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6
Мне непонятно откуда цифра 10^6 ? При 10^10 как твоя хэш-таблица отработает? ТС этот момент не пояснил, я не просто так вопрос добавил.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508112
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто конкретно не верно?
В базе пастухова 1 млрд кеев (строк со словами) -- это около 60 гб файл. А ТС оперирует 2 тб данных. То есть в 33 раза больше.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508113
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronAleksandr Sharahovпропущено...


Ну почему не будет-то?

10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6

По тому что 10^ 6 это не обоснованное допущение.
Запись может содержать слово языка плюс ещё что то, пусть его перевод на другой язык.
Например:
allow;ru;разрешать
allow;ru;позволять
allow;de;erlauben


Да все нормально.
Пусть слов в языке 2*10^6 - точно достаточно для любого языка.
Пусть под слово (только слово и ничего кроме) 32 байта - точно достаточно.
Всю остальную хрень не читаем из файла, для отбора дубликатов она не требуется.
Прочитаем ее на этапе формирования выходного файла.


mikronЧто конкретно не верно?

Неверно то, что хеш таблица не справится и нужна сортировка.

Сортировка, может, и потребуется перед выдачей результата, но не для отсева дубликатов.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508115
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>schi, сегодня, 10:40 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1269329&msg=20736710][20736710]
>...Если не удалось, то значит дубль, если удалось, то записывать слово ...
А если так (для русского словаря слов):
1. берём SQLite
2. создаём таблицы с именами а, б, в ... я и одним текстовым полем
3. читаем исходные файлы по строкам
4. выделяем слова и переводим в нижний регистр
5. наличие слов проверяем в соответствующей таблице (по первой букве слова), нет - дописываем
6. сортируем результат в таблицах
7. сливаем таблицы
насчёт индексов - проверить

Если есть память - вместо таблиц использовать списки
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508116
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxВ базе пастухова 1 млрд кеев (строк со словами) -- это около 60 гб файл. А ТС оперирует 2 тб данных. То есть в 33 раза больше.

Это на всех языках, включая числа и другие абракадабры?
Сколько слов на самом большом человеческом языке?
На гигабайты пофиг.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronАвтор не говорил, но от чего то надо отталкиватся.
Интересно было бы услышать автора сколько у него записей.
Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки?
Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно?
Как вы любите сортировать! Дайте волю - отсортируете всю вселенную а потом выберете unique?

Подумайте на следующей идеей. Вам дан текстовый файл. 150Gb. В формате csv.

У вас на борту - 8Gb оперативы. Операционка съедает порядка 2Гб и полезных
для ваших нужд остается порядка 6Гб. Это и есть эффективное пространство
для игр с хешами.

Экспериментально я устанавливаю (к примеру) что в Delphi hash табличка 4Гб ключей
съедают 6Гб кучи. Накладные расходы тык-скыть.

Далее я решаю порезать 150Gb на куски (примерно одинаковые). Будем называть их
chunks. По 4Гб ключей. Но не линейно сверху вниз по csv. А по хеш-функции (к примеру
md5). Не суть важно какая функция.

Считаем сколько будет чанков.

Код: javascript
1.
150 / 4 = 37,5.



Округляем в большую сторону. 38 чанков. И делаем функцию. Типа.

Код: java
1.
2.
3.
int hash38(string key){
   return mod(MD5(key),38); 
}



Я утверждаю что эта функция мапит key в свой чанк всегда. Тоесть одинаковые
ключи всегда будут в одном чанке.

Далее - дело техники. За 1 проход по 150 Гб файлу мы создаем 38 (попугаев)
дисковых чанков. Чтоб дисковая подсистема не сдохла - буферизируем по максимуму.

Потом все 38 файлов обрабатываем через Delphi::hashTable и сливаем уникальные
в result.csv.

Вы спросите вопрос. А не будет ли повторов ключей между чанками. Я отвечу.
Не будет. На основании свойств моей волшебной функции.

И никакой сортировки. Как вам?
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508119
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто на всех языках, включая числа и другие абракадабры?
Сколько слов на самом большом человеческом языке?
Это реальные строки, которые (в теории) могут искать в поисковых системах. Например:
установка окон в москве
скачать windows бесплатно
и так далее. Выборка, типа:
установк и москв
скач и windows исключить бесплатно
в grep на 60 гб делаются на hdd за 10 минут, на sed за 12. Такой файл логично делить по числу реальных винтов в системе.
---
Мне не понятно, как Вы пришли к выводу, что ТС на 2 тб хранит только уникальные слова всех стран мира.
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxавторЧто конкретно не верно?
В базе пастухова 1 млрд кеев (строк со словами) -- это около 60 гб файл. А ТС оперирует 2 тб данных. То есть в 33 раза больше.
А что это за база "Пастухова"? Кто этот замечательный человек?
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508123
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovmikron

По тому что 10^ 6 это не обоснованное допущение.
Запись может содержать слово языка плюс ещё что то, пусть его перевод на другой язык.
Например:
allow;ru;разрешать
allow;ru;позволять
allow;de;erlauben


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

Интересный поворот мысли. Другими словами в моём примере вы удалите все строчки за исключением первой как дубликаты?
Вас ничего не смущяет?
...
Рейтинг: 0 / 0
Работа с большими данными
    #39508124
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxЭто реальные строки, которые (в теории) могут искать в поисковых системах. Например:
установка окон в москве
скачать windows бесплатно

Тогда это немного не то, что есть у автора в качестве исходных данных.

azsxМне не понятно, как Вы пришли к выводу, что ТС на 2 тб хранит только уникальные слова всех стран мира.

Напротив, из его слов можно предположить, что у него есть некие тексты на языках народов мира.
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 3 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Работа с большими данными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]