Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
авторКак быть с его толстым файлом который в 150Г ? sort -u -T temp-directory file.txt > result.txt Очень давно я чистил базы слов для сео (типа базы кеев пастухова в текстовых файлах, только сам собирал). Команда sort очень быстрая, по сравнению с моими реализациями и в несколько раз быстрее, чем реализации в БД. Для выборки кеев я в БД ваще только минусы вижу. оффтопик Как человек, который писал html поиск по главным нескольких десятков миллионов популярных доменов -- крайне рекомендую разобраться в своих кодировках. У азиатов и исламистов тексты к уникоду очень часто не имеют никакого отношения, а вот для сеошников некоторых любые из них важнее, чем немцы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:28 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, ну так вы с самого начала могли решать эту задачу! В чем у вас тогда вопрос? Если вы можете решить ее через Delphi::hashMap - то решайте. Но как верно заметил MasterZiv - проверьте локаль для каждой страны. Чтоб при конверсиях строк не потерять ни одного символа. Это важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:30 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Андрей Александрович.Есть свободные 3 тб те куда делать временные таблицы есть Маловато если исходных данных 2 Тб. Но если дублей много, то может и хватит. ИМХО БД тут лишняя. Алгоритм примерно такой просится: 1-й проход набираем данных сколько в память влезет, сортируем, сохраняем в файл №1, следующая порция - файл №2 и т.д. Затем слияние сортированных блоков попарно . В процессе слияния дубли выкидываем. В итоге будет один файл с уникальными отсортированными записями, а дальше его можно в БД, а можно как есть использовать, если надо только читать. Например при 8 Гб оперативки получим 256 файлов. По загрузке диска: 1+8 циклов чтение-расчет-запись на диск. Для 18 Тб на скорости 100 Мб/сек потребуется 50 часов дискового IO. Можно потоковое сжатие использовать, gzip/deflate, тогда в несколько раз быстрее работа с диском будет и места меньше потребуется. Первый этап, т.е. первичная сортировка блоков, будет тормозной из-за проца, т.к. там больше проц будет загружен, поэтому его лучше распараллелить по количеству ядер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:32 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
mayton, я много задач могу решить, но это вовсе не значит, что я должен решать каждую :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:33 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovmayton, я много задач могу решить, но это вовсе не значит, что я должен решать каждую :-) Ну ОК. На самом деле в вашей задаче интересен только 150Гб файл. Все остальное решается как угодно... sort, uniq, база. И у меня для вас минимум два алгоритма. Было. Сейчас я думаю что вам с Delphi+MSSQL сам бох велел залить в табличку с опцией IGNORE_DUP_KEY. Тут я думаю траблы будут другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:44 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovmikron, во-первых, записей никогда не будет больше, чем слов в одном языке , во-вторых, они прекрасно лягут в хеш-таблицу в памяти . Мне кажется ваше допущение не коректно, что запись равна слову язука. Автор сказал что запись содержит слово языка но не значит что она / запись состоит только из слова. В любом случае ваше допущение не обяснит как автор набрал 2 тб данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:44 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
maytonAleksandr Sharahovmayton, я много задач могу решить, но это вовсе не значит, что я должен решать каждую :-) Ну ОК. На самом деле в вашей задаче интересен только 150Гб файл. Все остальное решается как угодно... sort, uniq, база. И у меня для вас минимум два алгоритма. Было. Сейчас я думаю что вам с Delphi+MSSQL сам бох велел залить в табличку с опцией IGNORE_DUP_KEY. Тут я думаю траблы будут другие. Сорян. Не туда запостил ну вобщем-то к автору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:46 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Жаль, что не удалось услышать начальника транспортного цеха. Автор так ничего и не сказал, как организованы его 180 петабайт данных, из фраз "проверить дубликаты и скомпоновать данные" "Файлы представляют собой хранилища слов всех языков мира" и "собираюсь писать на Delphi" никак непонятна организация слов в файлах и дубликаты чего ему, автору, надо проверять. Мне кажется, автору надо установить сумму вознаграждения и написать в форум "Работа". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:47 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
mikronAleksandr Sharahovmikron, во-первых, записей никогда не будет больше, чем слов в одном языке , во-вторых, они прекрасно лягут в хеш-таблицу в памяти . Мне кажется ваше допущение не коректно, что запись равна слову язука. Автор сказал что запись содержит слово языка но не значит что она / запись состоит только из слова. В любом случае ваше допущение не обяснит как автор набрал 2 тб данных. Даже если запись занимает 60 байт, то 60 мегабайт в памяти - не проблема. Плюс таблица 16 мегабайт. Загрузка данных хеш-таблицу пройдет практически со скоростью чтения данных с диска, а дубликаты отсеются в процессе загрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 18:50 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovmikronпропущено... Мне кажется ваше допущение не коректно, что запись равна слову язука. Автор сказал что запись содержит слово языка но не значит что она / запись состоит только из слова. В любом случае ваше допущение не обяснит как автор набрал 2 тб данных. Даже если запись занимает 60 байт, то 60 мегабайт в памяти - не проблема. Плюс таблица 16 мегабайт. Загрузка данных хеш-таблицу пройдет практически со скоростью чтения данных с диска, а дубликаты отсеются в процессе загрузки. Это при условии что хэш таблица с результатом будет умещаться в памяти. Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск. Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:06 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Dima TЭто при условии что хэш таблица с результатом будет умещаться в памяти. Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск. Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей? Ну почему не будет-то? 10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:11 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
maytonОткуда вообще 60 байт? Вроде автор вообще не говорил ничего подобного. И при чем здесь сортировка? Автор не говорил, но от чего то надо отталкиватся. Интересно было бы услышать автора сколько у него записей. Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки? Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:12 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
mikronmaytonОткуда вообще 60 байт? Вроде автор вообще не говорил ничего подобного. И при чем здесь сортировка? Автор не говорил, но от чего то надо отталкиватся. Интересно было бы услышать автора сколько у него записей. Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки? Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно? Не верно, я тут уже ссылку давал в 20736814 , почитай. Хеш-таблица отсекает 10^6 дубликатов из 2*10^6 объектов за доли секунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:17 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima TЭто при условии что хэш таблица с результатом будет умещаться в памяти. Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск. Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей? Ну почему не будет-то? 10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6 По тому что 10^ 6 это не обоснованное допущение. Запись может содержать слово языка плюс ещё что то, пусть его перевод на другой язык. Например: allow;ru;разрешать allow;ru;позволять allow;de;erlauben ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:24 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovmikronпропущено... Автор не говорил, но от чего то надо отталкиватся. Интересно было бы услышать автора сколько у него записей. Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки? Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно? Не верно, я тут уже ссылку давал в 20736814 , почитай. Хеш-таблица отсекает 10^6 дубликатов из 2*10^6 объектов за доли секунды. Что конкретно не верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:26 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovDima TЭто при условии что хэш таблица с результатом будет умещаться в памяти. Если не будет - результата думаю будет не дождаться из-за постоянного свопа на диск. Тут автору топика вопрос: какой ожидается размер результата после выкидывания дублей? Ну почему не будет-то? 10^6 слов * 60 байт + 10^6 слов * 2 коэф * (4+4) байт < 100 * 10^6 Мне непонятно откуда цифра 10^6 ? При 10^10 как твоя хэш-таблица отработает? ТС этот момент не пояснил, я не просто так вопрос добавил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:32 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
авторЧто конкретно не верно? В базе пастухова 1 млрд кеев (строк со словами) -- это около 60 гб файл. А ТС оперирует 2 тб данных. То есть в 33 раза больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:36 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
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Что конкретно не верно? Неверно то, что хеш таблица не справится и нужна сортировка. Сортировка, может, и потребуется перед выдачей результата, но не для отсева дубликатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:40 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
>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. сливаем таблицы насчёт индексов - проверить Если есть память - вместо таблиц использовать списки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:43 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
azsxВ базе пастухова 1 млрд кеев (строк со словами) -- это около 60 гб файл. А ТС оперирует 2 тб данных. То есть в 33 раза больше. Это на всех языках, включая числа и другие абракадабры? Сколько слов на самом большом человеческом языке? На гигабайты пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:45 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
mikronАвтор не говорил, но от чего то надо отталкиватся. Интересно было бы услышать автора сколько у него записей. Второй вопрос хорош. Как найти / удалить дупликаты без полной сортировки? Первый уже упомянутый вариант - хеш. Но не будет хорошо работать на большом кол-ве уникальных данных. Есть другие методы, но умеют ли базы данных такое ? Я так думаю что не умеют. А значит только сортировка. Верно? Как вы любите сортировать! Дайте волю - отсортируете всю вселенную а потом выберете unique? Подумайте на следующей идеей. Вам дан текстовый файл. 150Gb. В формате csv. У вас на борту - 8Gb оперативы. Операционка съедает порядка 2Гб и полезных для ваших нужд остается порядка 6Гб. Это и есть эффективное пространство для игр с хешами. Экспериментально я устанавливаю (к примеру) что в Delphi hash табличка 4Гб ключей съедают 6Гб кучи. Накладные расходы тык-скыть. Далее я решаю порезать 150Gb на куски (примерно одинаковые). Будем называть их chunks. По 4Гб ключей. Но не линейно сверху вниз по csv. А по хеш-функции (к примеру md5). Не суть важно какая функция. Считаем сколько будет чанков. Код: javascript 1. Округляем в большую сторону. 38 чанков. И делаем функцию. Типа. Код: java 1. 2. 3. Я утверждаю что эта функция мапит key в свой чанк всегда. Тоесть одинаковые ключи всегда будут в одном чанке. Далее - дело техники. За 1 проход по 150 Гб файлу мы создаем 38 (попугаев) дисковых чанков. Чтоб дисковая подсистема не сдохла - буферизируем по максимуму. Потом все 38 файлов обрабатываем через Delphi::hashTable и сливаем уникальные в result.csv. Вы спросите вопрос. А не будет ли повторов ключей между чанками. Я отвечу. Не будет. На основании свойств моей волшебной функции. И никакой сортировки. Как вам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:54 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
авторЭто на всех языках, включая числа и другие абракадабры? Сколько слов на самом большом человеческом языке? Это реальные строки, которые (в теории) могут искать в поисковых системах. Например: установка окон в москве скачать windows бесплатно и так далее. Выборка, типа: установк и москв скач и windows исключить бесплатно в grep на 60 гб делаются на hdd за 10 минут, на sed за 12. Такой файл логично делить по числу реальных винтов в системе. --- Мне не понятно, как Вы пришли к выводу, что ТС на 2 тб хранит только уникальные слова всех стран мира. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:56 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
azsxавторЧто конкретно не верно? В базе пастухова 1 млрд кеев (строк со словами) -- это около 60 гб файл. А ТС оперирует 2 тб данных. То есть в 33 раза больше. А что это за база "Пастухова"? Кто этот замечательный человек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 19:57 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovmikron По тому что 10^ 6 это не обоснованное допущение. Запись может содержать слово языка плюс ещё что то, пусть его перевод на другой язык. Например: allow;ru;разрешать allow;ru;позволять allow;de;erlauben Всю остальную хрень не читаем из файла, для отбора дубликатов она не требуется. Интересный поворот мысли. Другими словами в моём примере вы удалите все строчки за исключением первой как дубликаты? Вас ничего не смущяет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 20:00 |
|
||
|
Работа с большими данными
|
|||
|---|---|---|---|
|
#18+
azsxЭто реальные строки, которые (в теории) могут искать в поисковых системах. Например: установка окон в москве скачать windows бесплатно Тогда это немного не то, что есть у автора в качестве исходных данных. azsxМне не понятно, как Вы пришли к выводу, что ТС на 2 тб хранит только уникальные слова всех стран мира. Напротив, из его слов можно предположить, что у него есть некие тексты на языках народов мира. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2017, 20:03 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39508120&tid=1340295]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 301ms |

| 0 / 0 |
