powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как отсортировать 1 миллиард записей?
336 сообщений из 336, показаны все 14 страниц
Как отсортировать 1 миллиард записей?
    #40034176
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как отсортировать 1 миллиард записей?

Максимум который сортирует mySQL - 3 миллиона записей. И то, начинаются страшные тормоза и зависание.

Что делать?
Спасибо.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034191
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

а что мешает отсортировать снаружи обычным sort, ограниченным лишь размером свободного места на диске?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034193
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

настройки проверял? там сказано про сортировку
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034194
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

интересно, для чего такой огромный выбор?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034203
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
miltorg,интересно, для чего такой огромный выбор?
Скажем так, пользователю миллиард отсортированных записей точно не нужен.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034218
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

похоже на DW или ML задачу. У меня тоже есть таблицы с более, чем миллиардом записей и трансформация их в таблицы, содержащие уже полтора миллиарда записей. Но на PostgreSQL. MySQL на таких объемах применять не рискнул.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034225
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Максимум который сортирует mySQL - 3 миллиона записей. И то, начинаются страшные тормоза и зависание
Перечитал несколько раз - и так и не понял, о чём вообще речь...

Нормально всё сортируется - при наличии подходящего индекса. А без него любая СУБД заткнётся на сортировке больших объёмов (или Вы всерьёз полагаете, что "взрослые" СУБД используют какие-то суперские алгоритмы сортировки, которые в разы эффективнее, чем у MySQL? огорчу...).

miltorg
Как отсортировать 1 миллиард записей?

Добавить в запрос предложение ORDER BY с требуемым выражением сортировки.

Для более осмысленного ответа недостаточно данных. Нужны как минимум: точный текст запроса, точные DDL всех задействованных таблиц, статистика по данным.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034229
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
или Вы всерьёз полагаете, что "взрослые" СУБД используют какие-то суперские алгоритмы сортировки, которые в разы эффективнее, чем у MySQL?

Про эффективность ничего не скажу, так как не сравнивал, но то, что в нормальных СУБД объем сортируемых данных ограничен только доступным дисковым пространством или явно заданными лимитами на его использование, знаю точно.
За счет сочетания sort-merge, скорость сортировки, как только сортируемый набор не помещается в запрошенную планировщиком память, зависит от объема почти линейно. Точнее линейно на фазе сортировки, а на фазе слияния нарастание логарифмическое по основанию 2 или более.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034235
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
в нормальных СУБД объем сортируемых данных ограничен только доступным дисковым пространством или явно заданными лимитами на его использование
Вот за этой фразой явно скрывается утверждение, что у MySQL есть некий порог объёма данных, выше которого сервер откажется выполнять сортировку... по-моему, Вы сказали немного не то, что хотели.

Любая СУБД теоретически выполнит сортировку любого объёма данных - во всяком случае в пределах объёмов, определяемых возможностями СУБД по хранению и обработке. И, по-моему, сейчас все СУБД, столкнувшись с необходимостью сортировки массива, не умещающегося в памяти, используют внешнее слияние.

ptr128
линейно на фазе сортировки
Было бы странно, если бы время сортировки чанка зависело не только от количества записей в нём.

ptr128
на фазе слияния нарастание логарифмическое по основанию 2 или более
А вот это уже странно... По идее процесс обратного слияния пропорционален общему объёму данных, помноженному на log2 от количества чанков. В то же время оптимальное количество чанков пропорционально квадратному корню из объёма данных. То есть в отсутствие эффектов файловой системы зависимость должна быть линейной.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034294
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиент готов запустить свой компьютер хоть на неделю.

Поэтому задачу придётся решать. Итак. Есть строчечный файл:

Код: php
1.
2.
3.
4.
5.
6.
7.
...
...
4.5.2012	3 8 9 11 16 28 30 31 35 37 40 43 48 53 54 58 59 60 61 68
5.5.2012	5 6 8 11 16 18 19 22 25 34 37 40 42 51 55 59 61 64 65 69
6.5.2012	10 15 16 18 23 24 27 29 31 33 36 38 53 55 57 58 62 66 67 68
...
...



То есть дата и 20 цифр. Строчек в файле - 5000. Будут добавляться - по 1 в день

Из каждой строчки берётся 10 цифр и из них делаются не повторяющиеся комбинации:

Код: php
1.
2.
3.
4.
5.
6.
4.5.2012	3_8_9_11_16_28_30_31_35_37
4.5.2012	3_8_9_11_16_28_30_31_35_40
...
...
...
4.5.2012	40_43_48_53_54_58_59_60_61_68
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034296
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Символ подчёркивания - пожелание заказчика - то есть его наличие - не критично

Нужно получить все совпадения. В идеале в виде сортировки. То есть на самом верху таблицы:


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
4.5.2012	3_8_9_11_16_28_30_31_35_37
7.12.2017 3_8_9_11_16_28_30_31_35_37
5.12.2019 3_8_9_11_16_28_30_31_35_37
...
...
...

3.5.2016	3_8_9_11_16_28_30_31_35_40
3.5.2020	3_8_9_11_16_28_30_31_35_40
...
...
...
4.5.2012	40_43_48_53_54_58_59_60_61_68
...
...
...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034299
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строить все комбинации, а потом искать совпадение - это [censored].

Надо нормализовать данные, потом выполнять сравнение, получая для каждой пары дат количество совпадений, а вот потом для тех пар, у которых это количество превышает 10, строить десятки значений.

PS. Даже всё описанное - это не задача, а выбранный способ решения некоей неозвученной задачи. И не факт, что способ выбран правильно...

PPS. Если Вы в форуме по MySQL - то пишите дату в его формате, YYYY-MM-DD.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034302
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До одного миллиона записей всё грузилось чудно и быстро. Я открывал phpmyAdmin. Запросто и радостно делал сортировку.

На 2 миллионах записей стала притормаживать сортировка - до 1 минуты.

На 3 миллионах записей - я не смог даже просто открыть страницу в phpmyAdmin. Просто. Без никакой сортировки.

-----------------------

Вот и весь мой рассказ. Это всё было на хостинге. Теперь клиент выделяет под это дело отдельный комп - который"может работат хоть неделю - лишь бы был результат"

Что и как делать? Выделенный комп - под Виндос

Спасибо.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034307
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Дата написана в формате который пожелал заказчик.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034308
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

1. Я просто недостаточно знаю MySQL, чтобы утверждать, использует ли он сортировку-слияние с использованием диска или нет. При этом в PostgreSQL и MS SQL уход сортировки на диск/tempdb явно отображается в плане запроса. Про MySQL в этом вопросе не нашел вообще ни слова в гугле.

2. Прошу прощения, я и имел в виду N*log2(N) или меньше, в случае полифазного слияния.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034316
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Есть строчечный файл:

Код: php
1.
2.
3.
4.
5.
6.
7.
...
...
4.5.2012	3 8 9 11 16 28 30 31 35 37 40 43 48 53 54 58 59 60 61 68
5.5.2012	5 6 8 11 16 18 19 22 25 34 37 40 42 51 55 59 61 64 65 69
6.5.2012	10 15 16 18 23 24 27 29 31 33 36 38 53 55 57 58 62 66 67 68
...
...



То есть дата и 20 цифр. Строчек в файле - 5000.

Данные в нём - не секретные? можно выложить его? зипануть и прикрепить к сообщению...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034319
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
...
PS. Даже всё описанное - это не задача, а выбранный способ решения некоей неозвученной задачи. И не факт, что способ выбран правильно...

Это да.

Описание похоже на "группировку по комбинации", то есть по сочетаниям по 10 из 20

С (20) (10) = 184,756
это худший случай, когда все 20 чисел разные
Сортировка, видимо, сначала нужна только для того, чтобы образовать строковый ключ сочетания .
Всего строк получается:
184756*5000 = 923 780 000 строк, для которых надо дальше сделать Group by ключу сочетания и датам

5 тысяч сортировок наборов из 20 элементов, ну это не должно быть неподъемным.
Но группировка сколько -то потребует, от числа уникальных групп зависит.
На таких размерах пару-тройку минут и подождать прилично.

Хотя, если бы был известен физический смысл задачи, может быть нашлись какие-то пути сокращения размерности.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034320
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз ничего не предложили - я вижу только одно решение:

1. Возможно что нужно упорядочить-отсортировать исходный файл - хуже от этого не будет - точно

2. Набивать БД постоянно держа её в отсортированном - то есть в готовом виде.

3. Добавлять буквально по 1 миллиону записей или меньше - продолжая держать БД в готовом виде. После каждой записи?

4. Не открывать никакого phpmyAdmin - раз он тормозит.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034321
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс. совсем забыл.
Писать то придётся под Виндос. Какую БД взять?
Ведь всё равно придётся что-то ставить.
Спасибо.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034324
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вспомнил ещё. Если выгрузить всё в виде текстовых файлов то получится около 50 ГБ.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034336
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Если выгрузить всё в виде текстовых файлов то получится около 50 ГБ.
5000 строк по 20 чисел плюс дата? серьёзно?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034348
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоесть нужно определить что в 12 и 17 итд годах были события (хромосомы) с одинаковыми атрибутами?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034354
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик немного похож на унификацию

https://www.sql.ru/forum/1270456-1/tyapnichnaya-unifikaciya

и хотя там постановка про другое - про устранение дублей но то что обсуждалось - может быть применено и здесь.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034361
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Вариации 10 из 20 из каждой из 5 тысяч строк
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034364
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg , Вы упорно уходите от темы озвучить собственно задачу. Ну это я ещё понимаю - конкуренция и всё такое.

Но Вы хотя бы определите требуемый результат - мне почему-то крайне сомнительно, что в качестве финального итога нужны все, абсолютно все, вариации каждой из записей, просто специальным образом сортированные. Финального - в смысле совсем. Ибо я вполне допускаю, что для завершения текущей подзадачи и для передачи следующей подзадаче это может быть допустимый формат. Равно как и сомневаюсь в оптимальности именно такого формата.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034376
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
Нужны наиболее повторяемые записи. Ну пусть 10 записей или 20.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034377
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вероятно что вы хотите найти другой алгоритм решения - это очень интересно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034378
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://it-pearls.ru/top-10-sistem-upravlenija-bazami-dannyh/

авторЭта система управления базами данных использует стандартную форму SQL. Утилиты для проектирования таблиц имеют интуитивно понятный интерфейс. MySQL поддерживает до 50 миллионов строк в таблице. Предельный размер файла для таблицы по умолчанию 4 ГБ , но его можно увеличить. Поддерживает секционирование и репликацию, а также Xpath и хранимые процедуры, триггеры и представления.


Это как это???!!!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034383
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg


Вот и весь мой рассказ. Это всё было на хостинге. Теперь клиент выделяет под это дело отдельный комп - который"может работат хоть неделю - лишь бы был результат"

Что и как делать? Выделенный комп - под Виндос

Спасибо.


Коробочное решение - найти любую dbms которая поддерживает до 1 000 000 000 rows на табличку.
Загрузить туда эту колбасу из хромосом. Проиндексировать второе поле.

И сделать что-то вроде

Код: sql
1.
SQL> select count(*), chromosome from tab group by chromosome order by 1 desc



Коробочное решение - не спортивное.

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

Но основная оптимизация должна базироваться на минимизации пробегов по файлу.
Желательно от 1 до 3. Поскольку файл большой и вся нагрузка упадет 80% на ожидание
чтения диска.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034392
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Нужны наиболее повторяемые записи. Ну пусть 10 записей или 20.
О! так это ж совсем иная задача. Требующая совсем иного подхода. И первым делом, как я и сказал, данные нужно нормализовать.

Кстати, какое количество различных значений может встретиться среди тех "20 разных на одну дату" по всему массиву?

miltorg
вероятно что вы хотите найти другой алгоритм решения - это очень интересно.

Однозначно. И первое, что следует сделать - забыть про намерение обойтись одним запросом. Хранимая процедура. Это позволит сбрасывать промежуточные данные в статические таблицы и изрядно компенсировать недостаточный объём оперативной памяти.

miltorg
Это как это???!!!

Ну ты на сайт посмотри! АйТи-перлы... ну или ежели по-нашему - откровенная глупость там написана.
Не обращай внимания - от британских учёных и не такое читали...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034393
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

В связи с отстутствием подобных объемов на MySQL, попробовал отсортировать миллиард записей на PostgreSQL. Меньше, чем за 7 минут получилось.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034394
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
В связи с отстутствием подобных объемов на MySQL
Даже на устаревшем движке MyISAM - 256 Тбайт на таблицу не предел. Надо ли говорить, что при указанной структуре миллиард записей туда влезает, даже не задевая стенок?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034395
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Вы неверно меня поняли. У меня просто на MySQL нет таблиц с миллиардом записей и даже нет места такую таблицу создать (тестировал на таблице размеров в 200ГБ). А на PostgreSQL такие таблицы уже имеются в наличии.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034397
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте теперь спортивное решение.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034400
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128, если это правда - то спасибо вам огромное. Вы вселили в меня надежду что я наконец то справлюсь с этой задачей.

В чём же была моя ошибка? В том что я пытался сортировать в phpmyAdmin?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034402
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,
все возможно. Я для общения с БД не часто пользуюсь GUI, предпочитая писать запросы руками.

P.S. Попробуйте DBEaver. Может понравится.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034403
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для всех.
Помогите пожалуйста:

1. На Убунту Ставлю сейчас mySQL, Апач, phpmyAdmin
2. Создаю таблицу в базе: id mydata и iz2010
3. Я с Индексом - не совсем понимаю - нужно сразу на поле iz2010 задать индекс?

4. Наполняю до миллиона - говорю вам результат.

Спасибо.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034406
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg

[b]3. Я с Индексом - не совсем понимаю - нужно сразу на поле iz2010 задать индекс?

Индекс можно построить потом. Есть даже рекомендации от Oracle, что для быстрой загрузки
данных из CSV в бд - сначала грузят просто данные. Потом включают на таблицах триггеры и индексы.

В сумме выходит быстрее.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034407
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте теперь спортивное решение.


По поводу спорта.

Предусловия.

Для современного ПК объем доступной оперативной памяти в среднем составляет 8Г. И на этот объем
мы можем расчитывать в реализации алгоритмов.

Объем диска - неограничен. И характер доступа к файлу - последовательный. Объем файла - 1 000 000 000 * длину строки =
= длина даты + длина хромосомы + пробелы и переводы строк = 1 + 1 + 8 + 60 символов (байт) = 70 000 000 000 байт =
= 70 Гигабайт.

Можно создавать дополнительные служебные файлы для решения данной задачи.

Гипотеза 1.

Если данных - много (миллиард) а ключ такой длинный (5 6 8 11 16 18 19 22 25 34 37 40 42 51 55 59 61 64 65 69)
то велика вероятность что 99.9% данных в таблице - будут уникальны.

Далее.

Если так много уникальных - то они не интересны как исходные данные. Тоесть гистограмма где-то
такая.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
COUNT(*), chromosome
500 000, "1 2 3 4 5 5 5 5 5 5..."
250 000, "2 2 3 4 5 5 5 5 5 5..."
150 000, "3 2 3 4 5 5 5 5 5 5..."
10, "4 2 3 4 5 5 5 5 5 5..."
1, "? ? ? ?...."
1, "? ? ? ?...."
1, "? ? ? ?...."
.....



В этой задаче - можно сделать сильную оптимизацию если сделать 2 прохода по текстовому файлу и
отбросить те ключи которые были по 1 разу.

1) За 1 проход отфильтровываем (отбрасываем) эти 99.9% уникальных ключей. Используем in-memory
структуры данных с экономной формой представления ключей. Сохраняем те что остались
как кандидаты с (candidates.csv). Здесь я опираюсь на доступные мне 8Гб.

2) На 2 проходе их кандидатов - формируем хеш-табличку и в ней ведем подсчет количества.
Здесь я тоже предполгагаю что оставшиеся 0.1 % ключей лягут как хеш-табличка в 8Гб.

3) Публикуем top 20 результатов из этой таблички с сортировкой по count.

Весь этот алгоритм потребует 2 пробега по файлу. И он будет работать только на условиях тех гипотез
что я описал. Если баланс уникальных - неуникальных ключей в гистограмме будет не 99 к 1 а более
другой то памяти не хватит для 1 фазы алгортма и мы упадем по out of memory.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034408
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
miltorg

[b]3. Я с Индексом - не совсем понимаю - нужно сразу на поле iz2010 задать индекс?

Индекс можно построить потом. Есть даже рекомендации от Oracle, что для быстрой загрузки
данных из CSV в бд - сначала грузят просто данные. Потом включают на таблицах триггеры и индексы.

В сумме выходит быстрее.


Я это видел воочию. Стоит только поставить на поле Индекс - время загрузки очень существенно увеличивается.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034409
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Я ничего не понял.

На 3 миллионах записей - совпадений примерно 5 - одна штука, 4 совпадения - 2 штуки, 3 совпадения - не очень то и нужны.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034411
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. Тоесть тройки и двойки и единички - в сад.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034412
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg

Я ничего не понял.

Сорян.

Я иногда излагаю сумбурно потому что мысль опережает пальцы. Впрочем я могу написать макет кода на Java
а участники попробуют сами что-то там поковырять и понять лучше. Один финский парень сказал что код
лучше слов. Я с ним согласен но читатели тоже должны быть в контексте того что происходит.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034415
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
хотел вам ссылку на исходный файл послать - но что-то не нашёл как.
Как?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034418
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

а не проще ли выявлять совпадения сразу же при попадании их в таблицу? То есть, в триггере, при обнаружении совпадения просто записывать ссылку на него в другую таблицу.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034419
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg

Пока не надо. Тем более что если 50Гигов качать. Это... нудно как-то.

Лучше-бы был генератор шума который формировал бы файл с аналогичной гистограммой хромосом.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034422
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
хотел вам ссылку на исходный файл послать - но что-то не нашёл как.
Как?
7zip сжимать пробовал?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034423
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mysql> CREATE DATABASE dbiz2010;
Query OK, 1 row affected (0.01 sec)

mysql> USE dbiz2010;
Database changed
mysql> CREATE TABLE tabiz2010
    -> (
    ->     Id INT,
    ->     Dannye VARCHAR(40),
    ->     myData VARCHAR(12)
    -> );
Query OK, 0 rows affected (0.05 sec)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034425
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю.
Сейчас попытаюсь всё сделать как раньше. А там дальше буду-будем думать.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034426
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Исходник - маленький. - 5 тысяч строк по 20 цифр
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034430
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изменил:

Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE tabiz2010
(
    id  int(11) PRIMARY KEY auto_increment, 
    Dannye VARCHAR(40),
    myData VARCHAR(12)
);
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034431
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

myData VARCHAR(12) это почему так?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034433
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
mayton,
Исходник - маленький. - 5 тысяч строк по 20 цифр

Опубликуй здесь в форуме хотя-бы 100 строк чтоб было наглядно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034434
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Опубликуй здесь в форуме хотя-бы 100 строк чтоб было наглядно.
присоединяюсь
и что про сжатие 50Г?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034435
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Изменил:

Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE tabiz2010
(
    id  int(11) PRIMARY KEY auto_increment, 
    Dannye VARCHAR(40),
    myData VARCHAR(12)
);


Шапка отличается от этого.

Код: sql
1.
2.
3.
4.5.2012	3 8 9 11 16 28 30 31 35 37 40 43 48 53 54 58 59 60 61 68
5.5.2012	5 6 8 11 16 18 19 22 25 34 37 40 42 51 55 59 61 64 65 69
6.5.2012	10 15 16 18 23 24 27 29 31 33 36 38 53 55 57 58 62 66 67 68



myData - это дата? А Данные - 40 символов. Маловато для второго поля.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034439
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Сейчас. - Организую заполнение - тогда и покажу уже заполнение таблицы.
-------------
Исходник не мой - выложить не могу.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034440
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

разрядность чисел только 1 и 2 знака?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034449
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Да
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034454
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Да
ну тогда к одноразрядным добавить 0 и убрать пробелы
уменьшится размер и сортировка ускорится
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034456
KpoxaPym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
ptr128, если это правда - то спасибо вам огромное. Вы вселили в меня надежду что я наконец то справлюсь с этой задачей.

В чём же была моя ошибка? В том что я пытался сортировать в phpmyAdmin?


На хостинге, мне кажется, квота стоит на доступ к системным ресурсам. Если дело в этом, то обращение из собственного скрипта никак не повлияет на результат. Будет всё то же самое.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034463
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в том, что нужно получить в результате.
csv файл с миллиардом записей?
Можешь попробовать в биг дату в паркет перегнать с партиционированием по полю сортировки.
А так общий совет - "есть слона по кускам" выбрать первую часть данных, по тому полю, по какому сортируют, потом вторую порцию данных и так далее...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034464
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Бердышев,

В результате - нужно 100 первых цифр
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034466
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полезли первые циферки:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> select * from tabiz2010;
+----+----------------------------+----------+
| id | Dannye                     | myData   |
+----+----------------------------+----------+
|  1 | 5_7_8_15_22_23_27_34_37_39 | 2.1.2012 |
|  2 | 5_7_8_15_22_23_27_34_37_40 | 2.1.2012 |
|  3 | 5_7_8_15_22_23_27_34_37_41 | 2.1.2012 |
+----+----------------------------+----------+
3 rows in set (0.00 sec)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034468
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависает. На первой же строке исходника - зависает.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034469
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Зависает. На первой же строке исходника - зависает.
фантастика!!!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034470
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем,

Оно не зависает!
Оно пишет 1000 записей около 20 сек.
Сейчас точно скажу.
Так и должно быть?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034471
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Оно не зависает!
Оно пишет 1000 записей около 20 сек.
Сейчас точно скажу.
Так и должно быть?
все зависит от того что ты делаешь, и что за железо у тебя
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034472
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 тысяч записей - 3 мин !!!

50 записей в секунду.

Так и должно быть?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034474
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
10 тысяч записей - 3 мин !!!

50 записей в секунду.

Так и должно быть?
как ты пишешь?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034475
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

У вас сколько записей в секунду?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034476
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
for($i1=0;$i1<20;++$i1){
  for($i2=$i1 + 1;$i2<20;++$i2){
    for($i3=$i2 + 1;$i3<20;++$i3){
      for($i4=$i3 + 1;$i4<20;++$i4){
        for($i5=$i4 + 1;$i5<20;++$i5){
          for($i6=$i5 + 1;$i6<20;++$i6){
            for($i7=$i6 + 1;$i7<20;++$i7){
              
              for($i8=$i7 + 1;$i8<20;++$i8){
                for($i9=$i8 + 1;$i9<20;++$i9){
                  for($i10=$i9 + 1;$i10<20;++$i10){

$r = "$u[$i1]_$u[$i2]_$u[$i3]_$u[$i4]_$u[$i5]_$u[$i6]_$u[$i7]_$u[$i8]_$u[$i9]_$u[$i10]";
  
$dbh->do("INSERT INTO tabiz2010 VALUES (null, '$r', '$d')");

++$kol;


    goto FFF if $kol>3000;
    if(++$k>1000) {print "$kol\n"; $k=0;}


}}}}}}}}}}
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034477
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

это что такое?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034478
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
что вам не понятно?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034479
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
что вам не понятно?
это генерация случайных значений?
и запись по одной записи?
тогда
автор50 записей в секунду.нормально
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034480
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
10 тысяч записей - 3 мин !!!

50 записей в секунду.

Так и должно быть?

Медленная скорость вставки в БД?

Много может быть причин. Самое тривиальное - у тебя включен режим autocommit.
В этом случае БД напрягается фиксируя каждое движение в общий перформанс низкий.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034481
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

а если в лоб падает?

Код: sql
1.
2.
3.
4.
WITH MyScope AS (
  SELECT id, COUNT(1) OVER (PARTITION BY Dannye) AS Cnt
  FROM tabiz2010 )
SELECT * FROM MyScope WHERE Cnt>3
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034482
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
А как вы предлагаете?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034483
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
А как вы предлагаете?
есть несколько вариантов вставки
когда вставляется по несколько строк.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034484
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034485
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Я в первом сообщении ошибся. Ничего не падает. Просто запись в БД - 50 записей в сек.

Ваш запрос я вообще не понял. Пока никакой сортировки нет. Пока только наполнение.
Я не могу с такой скоростью обработать наполнение даже из одной строки исходного файла.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034486
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Я не могу с такой скоростью обработать наполнение даже из одной строки исходного файла.
https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034487
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

я так понял, что в Вашей таблице миллиард записей и Вы хотите найти те, в которых поле Dannye совпадает больше трех раз.
Именно это запрос и делает.
Или я неправильно понял?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034488
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Спасибо. Хоть и не понятно как этим воспользоваться в моём случае.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034490
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

ты вставляешь из файла? или?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034491
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Вы всё правильно поняли. Но раньше я работал на другой машине - на хостинге - там наполнение шло гораздо веселей. и не вызывало затруднений.

А сейчас я завис даже на наполнении. То есть пока нет никакой сортировки - пока просто наполнение.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034492
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
mayton,

Спасибо. Хоть и не понятно как этим воспользоваться в моём случае.

В консоли это называется autocommit off. Обычно
После этого пачка inserts рассматривается как 1 транзакция а не сто тыщ.
Разумеется в конце надо дать явный commit.

Еще одно. Я не спец в MySQL. Но обычно в БД для пакетной загрузки batch/bulk
insert из текстовых файлов, разработаны готовые утилиты.

Возможно вот эта она https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html

В Oракле ей аналог - sqlloader.

Эти утилиты знаю много workarounds чтоб писать пачками и в 1 транзакцию и
еще и используют другие хитрости.

Тоесть если ты хочешь загрузить лярд строк в БД - то лучше всего на Perl
просто сформировать текстовый файл и потом его прогрузить с помощью mysqlimport.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034493
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

просто записать в файл - сможешь?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034494
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

исходный файл - 5 тысяч строк

день года и 20 цифр

Из 20 цифр нужно сделать различные. неповторяющиеся комбинации из 10 цифр

И так с каждой строкой исходного файла.

Потом сортировка - для того, чтоб найти повторы.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034495
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Запросто и быстро.
Около 50 ГБ получается.
Около часа работы - если кусками.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034496
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Но текстовые файлы сами по себе ничего не сортируют, к сожалению.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034497
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

а в каком виде эти данные сейчаc? И что мешает их загрузить через

Код: sql
1.
2.
3.
SET autocommit=0;
LOAD DATA ... 
COMMIT;
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034498
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Спасибо.
Если я вас правильно понял - нужно пытаться сделать меньше запросов.
Сейчас подумаем как...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034499
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Пока ни в каком вообще. Потому как со скоростью 50 записей в секунду - я до смерти не загружу 1 миллиард :-)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034500
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

ну в каком-то виде эти данные все же должны быть? Иначе грузить нечего.
Вот я и спрашиваю, какой формат исходных данных? Просто текстовый файл? Результат выгрузки mysqldump? Или еще что-то?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034501
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Но текстовые файлы сами по себе ничего не сортируют, к сожалению.
вот руки опускаются, когда не читают что советуют

я ж ссылки дал!!!!
miltorg
Запросто и быстро.
Около 50 ГБ получается.
Около часа работы - если кусками.
дак сделай текстовый файл
потом вставь всё из него
https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034502
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
miltorg,

Но текстовые файлы сами по себе ничего не сортируют, к сожалению.

Если эту задачу поднимать например в Unix форумах - то там она решается мгновенно.

Админы юзают эту утилиту.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$ sort --help
Usage: sort [OPTION]... [FILE]...
  or:  sort [OPTION]... --files0-from=F
Write sorted concatenation of all FILE(s) to standard output.

With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
Ordering options:

  -b, --ignore-leading-blanks  ignore leading blanks
  -d, --dictionary-order      consider only blanks and alphanumeric characters
  -f, --ignore-case           fold lower case to upper case characters
  -g, --general-numeric-sort  compare according to general numerical value
  -i, --ignore-nonprinting    consider only printable characters
  -M, --month-sort            compare (unknown) < 'JAN' < ... < 'DEC'



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

Единственно... для нашего случая где строка - композитная надо ее авк-нуть или гавкнуть. Как-то так. Чтоб
выбрать вторую колонку после даты.

Код: sql
1.
$ cat input.csv | gawk ........ | sort -nr > sorted-input.csv


Опция -nr должна делать подсчет.

Еще некоторые детали по реализаци здесь
http://vkundeti.blogspot.com/2008/03/tech-algorithmic-details-of-unix-sort.html
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034504
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Спасибо! Всё забегало гораздо быстрее.
Гораздо.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034506
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделало 100 тысяч за 2 мин

800 записей в секунду - это уже лучше.

Я что то забыл. А сколько вариантов с одной строки? 10 из 20?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034508
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура! Я обработал 1-ю строку.

Осталось всего то 5 тысяч строк и плюс каждый день по строке. :-)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
180180
181181
182182
183183
184184
sozdan fajl razmerom v 184756 zapisej
v obrabotke 2 stroka


Прошло 4.22 min
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034516
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще такая хакерская штука как "кранч"

Код: sql
1.
2.
3.
4.
5.
6.
7.
$ crunch  --help
crunch version 3.6

Crunch can create a wordlist based on criteria you specify.  The output from crunch can be sent to the screen, file, or to another program.

Usage: crunch <min> <max> [options]
where min and max are numbers



С моей точки зрения она - годится для брутфорса. Но авторы - завуалировано сообщают что это создавалка "списка
слов базирующихся на критериях".

Вобщем если эти хромосомы - суть 10 цифр в 20 ричной системе счисления - то мы можем их всех сгенерить так.
Код: sql
1.
$ crunch 20 20 0123456789abcdefghijk --stdout | gawk ... здесь отрезать первые 10
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034517
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
miltorg,

а если в лоб падает?

Код: sql
1.
2.
3.
4.
WITH MyScope AS (
  SELECT id, COUNT(1) OVER (PARTITION BY Dannye) AS Cnt
  FROM tabiz2010 )
SELECT * FROM MyScope WHERE Cnt>3



Спасибо. Вроде пока совсем быстро:

Код: plsql
1.
2.
3.
4.
5.
mysql> WITH MyScope AS (
    ->   SELECT id, COUNT(1) OVER (PARTITION BY Dannye) AS Cnt
    ->   FROM tabiz2010 )
    -> SELECT * FROM MyScope WHERE Cnt>3;
Empty set (4.12 sec)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034527
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушайте. А ведь вроде не имеет никакого смысла сортировать исходную строку если в ней не совпадают как минимум 10 цифр

Почему я раньше до этого не додумался?
Или нет?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034529
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется что если выкинуть эти глупые циклы и заменить их на нормальный поиск в глубину - то
можно просто учесть лексикографический порядок сортировки и получать на выходе сразу
сортированный набор.

Не?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034530
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Все решается с помощью мат анализа (я такое еще в школе на высшей математике лузал как семечки). Погуглите по слову комбинаторика (там много подобных задач с формулами для решения - выбирайте что вам ближе по задаче, я все посты в теме не читал). Единственное привести строки к одному виду (в вашем случае начинаться и заканчиваться строка должна подчеркиванием, либо другим разделителем). Но вам конечно виднее. )))
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034533
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70



нужно найти строки имеющие 10 совпадений цифр
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034544
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

for $e (@a, @b) {$inion{$e}++ && $isect{$e}++;}
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034548
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
нужно найти строки имеющие 10 совпадений цифр
Тогда сортировка не поможет. Если должны совпадать не 10 наименьших или наибольших чисел, а любые.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034549
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По смыслу это что-то похожее на https://en.wikipedia.org/wiki/Cosine_similarity , которая часто используется в машинном обучении. У каждой записи есть вектор из 100 признаков. Можно эти данные представить как у ТС: если N-ый признак есть, то в строке присутствует число N.

Другой способ представить эти данные - это сделать 100 столбцов, в каждом из которых ставить либо 0 (если признака нет), либо 1 (если признак есть). В итоге у нас получается разреженная матрица размером 1'000'000'000 х 100. Умножаем её саму на себя, получаем разреженную матрицу 1'000'000'000 х 1'000'000'000. Затем, если видим, что для пары "строка-столбец" значение ячейки больше некоторого значения (либо 10 в случае простого перемножения матриц, либо 0.5 если вычисляли cosine similarity), значит эти записи достаточно похожи друг на друга.

Но здесь не понятен один момент. Если мы сравниваем этот миллиард записей между собой, то это задача кластеризации. Одни похожие записи попадут в один кластер, другие - в другой, и т.д. Задача найти скажем первые 10 наиболее похожих записей просто бессмысленная. Можно объединить такие записи в один кластер:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 23
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 24
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 21 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 22 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 23 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 24 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 25 20
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 21 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 22 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 23 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 24 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 25 19 20
...

Другие похожие записи попадут в другой кластер.

А если у нас на входе допустим одна запись и нужно сравнить её с этим миллиардом записей и найти N наиболее похожих, то это совершенно другая задача.

Я бы сначала разобрался в чем смысл исходной задачи.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034551
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитал тему, и как-то не понял, мне одному кажется что решение задачи в иной плоскости?

Дано: дата и 20 цифр. Почему их не загнать в таблицу "повдоль" в три колонки: номер записи, дата, число (одно!).

В этом разе станет достаточно сопоставить количество совпадающих строк (чисел) у номеров записей в возрастающем порядке и только.

Типа так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
CREATE DATABASE `test`;

USE `test`;

CREATE TABLE sort20 (
    id     INT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    row_id INT(11) UNSIGNED,
    date   DATE,
    number TINYINT(4) UNSIGNED,
    
    INDEX num_idx (number)
) ENGINE = INNODB;

INSERT INTO sort20 (row_id, date, number) VALUES
(1, "2021-01-10", 1),
(1, "2021-01-10", 2),
(1, "2021-01-10", 3),
(1, "2021-01-10", 4),
(1, "2021-01-10", 5),
(1, "2021-01-10", 6),
(1, "2021-01-10", 7),
(1, "2021-01-10", 8),

(2, "2021-01-09", 1),
(2, "2021-01-09", 3),
(2, "2021-01-09", 5),
(2, "2021-01-09", 7),
(2, "2021-01-09", 9),
(2, "2021-01-09", 11),
(2, "2021-01-09", 13),
(2, "2021-01-09", 15),

(3, "2021-01-11", 2),
(3, "2021-01-11", 4),
(3, "2021-01-11", 6),
(3, "2021-01-11", 8),
(3, "2021-01-11", 10),
(3, "2021-01-11", 12),
(3, "2021-01-11", 14),
(3, "2021-01-11", 16),

(4, "2021-01-12", 1),
(4, "2021-01-12", 2),
(4, "2021-01-12", 3),
(4, "2021-01-12", 4),
(4, "2021-01-12", 17),
(4, "2021-01-12", 18),
(4, "2021-01-12", 19),
(4, "2021-01-12", 20)
;

SELECT number, COUNT(row_id) AS cnt1, GROUP_CONCAT(row_id ORDER BY row_id) AS `rows`
FROM sort20
GROUP BY number
HAVING cnt1 > 1
ORDER BY `rows`
;



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

Не?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034552
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут получим:

numbercnt1rows52"1+2"72"1+2"13"1+2+4"33"1+2+4"62"1+3"82"1+3"23"1+3+4"43"1+3+4"

Остается только выбрать такие строки, которые присутствуют в 4-х числах (задачу уменьшил, всего 8, найти совпадение по 4-м), тут это:
1+2, числа: 5,7,1,3
1+3, числа: 6,8,2,4
1+4, числа: 1,3,2,4

Справитесь? :)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034556
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

только подвох в том, что у вас на выходе каждая из строк длиной до миллиарда номеров :) И как эти гигантские строки сравнивать между собой хз, или я чего-то не понял.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034586
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,
не понял я ничего. Вот, например, есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70



Добавьте в строку любую дату или вообще просто пронумеруйте.
И найдите максимальное количество совпадений 10 цифр.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034590
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

любых 10 чисел или только первых?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034591
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Вот например я вчера добавил 5 или чуть больше первых строк и получил

mysql> WITH MyScope AS (
-> SELECT Id, Dannye, COUNT(1) OVER (PARTITION BY Dannye) AS Cnt
-> FROM tabiz2010 )
-> SELECT * FROM MyScope WHERE Cnt>1;
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+--------+-------------------------------+-----+
| Id     | Dannye                        | Cnt |
+--------+-------------------------------+-----+
| 739010 | 19_35_43_50_55_60_61_66_67_70 |   2 |
| 739025 | 19_35_43_50_55_60_61_66_67_70 |   2 |
| 819545 | 2_12_21_28_36_50_53_55_59_66  |   2 |
| 447238 | 2_12_21_28_36_50_53_55_59_66  |   2 |
+--------+-------------------------------+-----+


4 rows in set (18.27 sec)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034592
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,
Забыл. Какую то цифру добавил искусственно. Сейчас
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034593
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
+--------+-------------------------------+-----+
| Id     | Dannye                        | Cnt |
+--------+-------------------------------+-----+
| 819545 | 2_12_21_28_36_50_53_55_59_66  |   2 |
| 447238 | 2_12_21_28_36_50_53_55_59_66  |   2 |
+--------+-------------------------------+-----+




Так должно быть.

Вероятно что это 3 и 5-я строка исходного.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034594
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
miltorg,

Вот например я вчера добавил 5 или чуть больше первых строк и получил

mysql> WITH MyScope AS (
-> SELECT Id, Dannye, COUNT(1) OVER (PARTITION BY Dannye) AS Cnt
-> FROM tabiz2010 )
-> SELECT * FROM MyScope WHERE Cnt>1;
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
+--------+-------------------------------+-----+
| Id     | Dannye                        | Cnt |
+--------+-------------------------------+-----+
| 739010 | 19_35_43_50_55_60_61_66_67_70 |   2 |
| 739025 | 19_35_43_50_55_60_61_66_67_70 |   2 |
| 819545 | 2_12_21_28_36_50_53_55_59_66  |   2 |
| 447238 | 2_12_21_28_36_50_53_55_59_66  |   2 |
+--------+-------------------------------+-----+


4 rows in set (18.27 sec)


Миллион строк за 20 сек.
А дальше будет хуже или линейно будет рости?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034595
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

вот почему не можно сформулировать правильно конечную задачу?
и отвечать на вопросы
ptr128
любых 10 чисел или только первых?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034596
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Arhat109,

только подвох в том, что у вас на выходе каждая из строк длиной до миллиарда номеров :) И как эти гигантские строки сравнивать между собой хз, или я чего-то не понял.


Откуда взяли миллиард номеров, если их в исходном сообщении указано 5000 "всего" и прирост по одному в день? Скуль стока не проживет .. кмк. ;)

Как понимаю:
1. в числах строки нет повторов, отсюда их можно упорядочить по возрастанию
2. числа в строке максимум двухзначные, стало быть крайнее число: 99
3. Сама табличка не велика, но простой перебор комбинаций - огромен.

Отсюда:
Даже если одно и тоже число присутствует в каждой строке - в сборке длина строки не может превысить количество номеров строк.

Откуда "миллиарды"?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034597
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Потому что мне не понятен вопрос. Какие первые цифры? Откуда это взялось? Откуда?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034598
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Потому что брать нужно 10 цифр из строки. 10.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034599
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Arhat109,
не понял я ничего. Вот, например, есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70



Добавьте в строку любую дату или вообще просто пронумеруйте.
И найдите максимальное количество совпадений 10 цифр.


Добавил и даже пронумеровал. Посмотрите пример, он упрощен, там всего по 8 цифирек на строку. Можно скопировать и проверить..
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034600
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
А дальше будет хуже или линейно будет рости?

Я Вам сразу предлагал использовать триггер для выделения дупликатов. Но задачу Вы не озвучили толком. Если таблица пополняется регулярно и задача выделения дупликатов тоже регулярна, то триггер будет эффективней. Если задача разовая - то нет.

Так же Вы не описали, какие ограничения на этот ряд чисел накладывается. Например, если числа ограничены 128 и всегда записаны по возрастанию, эффективней будет кодировать их битовой строкой длиной всего в 16 байт. И быстрее сравнивать.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034601
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Arhat109,

Потому что брать нужно 10 цифр из строки. 10.


В вашем варианте в строке 20 цифирек, а брать надо 10. В моем примере в строке 8 цифирек, а беру 4. Мне было лениво рисовать инсерт на 20 цифирек для каждой строки. Это как пример иного подхода к решению. Строку надо хранить в мускуле повдоль, а не поперек. Тогда можно группировать и считать итого..
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034602
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Какие первые цифры? Откуда это взялось? Откуда?


miltorgнайдите максимальное количество совпадений 10 цифр.

ptr128любых 10 чисел или только первых?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034603
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Дайте пожалуйста результат.
Если он есть и он правильный - тогда интересно.
А ломать голову... - я правда ничего в вашей теории не понял.
Тем более вы про 8 цифр.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034604
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
Строку надо хранить в мускуле повдоль, а не поперек.

Если при этом миллиард строк превратится в десять миллиардов, то вряд ли. А вот использование битовой строки в данном случае выглядит привлекательно. Но недостаточно данных от ТС, чтобы в этом убедиться.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034605
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

тут непонятна постановка задачи целиком .. если табличка растет (по одной записи в день), то не факт что триггер сильно поможет, да и вообще востребован.

Как вариант подхода (числа - двухзначные), ещё можно их запихать в табличку со 100 полями (булевыми): есть в этой строке такая цифра или ее там нету и смотреть у каких строк поле имеет значение "есть такая цифирька"..
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034607
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,
Задача пополняется как минимум каждый день.
А в перспективе - задачи которые пополняются значительно чаще. 3 раза в час или даже хуже.
Добавляется 1 строка.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034609
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

тогда лучше поручить выделение дупликатов триггеру. Но это верно только исходя из того, что 99% строк уникальны.
Так в каком диапазоне находятся исходные числа? [0,1000000]? [1,100]? [-10000,10000]?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034611
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Arhat109,

Дайте пожалуйста результат.
Если он есть и он правильный - тогда интересно.
А ломать голову... - я правда ничего в вашей теории не понял.
Тем более вы про 8 цифр.


Там же есть всё, что Вам требуется: создание таблички, вставка значений, запрос, что формирует промежуточный результат с выбранными строками с данной цифирью .. и даже его результат.

Все что осталось, это выделить из результата то, что требуется найти: номера строк и сколько раз они встречаются в результате. Показал даже какой результат надо получить вторым этапом.

.. просто я бы его не стал делать в скуле, а реализовал бы "на клиенте". Все что требуется это операция поиска подстроки в строке результата.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034613
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

тема началась с 1 млрд. записей, потом ТС начал наводить тень на плетень про какие-то файлы по 5000 записей.

Количество комбинаций при выборе из 100 чисел по 20 чисел в одной строке без повторов равно n!/(k!*(n-k)!) = 100!/(20!*80!) = 10^21. Непонятно какое распределение у чисел, может какие-то встречаются на много чаще других, но если считать вероятность появления всех чисел одинаковой. И если всего записей 10^9, то вероятность полного совпадения каких-нибудь двух записей совсем ничтожная. Вычисление вероятности совпадения хотя бы 10 цифр я не осилил, но наверное тоже не очень большая. Я просто пытаюсь прикинуть сколько вообще может быть записей на выходе. В зависимости от распределения может быть ни одной, а может и миллиард, если все записи похожи.



Я всё равно не понимаю в чем задача. milltorg можешь ответить на эти вопросы?

1) В каждой записи 20 чисел. Мы считаем, что записи похожи, если в них совпадают любые 10 чисел? Например, эти три записи похожи? Или третья не считается похожей?
Код: sql
1.
2.
3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21



2) Что делать с такими записями?
Код: sql
1.
2.
3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 51 52 53 54 55 56 57 58 59 60
21 22 23 24 25 26 27 28 29 30 51 52 53 54 55 56 57 58 59 60

1-ая и 2-ая похожи между собой. 2-ая и 3-я тоже похожи между собой. Но 1-ая и 3-я вообще не имеют ничего общего. На выходе нужно выводить все 3 записи?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034616
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,

Ну ТС действительно утомил уже тем, что не может четко озвучить поставленную задачу во всех подробностях.
А мы уже гадаем на кофейной гуще, пытаясь хоть как-то восстановить отсутствующую информацию )))
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034619
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,

Про миллиард записей ТС внятно ответил, что это попытка решения его задачи в лоб, перебором. Сама табличка - типа 5000 записей по 20 чисел. Как видно из последнего, там даже поле даты не актуально, но внезапно выяснилось что пополняться она может существенно резвее, чем в раннем описании "раз в день", что меняет подход к решению задачи и вариант с триггерами и сбором статистики в иное место становится вполне актуальным.

Мне "показалось", что это задача из области поиска "выигрышного билетика" в столото или что-то подобное .. найти сколько выигрышных билетов в комбинации по 10 цифр (двухзначных как было заявлено) из набора в 20 заполняемых ... продаются билетики, прилетают "строчки" .. по ним смотрим наиболее популярные цифирьки.

Но это моя трактовка ..
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034622
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё в продолжение:

3) Что делать с разными группами похожих записей?
Код: sql
1.
2.
3.
4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 21 22 23 24 25 26 27 28 29 30
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
41 42 43 44 45 46 47 48 49 60 61 62 63 64 65 66 67 68 69 70

Например здесь похожи 1-ая и 2-ая. И 3-я и 4-я тоже похожи между собой. Есть две группы похожих записей: 1+2 и 3+4. На выходе нужно выдавать все 4 записи?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034625
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение второй части на скуле (раз сами не справились)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT t1.row_id, COUNT(t2.number) AS cnt, GROUP_CONCAT(t2.number order by t2.number separator "+") AS nums
FROM (
    SELECT row_id FROM sort20 GROUP BY row_id
) t1
JOIN (
    SELECT number, COUNT(row_id) AS cnt1, GROUP_CONCAT(row_id ORDER BY row_id) AS `rows`
    FROM sort20
    GROUP BY number
    HAVING cnt1 > 1
    ORDER BY `rows`
) t2 ON LOCATE(t1.row_id, t2.`rows`)>0
GROUP BY t1.row_id
HAVING cnt>=4
ORDER BY cnt DESC
;



и его результат:
row_id cnt numbers181+2+3+4+5+6+7+8241+3+5+7342+4+6+8441+2+3+4
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034627
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

если это что-то типа лото, то тогда нужно сравнивать записи не между собой, а с выпавшей комбинацией?

Я поэтому и засомневался сначала: это задача кластеризации записей (тогда сравниваем их между собой, выделяем кластеры похожих записей, но это слишком ядреная задача и слишком много вопросов) или задача поиска наиболее похожей записи (например, на входе есть одна запись с выигрышной комбинацией и нужно найти все записи, которые на неё похожи). У меня ощущение, что ТС хочет решить 2-ую задачу, но описывает 1-ую.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034628
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,
Я ведь дал образец.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034629
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,

как вариант это подготовка к тиражу, и выбрать надо иное.. :)

В целом лучше использовать функцию find_in_set() вместо locate() или дополнять начало и конец строки запятыми и сравнивать включая запятые тоже. Иначе можно получить "не совсем то" или даже "совсем не то".

Но это уже думаю, ТС справится самостоятельно. :)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034630
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Результат нужен вот в таком виде:

Код: sql
1.
2.
3.
4.
5.
6.
+--------+-------------------------------+-----+
| Id     | Dannye                        | Cnt |
+--------+-------------------------------+-----+
| 819545 | 2_12_21_28_36_50_53_55_59_66  |   2 |
| 447238 | 2_12_21_28_36_50_53_55_59_66  |   2 |
+--------+-------------------------------+-----+



это требование заказчика
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034631
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Arhat109,

Результат нужен вот в таком виде:

Код: sql
1.
2.
3.
4.
5.
6.
+--------+-------------------------------+-----+
| Id     | Dannye                        | Cnt |
+--------+-------------------------------+-----+
| 819545 | 2_12_21_28_36_50_53_55_59_66  |   2 |
| 447238 | 2_12_21_28_36_50_53_55_59_66  |   2 |
+--------+-------------------------------+-----+



это требование заказчика


Цена вопроса?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034633
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

То есть ваше прежнее решение - Туфта?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034637
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

но по образцу невозможно судить о допустимом диапазоне чисел в нем. Можно только на кофейной гуще гадать. Или закладываться по самые помидоры, считая что числа могут быть в диапазоне от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 )))
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034654
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Arhat109,

То есть ваше прежнее решение - Туфта?


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

Возможно потребуется иное решение. Мне - это не известно, т.к. постановку задачи Вы не сделали. Но, в том ключе как Вы ее поставили тут выше - чем Вам не "решение"? Просто дешево и без переборов миллиардов записей.

Свое любопытство я - удовлетворил, Вам нужно в ином виде? Ну так или справляйтесь самостоятельно или объявляйте ценник.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034657
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Александр Бердышев,

В результате - нужно 100 первых цифр

Ну так напиши LIMIT 100
Если будут проблемы - в условие WHERE добавь условие по полю сортировки.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034666
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Слушайте. А ведь вроде не имеет никакого смысла сортировать исходную строку если в ней не совпадают как минимум 10 цифр

Почему я раньше до этого не додумался?
Или нет?


Мой метод вроде как работает:

Код: sql
1.
2.
3.
4.
5.
6.
7.
10 -- 2_12_21_28_36_50_53_55_59_66 !!!!! Sovpali 2 and 4 str
10 -- 3_5_24_26_28_50_53_55_59_66 !!!!! Sovpali 2 and 13 str
11 -- 2_3_5_15_23_28_37_38_50_53_59 !!!!! Sovpali 2 and 15 str
10 -- 11_15_16_29_32_35_42_43_62_63 !!!!! Sovpali 5 and 17 str
10 -- 7_8_21_27_30_49_50_53_54_68 !!!!! Sovpali 6 and 8 str
11 -- 1_5_11_16_20_22_25_26_47_56_70 !!!!! Sovpali 12 and 16 str
10 -- 8_15_17_26_35_37_42_44_50_69 !!!!! Sovpali 18 and 19 str
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034776
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
а что мешает отсортировать снаружи обычным sort

То, что miltorg закоренелый виндузятник и не может знать о том, что такое "обычный sort"
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034777
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Ну это я ещё понимаю - конкуренция и всё такое.

Он так жестоко демпингует, что никакой конкуренции уже быть не может.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034778
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Нужно получить все совпадения. В идеале в виде сортировки. То есть на самом верху таблицы:

Ты всё делаешь не правильно. Тебе не нужна таблица на миллиард записей. Не нужно перемножать все эти множества. Реши задачу наоборот. У тебя есть 5к последовательностей. Берешь первую, считаешь число совпавших цифр для всех остальных строк. Там где их больше 10, собираешь все последовательности с таким же множеством, делаешь перестановки, выводишь. Повторяешь тоже самое для следующих. Твои данные влезают в ОЗУ полностью на много раз и всё это решается алгоритмически на раз-два. Нахера ты принципиально упёрся в решение через жопу sql? СУБД головного мозга?
ps. Ой, у меня же нет правильного диплома ВО, зачем я всё это пишу.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034881
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данные (все 5000 записей) следует перевести в битовые величины длиной в 100 (ну или два раза по 50) битов. И именно так их хранить. Вместо строки "2_12_21_28_36_...", например, нужно получить битовую величину с единицами во 2, 12, 21 и так далее позициях.

Получение количества совпадений чисел в 2 произвольных строках A и B - это количество бит в их побитовом произведении:
SELECT BIT_COUNT(A & B).

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

Код: sql
1.
2.
3.
SELECT date, vol & A
FROM tab
WHERE BIT_COUNT(vol & A) >= 10



Если нужно единоразово прошерстить все строки

Код: sql
1.
2.
3.
4.
SELECT t1.date, t2.date t1.vol & t2.vol
FROM tab t1
JOIN tab t2 ON t1.date <> t2.date
WHERE BIT_COUNT(t1.vol & t2.vol) >= 10




Поскольку в MySQL максимальный диапазон ограничен 64 битами, придется использовать два поля по 50 бит.
Ну и представить результат в формате, как нужно заказчмку.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034898
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

да, это офигенно! Я сразу понял, что хранить в двоичном виде лучше, но до битовых операций не допер!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40034911
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

Хорошее решение. Да, рано мы закопали битовые операции, хотя это первый за многое время случай, где они действительно уместны.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035018
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я практически решил задачу где совпадений в строках - 10
Остались решить задачи с 11 и 12 совпадений.
Скорее всего я просто, по новой их разложу на 10 совпадений и добавлю к общей таблице совпадений.
Потом сортировка, которая занимает секунды - и решение готово!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035226
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Я практически решил задачу где совпадений в строках - 10

Тем временем тебе задачу уже решили в общем случае.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035258
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver

Поскольку в MySQL максимальный диапазон ограничен 64 битами, придется использовать два поля по 50 бит.

Оказывается в 8-ке это ограничение уже снято.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035413
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

У меня практически есть полный код. Вчера я обработал случай при 11 совпадениях в строках. Сегодня обработаю 12 совпадений.
13 совпадений вроде не было вообще.

А у вас нет кода.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035464
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Как отсортировать 1 миллиард записей?

Максимум который сортирует mySQL - 3 миллиона записей. И то, начинаются страшные тормоза и зависание.

Что делать?
Спасибо.

ФИЛЬТРОВАТЬ!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035471
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Как отсортировать 1 миллиард записей?


Э, извини, я не так прочитал в первый раз, вместо "миллиард" я прочитал "миллион", а то сразу бы сказал, что я об этом думаю...

Ты что, идиот совсем? МИЛЛИАРД записей хочешь сортировать?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035533
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver
Оказывается в 8-ке это ограничение уже снято.
дай ссылку
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035544
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно услугу такую продавать. Сортировку толстых файлов. От 70 Гб

P.S. Побежал регистрировать домен под это дело.... ТС... я вам этого не говорил!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035647
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
paver
Оказывается в 8-ке это ограничение уже снято.
дай ссылку

https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html

"Bit operations become possible on values longer than 64 bits".
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035648
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg

А у вас нет кода.

Или вы не умеете читать
22261538
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035650
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Сегодня обработаю 12 совпадений.

Да переписать любым способом быстрее, чем ждать пока оно у тебя отработает для каждого случая.
miltorg
А у вас нет кода.

У нас задачи нет с заказчиком и исходными данными. Нафига нам готовый код?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035806
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
- мне 5 тысяч рублей. каждый месяц - за идею. Я буду доволен.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035975
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересный топик... а в SQL никто так и не показал (и я не силен)
упростим,
есть показания х1, х2 ,х3,х4 на дату

искать половину (или больше) всевозможных совпадающих показателей объекта...
x = {x1 x2 x3 x4}
y = (y1 y2)

Y << X

странно что это в топике MySQL
это же Сишники по пятницам решают?)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40035984
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
mayton,
- мне 5 тысяч рублей. каждый месяц - за идею. Я буду доволен.

Знаешь как говорят в америке.

За идею - 1 доллар. За реализацию 100 долларов.
А за продажу решения - миллионы.

А чтоб далеко не бегать - https://en.wikipedia.org/wiki/External_sorting
внешняя сортировка или еще бывает дисковая сортировка

Утилиты о которых я слыхал но лично не пробовал
  • http://kmkeen.com/gz-sort/
  • и еще была толи m-sort ... забыл название.
сработают быстрее чем БД на аналогичном дисковом массиве. Ведь
нам не надо будет прогружать все в таблицу и индексировать нужное поле.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036006
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
интересный топик... а в SQL никто так и не показал (и я не силен)

22261538

Alex_Ustinov
Y << X

Как это будет работать?
Текущее решение - из цифр сделать биты, например 1,2,3,4,7 заменить на 0x4F (0100 1111).
Потом сделать декартово с побитовом "и", посчитать биты и оставить всё, где получится больше 10.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036236
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

да, вчитался - хитро придумано
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036250
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у правда работает)
интересно девки пляшут
вхождение 7,17 в множество 2,3,4,15,17
Код: sql
1.
2.
SELECT BIT_COUNT(b'01110000000000101' & b'00000010000000001')
=1
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036308
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачу я наконец то решил.
Теперь вопрос как это всё проверить?
Кроме того что искусственно создать несколько одинаковых строк - ничего в голову и не приходит.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036309
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver
Данные (все 5000 записей) следует перевести в битовые величины длиной в 100 (ну или два раза по 50) битов. И именно так их хранить. Вместо строки "2_12_21_28_36_...", например, нужно получить битовую величину с единицами во 2, 12, 21 и так далее позициях.

Получение количества совпадений чисел в 2 произвольных строках A и B - это количество бит в их побитовом произведении:
SELECT BIT_COUNT(A & B).

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

Код: sql
1.
2.
3.
SELECT date, vol & A
FROM tab
WHERE BIT_COUNT(vol & A) >= 10



Если нужно единоразово прошерстить все строки

Код: sql
1.
2.
3.
4.
SELECT t1.date, t2.date t1.vol & t2.vol
FROM tab t1
JOIN tab t2 ON t1.date <> t2.date
WHERE BIT_COUNT(t1.vol & t2.vol) >= 10




Поскольку в MySQL максимальный диапазон ограничен 64 битами, придется использовать два поля по 50 бит.
Ну и представить результат в формате, как нужно заказчмку.


Извините что долго не отвечал - делал по своему методу.
Вот этот ваш код он для чего?

1. Для сортировки 1 миллиарда записей?
2. Для полного решения задачи?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036310
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70



нужно найти строки имеющие 10 совпадений цифр


Итак. Будем считать это исходным.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036311
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавим даты:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
2.08.1966	3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
3.08.1966	2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
4.08.1966	2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
5.08.1966	2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
6.08.1966	2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
7.08.1966	5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
8.08.1966	1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
9.08.1966	7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
10.08.1966	1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
11.08.1966	1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
12.08.1966	2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
13.08.1966	1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
14.08.1966	3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
15.08.1966	3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
16.08.1966	2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
17.08.1966	1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
18.08.1966	11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
19.08.1966	8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
20.08.1966	4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036313
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так лучше. Исходное:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
2.08.1966	3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
3.08.1966	2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
4.08.1966	2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
5.08.1966	2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
6.08.1966	2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
7.08.1966	5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
8.08.1966	1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
9.08.1966	7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
10.08.1966	1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
11.08.1966	1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
12.08.1966	2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
13.08.1966	1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
14.08.1966	3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
15.08.1966	3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
16.08.1966	2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
17.08.1966	1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
18.08.1966	11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
19.08.1966	8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
20.08.1966	4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 42 44 45 46 47 52 64 66 69
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036314
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результат 1 части:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
+----+----------------------------------+------------+------------+------+------+---------+
| id | d1                               | myData1    | myData2    | str1 | str2 | sovpalo |
+----+----------------------------------+------------+------------+------+------+---------+
|  1 | 5_7_8_15_22_23_27_34_37_39_40_44 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
|  2 | 2_12_21_28_36_50_53_55_59_66     | 3.08.1966  | 5.08.1966  |    2 |    4 |      10 |
|  3 | 3_5_24_26_28_50_53_55_59_66      | 3.08.1966  | 14.08.1966 |    2 |   13 |      10 |
|  4 | 2_3_5_15_23_28_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
|  5 | 11_15_16_29_32_35_42_43_62_63    | 6.08.1966  | 18.08.1966 |    5 |   17 |      10 |
|  6 | 7_8_21_27_30_49_50_53_54_68      | 7.08.1966  | 9.08.1966  |    6 |    8 |      10 |
|  7 | 5_7_23_27_34_45_46_47_52_64      | 10.08.1966 | 21.08.1966 |    9 |   20 |      10 |
|  8 | 23_27_40_44_45_46_47_52_64_66    | 12.08.1966 | 21.08.1966 |   11 |   20 |      10 |
|  9 | 1_5_11_16_20_22_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 10 | 8_15_17_26_35_37_42_44_50_69     | 19.08.1966 | 20.08.1966 |   18 |   19 |      10 |
+----+----------------------------------+------------+------------+------+------+---------+
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036315
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Преобразование 11 совпадений в 10:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
+----+----------------------------------+------------+------------+------+------+---------+
| id | d1                               | myData1    | myData2    | str1 | str2 | sovpalo |
+----+----------------------------------+------------+------------+------+------+---------+
|  1 | 5_7_8_15_22_23_27_34_37_39_40_44 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
|  2 | 2_12_21_28_36_50_53_55_59_66     | 3.08.1966  | 5.08.1966  |    2 |    4 |      10 |
|  3 | 3_5_24_26_28_50_53_55_59_66      | 3.08.1966  | 14.08.1966 |    2 |   13 |      10 |
|  5 | 11_15_16_29_32_35_42_43_62_63    | 6.08.1966  | 18.08.1966 |    5 |   17 |      10 |
|  6 | 7_8_21_27_30_49_50_53_54_68      | 7.08.1966  | 9.08.1966  |    6 |    8 |      10 |
|  7 | 5_7_23_27_34_45_46_47_52_64      | 10.08.1966 | 21.08.1966 |    9 |   20 |      10 |
|  8 | 23_27_40_44_45_46_47_52_64_66    | 12.08.1966 | 21.08.1966 |   11 |   20 |      10 |
| 10 | 8_15_17_26_35_37_42_44_50_69     | 19.08.1966 | 20.08.1966 |   18 |   19 |      10 |
| 11 | 3_5_15_23_28_37_38_50_53_59      | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 12 | 2_5_15_23_28_37_38_50_53_59      | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 13 | 2_3_15_23_28_37_38_50_53_59      | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 14 | 2_3_5_23_28_37_38_50_53_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 15 | 2_3_5_15_28_37_38_50_53_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 16 | 2_3_5_15_23_37_38_50_53_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 17 | 2_3_5_15_23_28_38_50_53_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 18 | 2_3_5_15_23_28_37_50_53_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 19 | 2_3_5_15_23_28_37_38_53_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 20 | 2_3_5_15_23_28_37_38_50_59       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 21 | 2_3_5_15_23_28_37_38_50_53       | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 22 | 5_11_16_20_22_25_26_47_56_70     | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 23 | 1_11_16_20_22_25_26_47_56_70     | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 24 | 1_5_16_20_22_25_26_47_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 25 | 1_5_11_20_22_25_26_47_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 26 | 1_5_11_16_22_25_26_47_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 27 | 1_5_11_16_20_25_26_47_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 28 | 1_5_11_16_20_22_26_47_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 29 | 1_5_11_16_20_22_25_47_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 30 | 1_5_11_16_20_22_25_26_56_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 31 | 1_5_11_16_20_22_25_26_47_70      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 32 | 1_5_11_16_20_22_25_26_47_56      | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
+----+----------------------------------+------------+------------+------+------+---------+
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036316
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После преобразования 12 в 11

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
+----+--------------------------------+------------+------------+------+------+---------+
| id | d1                             | myData1    | myData2    | str1 | str2 | sovpalo |
+----+--------------------------------+------------+------------+------+------+---------+
|  2 | 2_12_21_28_36_50_53_55_59_66   | 3.08.1966  | 5.08.1966  |    2 |    4 |      10 |
|  3 | 3_5_24_26_28_50_53_55_59_66    | 3.08.1966  | 14.08.1966 |    2 |   13 |      10 |
|  5 | 11_15_16_29_32_35_42_43_62_63  | 6.08.1966  | 18.08.1966 |    5 |   17 |      10 |
|  6 | 7_8_21_27_30_49_50_53_54_68    | 7.08.1966  | 9.08.1966  |    6 |    8 |      10 |
|  7 | 5_7_23_27_34_45_46_47_52_64    | 10.08.1966 | 21.08.1966 |    9 |   20 |      10 |
|  8 | 23_27_40_44_45_46_47_52_64_66  | 12.08.1966 | 21.08.1966 |   11 |   20 |      10 |
| 10 | 8_15_17_26_35_37_42_44_50_69   | 19.08.1966 | 20.08.1966 |   18 |   19 |      10 |
| 11 | 3_5_15_23_28_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 12 | 2_5_15_23_28_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 13 | 2_3_15_23_28_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 14 | 2_3_5_23_28_37_38_50_53_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 15 | 2_3_5_15_28_37_38_50_53_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 16 | 2_3_5_15_23_37_38_50_53_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 17 | 2_3_5_15_23_28_38_50_53_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 18 | 2_3_5_15_23_28_37_50_53_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 19 | 2_3_5_15_23_28_37_38_53_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 20 | 2_3_5_15_23_28_37_38_50_59     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 21 | 2_3_5_15_23_28_37_38_50_53     | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 22 | 5_11_16_20_22_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 23 | 1_11_16_20_22_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 24 | 1_5_16_20_22_25_26_47_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 25 | 1_5_11_20_22_25_26_47_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 26 | 1_5_11_16_22_25_26_47_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 27 | 1_5_11_16_20_25_26_47_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 28 | 1_5_11_16_20_22_26_47_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 29 | 1_5_11_16_20_22_25_47_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 30 | 1_5_11_16_20_22_25_26_56_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 31 | 1_5_11_16_20_22_25_26_47_70    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 32 | 1_5_11_16_20_22_25_26_47_56    | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 33 | 7_8_15_22_23_27_34_37_39_40_44 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 34 | 5_8_15_22_23_27_34_37_39_40_44 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 35 | 5_7_15_22_23_27_34_37_39_40_44 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 36 | 5_7_8_22_23_27_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 37 | 5_7_8_15_23_27_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 38 | 5_7_8_15_22_27_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 39 | 5_7_8_15_22_23_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 40 | 5_7_8_15_22_23_27_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 41 | 5_7_8_15_22_23_27_34_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 42 | 5_7_8_15_22_23_27_34_37_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 43 | 5_7_8_15_22_23_27_34_37_39_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 44 | 5_7_8_15_22_23_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
+----+--------------------------------+------------+------------+------+------+---------+
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036317
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готовая таблица. Остаётся только сортировка:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
+-------------------------------+------------+------------+------+------+---------+
| d1                            | myData1    | myData2    | str1 | str2 | sovpalo |
+-------------------------------+------------+------------+------+------+---------+
| 2_12_21_28_36_50_53_55_59_66  | 3.08.1966  | 5.08.1966  |    2 |    4 |      10 |
| 3_5_24_26_28_50_53_55_59_66   | 3.08.1966  | 14.08.1966 |    2 |   13 |      10 |
| 11_15_16_29_32_35_42_43_62_63 | 6.08.1966  | 18.08.1966 |    5 |   17 |      10 |
| 7_8_21_27_30_49_50_53_54_68   | 7.08.1966  | 9.08.1966  |    6 |    8 |      10 |
| 5_7_23_27_34_45_46_47_52_64   | 10.08.1966 | 21.08.1966 |    9 |   20 |      10 |
| 23_27_40_44_45_46_47_52_64_66 | 12.08.1966 | 21.08.1966 |   11 |   20 |      10 |
| 8_15_17_26_35_37_42_44_50_69  | 19.08.1966 | 20.08.1966 |   18 |   19 |      10 |
| 3_5_15_23_28_37_38_50_53_59   | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_5_15_23_28_37_38_50_53_59   | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_15_23_28_37_38_50_53_59   | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_23_28_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_28_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_23_37_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_23_28_38_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_23_28_37_50_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_23_28_37_38_53_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_23_28_37_38_50_59    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 2_3_5_15_23_28_37_38_50_53    | 3.08.1966  | 16.08.1966 |    2 |   15 |      11 |
| 5_11_16_20_22_25_26_47_56_70  | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_11_16_20_22_25_26_47_56_70  | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_16_20_22_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_20_22_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_22_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_20_25_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_20_22_26_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_20_22_25_47_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_20_22_25_26_56_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_20_22_25_26_47_70   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 1_5_11_16_20_22_25_26_47_56   | 13.08.1966 | 17.08.1966 |   12 |   16 |      11 |
| 8_15_22_23_27_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_15_22_23_27_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_22_23_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_23_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_23_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_23_27_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_23_27_34_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_23_27_34_37_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_23_27_34_37_39_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 7_8_15_22_23_27_34_37_39_40   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_15_22_23_27_34_37_39_40_44  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_22_23_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_23_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_23_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_23_27_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_23_27_34_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_23_27_34_37_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_23_27_34_37_39_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_8_15_22_23_27_34_37_39_40   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_22_23_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_23_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_27_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_23_34_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_23_27_37_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_23_27_34_39_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_23_27_34_37_40_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_23_27_34_37_39_44   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_15_22_23_27_34_37_39_40   | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_23_27_34_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_27_34_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_23_34_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_23_27_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_23_27_34_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_23_27_34_37_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_23_27_34_37_39_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_22_23_27_34_37_39_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_27_34_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_23_34_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_23_27_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_23_27_34_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_23_27_34_37_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_23_27_34_37_39_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_23_27_34_37_39_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_34_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_27_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_27_34_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_27_34_37_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_27_34_37_39_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_27_34_37_39_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_37_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_34_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_34_37_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_34_37_39_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_34_37_39_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_39_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_37_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_37_39_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_37_39_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_34_40_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_34_39_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_34_39_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_34_37_44    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_34_37_40    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
| 5_7_8_15_22_23_27_34_37_39    | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |
+-------------------------------+------------+------------+------+------+---------+
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036361
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg

Извините что долго не отвечал - делал по своему методу.
Вот этот ваш код он для чего?

1. Для сортировки 1 миллиарда записей?
2. Для полного решения задачи?


Это решение вашей задачи. Без всяких сортировок.
На предыдущей странице обсуждают именно его. С примером.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036371
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster

Как это будет работать?
Текущее решение - из цифр сделать биты, например 1,2,3,4,7 заменить на 0x4F (0100 1111).
Потом сделать декартово с побитовом "и", посчитать биты и оставить всё, где получится больше 10.

Кстати, записывать справа налево совершенно необязательно. b'11110010' будет нагляднее.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036385
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

Если ваше решение, столь простое и наглядное, и оно уже есть, не могли ли вы распечатать его, как сделал я.
Используя мои входные данные на этой странице.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036388
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
paver,

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


сможем проверить правильность наших решений.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036396
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver
Данные (все 5000 записей) следует перевести в битовые величины длиной в 100 (ну или два раза по 50) битов. И именно так их хранить. Вместо строки "2_12_21_28_36_...", например, нужно получить битовую величину с единицами во 2, 12, 21 и так далее позициях.

Получение количества совпадений чисел в 2 произвольных строках A и B - это количество бит в их побитовом произведении:
SELECT BIT_COUNT(A & B).

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

Код: sql
1.
2.
3.
SELECT date, vol & A
FROM tab
WHERE BIT_COUNT(vol & A) >= 10



Если нужно единоразово прошерстить все строки

Код: sql
1.
2.
3.
4.
SELECT t1.date, t2.date t1.vol & t2.vol
FROM tab t1
JOIN tab t2 ON t1.date <> t2.date
WHERE BIT_COUNT(t1.vol & t2.vol) >= 10




Поскольку в MySQL максимальный диапазон ограничен 64 битами, придется использовать два поля по 50 бит.
Ну и представить результат в формате, как нужно заказчмку.


Вот честно не понимаю. Вы пишите что это полное решение моей задачи. Но вход даёте цифры:

"2_12_21_28_36_...",

На входе - цифры через пробел и с датой:

22264235
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036403
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg

На входе - цифры через пробел и с датой:
22264235

Это представление данных. Смените представление. Это делается один раз.

Попробую помедленнее и на примере.
У вас есть 2 набора чисел:
1 3 6 9
3 6 7 8
Вам нужно найти количество совпадающих чисел.
Это элементарная задача.

1. Меняете представление ваших наборов из символьного строк в битовый, где каждому числу будет соответствовать 1 в позиции, номер которой совпадает с числом. В примере это:
1 3 6 9 -> b'101001001'
3 6 7 8 -> b'001001110'

2. Получаете совпадающие числа путем побитового произведения исходных строк:
b'101001001' & b'001001110' -> b'001001000', то есть 3 и 6

3. Количество совпавших чисел (т.е. количество 1 в результирующей строке) получаете с помощью BIT_COUNT()
BIT_COUNT(b'101001001' & b'001001110') = 2

Для хранения ваших наборов потребуется поле BINARY(13) (13 x 8 = 104). Можно вместо существующего, можно дополнительно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036404
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

А почему вы упорно не хотите взять 2 строки из моего тестового исходного?

Ок. Я специально выделю их для вас:

Код: sql
1.
2.
1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 42 44 45 46 47 52 64 66 69
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036406
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

У меня такое ощущение, что вы пытаетесь рассказать о том, как находить совпадения в 2 строках.

Я это решил по простому - загнал цифры в массивы и применил функцию которая ищит совпадения массивов.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036409
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только в этом и есть суть моего нового решения. Я именно таким способом всё и решил:

22261090
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036413
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

переведите ваши строки в нули единицы (единицы будут стоять на позиции чисел в ваших строках)
Просто никому неохота делать работу за другого.
Пример
5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
(на 5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70 позиции стоЯт единицы)
0000101100000010000001100010000001001011101100000100001011000100000001 и добить нулями до 99 знаков

можете проверить, я мог ошибиться
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036415
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

так а ход решения где...
как получить всевозможные сочетания по 10 из 20-ти. Мы же в скуэльном форуме.
Перевести набор чисел в строку из 0 и 1 И так и хранить
можно также сделать функцию - посимвольное сравнение 100 (99) символьной строки.
Не надо будет хранить все комбинации по 10 из 20-ти чисел.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036418
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

предлагаю упростить задачу. Пусть будут числа 1..9 и по 4 в строке
переводим исходную
1_3_5_7 в нули-единицы 101010100 (справа добиваем нулями до 9-ти символов )

...да, paver выше уже предлагал упростить...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036420
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

В начале, методом сравнения массивов цифр в строке - я вывожу количество совпадений строк:

22264236

Код предоставить не могу. Я ведь его за деньги писал - значит нужно разрешение.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036421
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Те, где 10 совпадение - получается что готовы к сортировке.
Но там ещё есть 11 и 12 совпадений.

Вот с ними я разбираюсь в дальнейшем.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036422
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
Вы опять, упорно решаете задачу сравнения срок. Повторю:
Задача сравнения строк решена мной изначально, путём загона чисел в массивы и применения функции поиска дубликатов.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036423
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код на Перле:

Код: php
1.
2.
3.
4.
5.
for $e (@a, @b) {$inion{$e}++ && $isect{$e}++;}

@isect = keys %isect;

$is = scalar(@isect);
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036424
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

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

если решаете массивами-циклами, то это вроде бы как для другого форума.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036425
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
Мне нужно решить задачу, а не искать изыски.
Мой код изначально был на Перл с использованием mySQL. Что не так?
В конце, я делаю сортировку:

select v.* from ( SELECT table_tmp.* , count(1) over(partition by d1) as cnt FROM table_tmp ) as v where cnt > 4;

Что не так то?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036426
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
miltorg,

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

если решаете массивами-циклами, то это вроде бы как для другого форума.


Я не просил код. Я просил решение. Потому, что я видел, что изначально, в качестве исходных берутся не те цифры.
Поэтому и так долго на это не обращал внимания.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036428
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но это, изначально решение - не про то - вызвало тут кучу восторгов.
Может это и красиво. Может. По мне так - сравнение массивов красивей и проще.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036445
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorgне про то про то...
от вас требуется перевести ваш набор чисел в 0 и 1, залить в таблицу
чтобы никто не увидел код - я его спрятал, а то потом никому его не продать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table t1
(id int NOT NULL AUTO_INCREMENT, 
dt date, str varchar(10), str_bit BIT(9),
PRIMARY KEY (id));
/* str_bit - STR в битовом представлении*/

INSERT INTO t1(dt,str,str_bit) VALUES ('1993-01-01', '1,4,7,8', b'100100110');
INSERT INTO t1(dt,str,str_bit) VALUES ('1994-01-01', '2,3,5,8', b'011010010');
INSERT INTO t1(dt,str,str_bit) VALUES ('1995-01-01', '3,5,8,9', b'001010011');
INSERT INTO t1(dt,str,str_bit) VALUES ('1996-01-01', '4,5,6,7', b'000111100');
/* Решение всего один запрос!)))))) */
select t1.id, t1.dt, t1.str,   t2.id, t2.dt, t2.str, 
BIT_COUNT(t1.str_bit & t2.str_bit) as XXX 
from t1 join t1 as t2 
where  t1.id<t2.id
/* AND BIT_COUNT(t1.str_bit & t2.str_bit)=2 ====== количество совпадающих чисел*/
;


вот решение в общем доступе
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b3c4ac6316e573c7ecf6facc2139e3dd

единственное, что вам необходимо сделать - в связи с тем, что BIT работает с 64 разрядами - ранее было предложено разделить строку из 99 знаков на две части, и делать два сравнения, первые 50 нуликов единиц и оставшиеся.
т.е. у вас будет 2 поля STR_BIT1 и STR_BIT2 типа BIT(50)

И вот как раз первичную переработку своих данных и сделайте на Перле Бейсике Паскале... на чем угодно

вот теперь обоснуйте, почему это решение - "не про то"


авторЯ не просил код. Я просил решениеигра слов, решение указали, просто без кода вы не поняли.
"Преобразование 11 в 10" и т.д - никому непонятное "решение"
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036499
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди упорно не видят исходное задание. В исходном задании 20 цифр. 20!
Люди упорно не хотят понять - что всё уже сделано. И сделано изначально методом сравнения количества совпадений с помощью массивов - потому что так проще.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036500
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственное что мне сейчас не понятно - как это всё проверить?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036501
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди упорно не видят исходное задание. В исходном задании 20 чисел. 20!
Примеры меньше двух строк по 20! чисел - даже смотреть не буду.

Вот минимально сокращённо-урезанное задание

Код: sql
1.
2.
1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 42 44 45 46 47 52 64 66 69
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036502
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что проверять в этих двух строчках?
13 вхождений
ссылка https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=6c3ff9e5db126e4f0a55549e161f9004
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036503
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

во второй строке изменено число 41 на 42 после моего копирования
получаем 12 совпадений
решение https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=aa592d82eff9bb9a198191c602ba2011
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036505
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Отлично. У меня такой же результат:

22264236

Первая строка.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036506
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не делал никаких двоичных преобразований. Просто использовал специальную функцию поиска дубликатов в массивах.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036507
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Итак. Мы имеем 12 совпадений. Строку:...

Стоп. Но у вас даже нет строки совпадений??? d1 у меня в таблице

Нету. Не вижу.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036508
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не использовал специальную функцию поиска дубликатов в массивах. Как и сами массивы с упорядочением и сортировкой миллиарда строк

используется стандартная функция побитового сравнения И + подсчет совпадающих битов.
Если вам необходима строка вхождения - доделайте. Всего лишь дописать ф-ю перевода позиции совпадающих битов в десятичное представление. Ссылки на решение выше.
Стоп!
у вас же даты не в формате MySQL..... так работать не может...
Покажите каким запросом вы это получаете?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036510
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Всё доделано и всё работает. И все всё давно уже поняли. Кроме вас.
Я с вами разговариваю только потому, что мне нужно чтоб кто то проверил алгоритм моих расчётов.
Но вы зациклились на поиске дубликатов строк.
Поиск дубликатов строк не вызывает и не вызывал никаких проблем
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036511
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Строка вхождения - это и есть цель, решение задачи.
Только строка вхождения 10 из 20, а не 12 из 20 - но этого вы уже 2 страницы - не можете понять.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036512
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

авторДаты не в том формате...

Это не даты - это строки из исходного файла означающие дату. Заказчик захотел чтоб эти строки оставались неизменными.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036515
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg

Всё доделано и всё работает. И все всё давно уже поняли. Кроме вас.
Я с вами разговариваю только потому, что мне нужно чтоб кто то проверил алгоритм моих расчётов.
Но вы зациклились на поиске дубликатов строк.
Поиск дубликатов строк не вызывает и не вызывал никаких проблем

1. Все давно поняли, что вы так и не поняли суть предлагаемого вам решения.
2. Ваш алгоритм невозможно проверить ввиду отсутствия его описания
3. Ввиду пункта 1 вы так и не поняли, что никто не предлагает искать дубликаты. Даже слова такого никто не написал.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036517
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

вместо "дубликатов строк" - следует читать: "число вхождений в строку".

Вы правда это сразу не поняли?
Всё. про "вхождения" - я заканчиваю - зря я ковырнул это - ведь видел, что люди совсем не о том разговаривают между собой.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036518
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

вместо "дубликатов строк" - следует читать: "дубликатов чисел "

Вы правда это сразу не поняли?
Всё. про "вхождения" - я заканчиваю - зря я ковырнул это - ведь видел, что люди совсем не о том разговаривают между собой.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036519
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
вместо "дубликатов строк" - следует читать: "число вхождений в строку".
тебе и показали
paver
Количество совпавших чисел (т.е. количество 1 в результирующей строке) получаете с помощью BIT_COUNT()
BIT_COUNT(b'101001001' & b'001001110') = 2

твой метод на перле будет работать, вот только скорость работы намного медленнее
ты сравниваешь строковые значения , а это медленная операция
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036557
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Почему строковые? Битовые операции будут на порядок (если не два порядка) быстрее, чем поэлементное сравнение двух массивов.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036558
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Почему строковые? Битовые операции будут на порядок (если не два порядка) быстрее, чем поэлементное сравнение двух массивов.
дак я о методе ТС
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036559
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Там изначально 5 тысяч строк в файле. 5 тысяч.
Пишу в 10-й раз. Нет тут проблемы. Нету.

Зачем вы её ищите на ровном месте - мне не понятно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036560
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

дело не в строковых значениях, дело в том что он ДЛЯ КАЖДОЙ ИЗ 5000 строк строит по комбинаторике всевозможные сочетания 10 чисел из 20
3. затем ищет совпадения GROUP BY + HAVING COUNT()>1 (ну может и не так, может циклует через массивы)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036561
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Нет. НЕ так
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036562
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

1. Первоначально я ищу количество совпадений больше 9
2. Перерабатываю 11 совпадений в 10
3. Перерабатываю 12 совпадений в 11, а потом в 10.
4. 13 совпадений пока нет, но может и появиться.
5. Сортировка.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036563
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Alex_Ustinov,

Всё доделано и всё работает. И все всё давно уже поняли. Кроме вас.
Я с вами разговариваю только потому, что мне нужно чтоб кто то проверил алгоритм моих расчётов.
Но вы зациклились на поиске дубликатов строк.
Поиск дубликатов строк не вызывает и не вызывал никаких проблем
я не искал дубликатов строк, я искал совпадения чисел в строках.
Решение вам показано по ссылкам.
Осталось дописать функцию перевода позиций "единичек" в десятичный формат.
BIT_COUNT() считает количество, а вам нужны позиции.
Сделайте хоть что-то сами.

BIT_COUNT() = N
N - количество необходимых совпадений
Все очень просто.
Не надо "перерисовывать" (12 в 11) (12 в 10) (9 в 10) или как там у вас

Я с вами разговариваЛ только потому, что мне не спалось. И не думал что вы просто специально тупите.

Сделайте второй вариант как вам подсказали и проверяйте своё секретное решение с массивами.
Ссылки даны. Смотрю на ваш жаргон и думаю что никто вам помогать особо не будет.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036572
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
1. Первоначально я ищу количество совпадений больше 9
ты ищешь в строковых значениях - в этом тормоза
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036575
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
воскресные ПЕРЛЫ буквально с 2-х посл страниц
У меня практически есть полный код. Вчера я обработал случай при 11 совпадениях в строках. Сегодня обработаю 12 совпадений.
13 совпадений вроде не было вообще.
А у вас нет кода.
Код предоставить не могу. Я ведь его за деньги писал - значит нужно разрешение.

Мне нужно решить задачу, а не искать изыски.
Но это, изначально решение - не про то - вызвало тут кучу восторгов.
Единственное что мне сейчас не понятно - как это всё проверить?

Всё доделано и всё работает. И все всё давно уже поняли. Кроме вас.
Единственное что мне сейчас не понятно - как это всё проверить?
Примеры меньше двух строк по 20! чисел - даже смотреть не буду.

во второй строке изменено число 41 на 42 ...
получаем 12 совпадений....Итак. Мы имеем 12 совпадений. Отлично. У меня такой же результат:
Но вы зациклились на поиске дубликатов строк.
У меня такое ощущение, что вы пытаетесь рассказать о том, как находить совпадения в 2 строках!

вот вам решение...вот ссылка
BIT_COUNT() = N
N - количество необходимых совпадений.....
Только строка вхождения 10 из 20, а не 12 из 20 - но этого вы уже 2 страницы - не можете понять.
Свой код предоставить не могу. Я ведь его за деньги писал - значит нужно разрешение.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036577
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov, этот топик создан в пятницу.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036578
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

2 раз пишу. Там 5 тысяч строк - поэтому никаких тормозов там нет.
5 тысяч строк обработать 1 раз.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036579
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
2 раз пишу. Там 5 тысяч строк - поэтому никаких тормозов там нет.
5 тысяч строк обработать 1 раз.
откуда тогда слухи про 1 000 000 000?
1 строку сравнить с 4999 строк
2 - с 4998строк
3 - с 4997 ...
.....
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036580
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

упс. А вы и тему не читали.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036581
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
упс. А вы и тему не читали.
дак тебе надо найти все совпадения
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036582
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Напишу в 4 раз. Задача полностью решена. Полностью. От начала и до самого конечного конца. Все скорости - меня устраивают.

Что я хочу сейчас? - Проверить своё решение. Как?

Искусственное добавление строки делал - всё работает правильно и хорошо.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036583
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Постановка задачи гордо висит на первой странице. Повторю:

22260460
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036584
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Напишу в 4 раз. Задача полностью решена. Полностью. От начала и до самого конечного конца. Все скорости - меня устраивают.
тебе предлагают перейти на уровень выше - овладеть большими знаниями.
ты говоришь - проверить своё решение, и говоришь что что я не читал..
добавляешь одну строку - и ищешь совпадение с уже имеющимися...
не кажется что у тебя куча противоречий?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036585
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Постановка задачи гордо висит на первой странице. Повторю:
значит ты сам не понял своей задачи
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036586
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

я так глубоко не полез, там вроде было нормальное обсуждение
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036587
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

авторИз каждой строчки берётся 10 цифр и из них делаются не повторяющиеся комбинации:
не повторяющиеся с чем
первая строка не должна повторяться со 2 по 5000
вторая - с 3 по 5000
так?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036588
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Идея решения:

22260870
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036591
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

твоя идея не правильная - надо сравнивать все строки - рекурсивно
а это долго,
тебе предложили бинарное сравнение
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036592
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просили выложить исходную таблицу. Выложил часть таблицы:

22264235
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036593
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
miltorg,

твоя идея не правильная - надо сравнивать все строки - рекурсивно
а это долго,
тебе предложили бинарное сравнение

можно сократить - убирать уже совпадшие строки - но это переписывать в новый массив
это все можно сделать в sql - используя хранимку
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036594
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложил результат работы 1 части программы - Поиск тех самых дубликатов чисел в стоках. Где они больше 9:

22264236
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036595
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Просили выложить исходную таблицу. Выложил часть таблицы:
вот ты думаешь кто-то будет из текстового делать таблицу?
ddl таблицы (уже выложил - это +) ну и скрипт для заполнения таблицы - тогда будут варианты,
а пока тебе предлагают с 4 числами как идею для реализации
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036596
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И там дальше пошаговый результат с выводом каждого шага.
То есть всё описано подробнейшим образом.
Кто не понял - я не виноват.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036597
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Поиск тех самых дубликатов чисел в стоках.
поиск дубликатов -- вот о чём я и говорил тут
вадя
откуда тогда слухи про 1 000 000 000?
1 строку сравнить с 4999 строк
2 - с 4998строк
3 - с 4997 ...
.....
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036598
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

у тебя может совпасть 4999 строка с 5000 строкой
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036599
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Строки полностью сейчас не совпадают. - максимум 12 совпадений чисел в строке. - Это отображено в примере.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036600
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я понял - это движения чего-то в чём-то

И детали изготавливаются разные. - Поэтому полные совпадения - это брак.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036601
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Строки полностью сейчас не совпадают. - максимум 12 совпадений чисел в строке. - Это отображено в примере.
какая разница?
тебе всё равно надо произвести сравнение одно строки со всеми (если в лоб)
или так
вадя
1 строку сравнить с 4999 строк
2 - с 4998строк
3 - с 4997 ...
.....

или так
вадя
можно сократить - убирать уже совпадшие строки - но это переписывать в новый массив

но это если искать совпадение по всем значениям

если искать совпадение по части - то надо сравнивать каждую строку со всеми 4999

потому как 9 совпадений может быть частью из совпадений , где совпадают 12 чисел
число совпадений при бинарном - есть величина
BIT_COUNT()
BIT_COUNT(b'101001001' & b'001001110') = 2
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036604
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

тебе нужно произвести 5000*4999 сравнений с подсчётом числа совпадений
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036608
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже так и делается, если мы уже не говорим о миллиарде,
только вместо BIT_COUNT используется своя функция сравнения строк на вхождение чисел.
Цикл 1..99 на вхождение чисел в сравниваемые строки и подсчет (и откладывание) совпадений (тоже можно задать параметром).
Имеет право на жизнь.
Только что там проверять, если проверяется экспериментальными наборами, причем из любого количество чисел в строках.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036613
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
mayton,

я так глубоко не полез, там вроде было нормальное обсуждение

Я не об этом. Пятничные топики часто носят характер развлекательных.
Трудовая неделя закончилась. Можно и отдохнуть. Это - давняя традиция которая возникла
на скруле еще задолго до того как я создал первый пятничный.

Возможно Милторг не имел в виду ничего серъезного. Но все так возбудились...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036639
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg
paver,

У меня такое ощущение, что вы пытаетесь рассказать о том, как находить совпадения в 2 строках.

Я это решил по простому - загнал цифры в массивы и применил функцию которая ищит совпадения массивов.

1. Это не ощущение. Именно это вам и пытаются рассказать.
2. Я это решил по простому - загнал цифры числа в битовые строки и применил битовую операцию, которая показывает совпадения.

Я не видел вашего кода поиска совпадений, но очевидно, что он на несколько порядков (!) медленнее битовой операции A & B.

BIT_COUNT(A&B) - это и есть мой код. Покажите ваш

Это во-первых. А во-вторых, предлагаемое решение - для общего случая. BIT_COUNT просто даст количество совпавших чисел, а отфильтровать нужные строки можно элементарным WHERE BIT_COUNT(A & B) IN (10, 11, 12) (ну или просто >=10).
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036655
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paver,

Я ведь писал код. Раз:

22260895

Два:

22264457

И уже 4 раза написал что скорость в данном случае не имеет значения

Вы знаете. Я не стану больше с вами разговаривать.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40036680
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Что я хочу сейчас? - Проверить своё решение. Как?

Решить с битовыми масками.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037146
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Alex_Ustinov
mayton,

я так глубоко не полез, там вроде было нормальное обсуждение

Я не об этом. Пятничные топики часто носят характер развлекательных.
Трудовая неделя закончилась. Можно и отдохнуть. Это - давняя традиция которая возникла
на скруле еще задолго до того как я создал первый пятничный.

Возможно Милторг не имел в виду ничего серъезного. Но все так возбудились...
в этом подфоруме такого не бывает, вот и восприняли всерьез.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037299
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нас ждёт вторая серия. - Заказчик сказал, что лучшая проверка - это генерировать всё подряд и проверять на совпадения.

У него правда есть своя идея. - Отгенерированное класть не просто так, и не в базу, а в файлы по первому числу. - Сразу группировать единицы и пр.

Начинаю.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037300
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак. Я вернулся в начало.
1 мысль:
Генерировать буквально по 1 строчке и сразу выдавать готовый результат.

2. Делать как сказал заказчик - ибо заказчик всегда прав.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037315
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
У него правда есть своя идея. - Отгенерированное класть не просто так, и не в базу, а в файлы по первому числу. - Сразу группировать единицы и пр.

miltorg
Начинаю.

miltorg
2. Делать как сказал заказчик - ибо заказчик всегда прав.

...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037468
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Итак. Я вернулся в начало.
1 мысль:
Генерировать буквально по 1 строчке и сразу выдавать готовый результат.

2. Делать как сказал заказчик - ибо заказчик всегда прав.

Если заказчик просто хочет проверить формулу - то не обязательно генерить все 20 чисел. Может проверить на 5 штуках?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037576
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

это же монолог, ТС купил пивка и ему опять скучно...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037612
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот думаю, что что-то не так в моём переводе из 12 совпадений в 10

Лезут какие то дубликаты.

Что я делаю. Хоть я уже про это и писал.

Я последовательно удаляю по 1 цифре в 12 совпадений

Потом также последовательно удаляю цифры в полученных 11 совпадениях

А нужны ли они вообще эти цифры? Ведь я уже сравнивал эти все строки между собой.

Это тогда совсем упрощает задачу!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037623
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня я достиг 5 миллионов записей и оно мне сказало:

авторtable is full

Странно. Я читал что у mySQL вроде как ограничений нет на число записей.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037624
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

И это инженер с дипломом? Дилетант. Ему форум дал отличное решение с битсетом, бери, пользуйся на здоровье, но нет, не хочу, хочу жрать говно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037648
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
miltorg,
Дилетант. Ему форум дал отличное решение с битсетом, бери, пользуйся на здоровье, но нет, не хочу...

Он его просто не понял. До сих пор.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037717
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если взять не 10 из 20, а 32 из 64 (регистр). То подсчет удачных комбинаций может затянуться.

Я не против битовых операций но КМК надо исследовать на временную сложность. Когда мы дойдем
до старших разрядов (62,63 биты) то пауза в ожидании следующей удачной комбинации затянется.

Хотелось-бы уйти от вращения битов в регистре и подойти ... ну со стороны неких прямых пермутаций.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037809
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Не понял. Зачем вращать биты в регистре?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037813
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
var src = `1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
2.08.1966	3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
3.08.1966	2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
4.08.1966	2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
5.08.1966	2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
6.08.1966	2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
7.08.1966	5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
8.08.1966	1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
9.08.1966	7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
10.08.1966	1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
11.08.1966	1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
12.08.1966	2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
13.08.1966	1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
14.08.1966	3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
15.08.1966	3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
16.08.1966	2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
17.08.1966	1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
18.08.1966	11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
19.08.1966	8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
20.08.1966	4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 42 44 45 46 47 52 64 66 69`

var bitCount = function(n) { //со стак оверфлоу
  n = n - ((n >> 1) & 0x55555555)
  n = (n & 0x33333333) + ((n >> 2) & 0x33333333)
  return ((n + (n >> 4) & 0xF0F0F0F) * 0x1010101) >> 24
}

var numToBit = [0] //место цифры в битсете
for (let i = 0; i < 32; i++) numToBit[i + 1] = 1 << i;

var data = src.split("\n").map(v=>{ //парсим исходные
    var [date, digs] = v.split("\t");
    digs = digs.split(" ").map(v=>+v); //кастим строки в числа
    var bits = [0, 0, 0, 0, 0, 0, 0, 0]; //По 4 байта на число, 32 цифры в числе. Их 8, шоб всем хватило 
    //(хватает и 3-х, самая большая цифра - 256. Надо больше, сделай больше)
    digs.forEach(v=>{
        var shift = Math.floor(v / 32); //элемент массива bits
        bits[shift] = bits[shift] | numToBit[v - shift * 32] //"Сдвигаем" число
    });
    return {date, digs, bits}
});

var res = [];

for (let i = 0; i < data.length - 1; i++) {
    for (let j = i + 1; j < data.length; j++) { //перебор всех со всеми
        var v1 = data[i], v2 = data[j];
        var hits = 0;
        for (let b = 0; b < 8; b++) {
            hits += bitCount(v1.bits[b] & v2.bits[b]); //считаем совпавшие биты (цифры)
        }
        if (hits >= 10) {
            res.push({set1 : v1, set2 : v2, hits}); // заполняем массив нужным
        }
    }
}

>> res.map(v=>([v.set1.date, v.set2.date, v.set1.digs, v.set2.digs, v.hits].join("  ")))
[
  '1.08.1966  21.08.1966  5,7,8,15,22,23,27,34,37,39,40,41,43,44,50,55,57,58,62,70  5,7,8,15,22,23,27,34,37,39,40,42,44,45,46,47,52,64,66,69  12',
  '3.08.1966  5.08.1966  2,3,5,12,15,21,23,24,26,28,36,37,38,39,50,53,55,59,66,68  2,8,11,12,14,17,18,20,21,28,36,43,50,53,55,56,59,62,64,66  10',
  '3.08.1966  14.08.1966  2,3,5,12,15,21,23,24,26,28,36,37,38,39,50,53,55,59,66,68  3,5,9,19,24,25,26,27,28,33,34,40,45,50,53,55,59,63,64,66  10',
  '3.08.1966  16.08.1966  2,3,5,12,15,21,23,24,26,28,36,37,38,39,50,53,55,59,66,68  2,3,5,7,15,23,28,29,32,37,38,46,49,50,52,53,59,60,61,62  11',
  '7.08.1966  9.08.1966  5,6,7,8,16,21,27,30,39,46,49,50,51,53,54,58,62,64,68,70  7,8,12,13,14,21,23,24,27,28,30,38,40,49,50,52,53,54,63,68  10',
  '13.08.1966  17.08.1966  1,5,6,11,14,16,17,20,22,23,25,26,31,41,44,47,56,59,64,70  1,5,7,9,11,16,18,20,22,25,26,35,45,46,47,51,56,67,68,70  11',
  '19.08.1966  20.08.1966  8,9,15,17,26,30,31,35,37,38,41,42,44,50,52,58,60,64,66,69  4,6,8,15,16,17,18,24,26,33,34,35,36,37,42,44,50,54,65,69  10'
]



Проверяй.
Наваял левой пяткой за 30 минут на сраном жс то, над чем ты тужишься уже две недели.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037817
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

Можно было заюзать bigint вместо number и делать по 64 бита, но мне влом, да и время правки истекло.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037828
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

Ребят, вы правда к 12 странице до сих пор не поняли задание?
Нужно сравнивать 10 цифр. 10!!!
И ответ по этим данным я уже публиковал.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037830
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

вот он:

22264239
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037835
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

И не забывайте, что это не исходный файл - а это тестовый файл
В исходном файле 5000 строк, а не 10
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037840
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это что должно у вас получиться в конечном итоге из тестового файла:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
+-----+-----------------------------+------------+------------+------+------+---------+-----+
| id  | d1                          | myData1    | myData2    | str1 | str2 | sovpalo | cnt |
+-----+-----------------------------+------------+------------+------+------+---------+-----+
|  15 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  48 | 5_7_15_22_23_27_34_37_39_40 | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 101 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 192 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  23 | 5_7_8_15_22_23_27_34_37_39  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  56 | 5_7_8_15_22_23_27_34_37_39  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 189 | 5_7_8_15_22_23_27_34_37_39  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 200 | 5_7_8_15_22_23_27_34_37_39  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  22 | 5_7_8_15_22_23_27_34_37_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  55 | 5_7_8_15_22_23_27_34_37_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 178 | 5_7_8_15_22_23_27_34_37_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 199 | 5_7_8_15_22_23_27_34_37_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  21 | 5_7_8_15_22_23_27_34_39_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  54 | 5_7_8_15_22_23_27_34_39_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 167 | 5_7_8_15_22_23_27_34_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 198 | 5_7_8_15_22_23_27_34_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  20 | 5_7_8_15_22_23_27_37_39_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  53 | 5_7_8_15_22_23_27_37_39_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 156 | 5_7_8_15_22_23_27_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 197 | 5_7_8_15_22_23_27_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  19 | 5_7_8_15_22_23_34_37_39_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  52 | 5_7_8_15_22_23_34_37_39_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 145 | 5_7_8_15_22_23_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 196 | 5_7_8_15_22_23_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  18 | 5_7_8_15_22_27_34_37_39_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  51 | 5_7_8_15_22_27_34_37_39_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 134 | 5_7_8_15_22_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 195 | 5_7_8_15_22_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  17 | 5_7_8_15_23_27_34_37_39_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  50 | 5_7_8_15_23_27_34_37_39_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 123 | 5_7_8_15_23_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 194 | 5_7_8_15_23_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  16 | 5_7_8_22_23_27_34_37_39_40  | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  49 | 5_7_8_22_23_27_34_37_39_40  | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 112 | 5_7_8_22_23_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 193 | 5_7_8_22_23_27_34_37_39_40  | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  14 | 5_8_15_22_23_27_34_37_39_40 | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  47 | 5_8_15_22_23_27_34_37_39_40 | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
|  90 | 5_8_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 191 | 5_8_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
|  13 | 7_8_15_22_23_27_34_37_39_40 | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  46 | 7_8_15_22_23_27_34_37_39_40 | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
|  79 | 7_8_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
| 190 | 7_8_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
+-----+-----------------------------+------------+------------+------+------+---------+-----+
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037843
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конечном результате, перед сортировкой - больше 2 миллионов строк.
Так что всё это нужно писать в БД.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037848
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
В конечном результате, перед сортировкой - больше 2 миллионов строк.

Напугал ежа голой жопой. Я на ноде крутил и больше.
miltorg
Так что всё это нужно писать в БД.

Тебе не нужно 2м строк. И сортировки делать не нужно. Коду, что выше это не нужно. Никому это не нужно. Закидываешь свои несчастные 5к строк (да хоть 10М, лишь бы RAM хватило) и вперёд. Если боишься выхлопа можешь сразу его писать в файл.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037851
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
В исходном файле 5000 строк, а не 10

Не сильно больше.
А это что должно у вас получиться в конечном итоге из тестового файла:
А дублировать строки обязательно?
miltorg
Нужно сравнивать 10 цифр. 10!!!

До тебя не доходит, что всё, что больше 10 - это уже и есть решение? Тебе как маленькому надо сделать перестановочки и получить файлик, как у тебя 1 в 1, чтобы начало доходить?
Кстати, посмотри вот на это:
Код: sql
1.
 '19.08.1966  20.08.1966  8,9,15,17,26,30,31,35,37,38,41,42,44,50,52,58,60,64,66,69  4,6,8,15,16,17,18,24,26,33,34,35,36,37,42,44,50,54,65,69  10'


Тут 10 совпадений. Где у тебя пара 19.08.1966 и 20.08.1966 в результате? Походу ты обосрался со своим кодом.

Вот твои исходные данные, если забыл.
22264235
Циферки сам посчитаешь руками.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037854
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Код: sql
1.
22.08.1966


А где 22.08 в исходниках? Что-то его там нету.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037872
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,


crutchmaster
Проверяй.

Ладно, сам проверю.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[
  '1.08.1966  21.08.1966  5,7,8,15,22,23,27,34,37,39,40,41,43,44,50,55,57,58,62,70  5,7,8,15,22,23,27,34,37,39,40,42,44,45,46,47,52,64,66,69  12',
  '3.08.1966  5.08.1966  2,3,5,12,15,21,23,24,26,28,36,37,38,39,50,53,55,59,66,68  2,8,11,12,14,17,18,20,21,28,36,43,50,53,55,56,59,62,64,66  10',
  '3.08.1966  14.08.1966  2,3,5,12,15,21,23,24,26,28,36,37,38,39,50,53,55,59,66,68  3,5,9,19,24,25,26,27,28,33,34,40,45,50,53,55,59,63,64,66  10',
  '3.08.1966  16.08.1966  2,3,5,12,15,21,23,24,26,28,36,37,38,39,50,53,55,59,66,68  2,3,5,7,15,23,28,29,32,37,38,46,49,50,52,53,59,60,61,62  11',
  '6.08.1966  18.08.1966  2,5,10,11,15,16,18,19,27,29,30,32,33,35,42,43,45,62,63,65  11,15,16,22,25,28,29,32,34,35,42,43,47,49,52,53,54,57,62,63  10',
  '7.08.1966  9.08.1966  5,6,7,8,16,21,27,30,39,46,49,50,51,53,54,58,62,64,68,70  7,8,12,13,14,21,23,24,27,28,30,38,40,49,50,52,53,54,63,68  10',
  '10.08.1966  21.08.1966  1,3,5,7,9,10,14,21,23,27,31,34,45,46,47,48,51,52,64,65  5,7,8,15,22,23,27,34,37,39,40,42,44,45,46,47,52,64,66,69  10',
  '12.08.1966  21.08.1966  2,9,11,12,13,17,18,23,25,27,33,38,40,44,45,46,47,52,64,66  5,7,8,15,22,23,27,34,37,39,40,42,44,45,46,47,52,64,66,69  10',
  '13.08.1966  17.08.1966  1,5,6,11,14,16,17,20,22,23,25,26,31,41,44,47,56,59,64,70  1,5,7,9,11,16,18,20,22,25,26,35,45,46,47,51,56,67,68,70  11',
  '19.08.1966  20.08.1966  8,9,15,17,26,30,31,35,37,38,41,42,44,50,52,58,60,64,66,69  4,6,8,15,16,17,18,24,26,33,34,35,36,37,42,44,50,54,65,69  10'
]



Со сдвигом ошибся.
Код: javascript
1.
        var shift = Math.floor((v - 1) / 32);
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037899
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster

miltorg
Так что всё это нужно писать в БД.

Тебе не нужно 2м строк. И сортировки делать не нужно. Коду, что выше это не нужно. Никому это не нужно. Закидываешь свои несчастные 5к строк (да хоть 10М, лишь бы RAM хватило) и вперёд. Если боишься выхлопа можешь сразу его писать в файл.

Исходные данные и результат имеет смысл хранить в БД. Тогда при ежедневном добавлении одной исходной записи не нужно перелопачивать "всех со всеми" (25 миллионов сравнений, если что). Сравнить все с последней (5000 сравнений), совпадения дописать в таблицу результатов.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037910
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю оно будет обрабатываться настолько быстро, что смысла в этом будет не очень много. Даже если новые данные умножаешь на старые, а потом дописываешь в конец файла. Всё можно сделать без бд, она тут не нужна - индексы не используются, множественный доступ не используется, выборок нет, обновлений отдельных записей нет. Зачем тут бд?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037920
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут ТС похоже надо узнать сколько "строк" совпадений, а не кол-во пар совпадений,
1. т.е. хранить в БД надо именно уникальные комбинации из 10 чисел совпадений, а не пары.
т.е. на данный момент + GROUP BY "10 чисел" на результат из совпадающих пар
2. для новой 5001 строки ищем пары с накопительной таблицей п.1
----
12 лямов записей уже не будет


поэтому лучше с БД
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037927
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster

А дублировать строки обязательно?


Да. Так в ТЗ - причём заказчик настаивал на этом пункте.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037929
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и если хранить в бд накопительную таблицу - то индексы ест-но будут использоватся
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037937
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Где у тебя пара 19.08.1966 и 20.08.1966 в результате?


раз: 22264236

два: 22264237

три: 22264238

четыре: 22264239

Я с вами не буду больше разговаривать. Вы не видите результат в 4 местах.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037940
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,


miltorg
Вы не видите результат в 4 местах.

А скинул ты что? Сам хоть видел, что скопипастил?
22267376
А это что должно у вас получиться в конечном итоге из тестового файла:
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037942
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Я с вами не буду больше разговаривать.

Жс-говнокод работает лучше, чем то, что ты там 2 недели ваял. Конечно ты не будешь больше разговаривать. Какой-то хипстор - ПТУшник уделал инженера с ВО. Возмутительно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037945
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К тестовому исходному, за это время я добавил ещё одну строку:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
2.08.1966	3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
3.08.1966	2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
4.08.1966	2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
5.08.1966	2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
6.08.1966	2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
7.08.1966	5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
8.08.1966	1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
9.08.1966	7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
10.08.1966	1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
11.08.1966	1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
12.08.1966	2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
13.08.1966	1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
14.08.1966	3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
15.08.1966	3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
16.08.1966	2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
17.08.1966	1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
18.08.1966	11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
19.08.1966	8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
20.08.1966	4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 42 44 45 46 47 52 64 66 69
22.08.1966	5 7 8 15 22 23 27 34 37 39 40 71 72 73 74 75 76 77 78 79



Не какие результаты, кроме как в виде, требуемом заказчиком - больше не анализирую.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037961
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Ладно, ладно. Я освобожусь, еще кусочек напишу, перестановочки сделаю и мы с тобой всё обсудим.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037963
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

Давай ПТУ! Дерзай
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037964
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё усилие - и вы поймёте задание почти полностью

тема начата полмесяца назад.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037968
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 записей сравнить с этими же 10 записями -> меньше 100 сравнений

5000 записей сравнить с - 5000 записей -> меньше 25 000 000 -> меньше 25 миллионов - а это время.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037985
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новая строка - отлично!

idid1dtdt1allesXXX12101.08.196621.08.19665-7-8-15-22-23-27-34-37-39-40-441212201.08.196622.08.19665-7-8-15-22-23-27-34-37-39-40113503.08.196605.08.19662-12-21-28-36-50-53-55-59-661031403.08.196614.08.19663-5-24-26-28-50-53-55-59-661031603.08.196616.08.19662-3-5-15-23-28-37-38-50-53-591161806.08.196618.08.196611-15-16-29-32-35-42-43-62-63107907.08.196609.08.19667-8-21-27-30-49-50-53-54-6810102110.08.196621.08.19665-7-23-27-34-45-46-47-52-6410122112.08.196621.08.196623-27-40-44-45-46-47-52-64-6610131713.08.196617.08.19661-5-11-16-20-22-25-26-47-56-7011192019.08.196620.08.19668-15-17-26-35-37-42-44-50-6910212221.08.196622.08.19665-7-8-15-22-23-27-34-37-39-4011будем мерятся простынями!
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037992
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

не соответствует требованиям заказчика. Заказчик просил совпадения из 10 чисел, а тут 11 и 12

Заказчик просил количество таких совпадений - такого столбца вообще нет

------------- Результат не рассматриваю.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40037997
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заказчик просил вывести оба совпадения в таблицу, а не одно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038014
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Заказчик просил вывести оба совпадения в таблицу, а не одно.
какие оба... на "простынях" непонятно, тем более их уже 10 страниц, все запутались уже
Код: sql
1.
2.
3.
Select 1,2
UNION ALL
SELECT 2,1

так сделай, если оба
вот тебе "только 10" совпадений))) и "оба"
idid1dtdt1allesXXX3503.08.196605.08.19662-12-21-28-36-50-53-55-59-661031403.08.196614.08.19663-5-24-26-28-50-53-55-59-66105305.08.196603.08.19662-12-21-28-36-50-53-55-59-661061806.08.196618.08.196611-15-16-29-32-35-42-43-62-63107907.08.196609.08.19667-8-21-27-30-49-50-53-54-68109709.08.196607.08.19667-8-21-27-30-49-50-53-54-6810102110.08.196621.08.19665-7-23-27-34-45-46-47-52-6410122112.08.196621.08.196623-27-40-44-45-46-47-52-64-661014314.08.196603.08.19663-5-24-26-28-50-53-55-59-661018618.08.196606.08.196611-15-16-29-32-35-42-43-62-6310192019.08.196620.08.19668-15-17-26-35-37-42-44-50-6910201920.08.196619.08.19668-15-17-26-35-37-42-44-50-6910211021.08.196610.08.19665-7-23-27-34-45-46-47-52-6410211221.08.196612.08.196623-27-40-44-45-46-47-52-64-6610
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038015
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Заказчик просил количество таких совпадений - такого столбца вообще нет
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038024
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

так сделай GROUP BY alles и GROUP_CONCAT как тебе надо
мы в форуме MySQL, а не Просто Треп

кто из нас деньги получит?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038029
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
у вас неверное решение, но вы этого не видете потому что не доделали задание.

Доказательство?



5_7_15_22_23_27_34_37_39_40 - у вас такого вообще нет. А оно повторяется в 3 строках - тоесть это важный искомый результат.

Код: sql
1.
2.
3.
4.
5.
6.
+-----+-----------------------------+------------+------------+------+------+---------+-----+
| id  | d1                          | myData1    | myData2    | str1 | str2 | sovpalo | cnt |
+-----+-----------------------------+------------+------------+------+------+---------+-----+
|  15 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  48 | 5_7_15_22_23_27_34_37_39_40 | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 101 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038030
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, совпадений будет по 2 минимум, так как
Код: sql
1.
2.
3.
select 1,2,alles
union
select 2,1,alles
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038032
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Alex_Ustinov,
у вас неверное решение, но вы этого не видете потому что не доделали задание.

Доказательство?



5_7_15_22_23_27_34_37_39_40 - у вас такого вообще нет. А оно повторяется в 3 строках - тоесть это важный искомый результат.

Код: sql
1.
2.
3.
4.
5.
6.
+-----+-----------------------------+------------+------------+------+------+---------+-----+
| id  | d1                          | myData1    | myData2    | str1 | str2 | sovpalo | cnt |
+-----+-----------------------------+------------+------------+------+------+---------+-----+
|  15 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 22.08.1966 |    0 |   21 |      11 |   4 |
|  48 | 5_7_15_22_23_27_34_37_39_40 | 21.08.1966 | 22.08.1966 |   20 |   21 |      11 |   4 |
| 101 | 5_7_15_22_23_27_34_37_39_40 | 1.08.1966  | 21.08.1966 |    0 |   20 |      12 |   4 |

miltorgне соответствует требованиям заказчика. Заказчик просил совпадения из 10 чисел, а тут 11 и 12ты уже в лавку за пивом сбегал?)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038034
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Столбец d1 - 10 чисел. Что не так?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038050
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

почему тогда ты показываешь в 2 строки, если sovpalo 11?
надо же в твоей идеологии показывать 11 строк? (из 11 получаем 10 - вычеркиваем по 1 числу 11 раз)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038058
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Sovpalo - оно зачем вам?
Я вам показал строку - 5_7_15_22_23_27_34_37_39_40

Её у вас нет. Значит ваше решение не верное.

Если будете продолжать претворяться тупым - я перестану с вами разговаривать.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038063
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

ничего себе наглость...
а где совпадение
7-8-15-22-23-27-34-37-39-40 (без 5)
5-8-15-22-23-27-34-37-39-40 (без 7)
5-7-15-22-23-27-34-37-39-40 (без 8)
5-7-8-22-23-27-34-37-39-40 (без 15)
5-7-8-15-23-27-34-37-39-40 .....
5-7-8-15-22-27-34-37-39-40...
5-7-8-15-22-23-34-37-39-40......
5-7-8-15-22-23-27-37-39-40.......
5-7-8-15-22-23-27-34-39-40........
5-7-8-15-22-23-27-34-37-40............


ИХ у вас нет. Значит ваше решение не верное.

уважаемый ТС, кто из нас притворяется тупым на более 10 страницах?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038065
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Проверил вашу первую строку:

есть:

22267376

всё. разговоры с вами прекращаю. - Только решение в требуемом заказчиком виде.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038071
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Alex_Ustinov,

Проверил вашу первую строку:

есть:

22267376

всё. разговоры с вами прекращаю. - Только решение в требуемом заказчиком виде.
вот у меня
1 22 01.08.1966 22.08.1966 5-7-8-15-22-23-27-34-37-39-40 11

клоунаду пора прекращать в этом форуме. Надо переносить в другой.
Ни одного запроса от ТС не видать.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038090
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg,

с такими базами - сваливать с MySQL/ очевидно... она не для таких задач
остальное- жуткое извращение.... ну если так нравиться самообладание...)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С самого начала надо было описать наиболее полное множество тест-кейсов.

И ожидаемые outputs.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg
Нас ждёт вторая серия. - Заказчик сказал, что лучшая проверка - это генерировать всё подряд и проверять на совпадения.

У него правда есть своя идея. - Отгенерированное класть не просто так, и не в базу, а в файлы по первому числу. - Сразу группировать единицы и пр.

Тут... как-то странно. Это изменения к ТЗ? Или здесь заказчик даёт нам ценные указания.
Он - разработчик? Он знает как лучше сделать?

У меня нет сомнений в части уважения к его желаниям. Но что мы в топике будем обсуждать
когда ценное указание нам придёт снова?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038122
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miltorg
Alex_Ustinov,

Проверил вашу первую строку:

есть:

22267376

всё. разговоры с вами прекращаю. - Только решение в требуемом заказчиком виде.


а где совпадения ??
Код: plsql
1.
2.
1.08.1966     7 8 15 22 23 27 34 37 39 44
21.08.1966    7 8 15 22 23 27 34 37 39 44
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038132
Dino_zavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или
Код: plsql
1.
2.
1.08.1966    8 15 22 23 27 34 37 39 40 44
21.08.1966   8 15 22 23 27 34 37 39 40 44



и так далее
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038133
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dino_zavr,

Приводите к требованиям заказчика ваш вопрос - и тогда сразу станет понятен ответ.

Намекну - это таблица - выборка максимальных совпадений. А максимальное там - 3 совпадения.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038134
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У него в самой первой странице было

Код: sql
1.
2.
7.12.2017 3_8_9_11_16_28_30_31_35_37
5.12.2019 3_8_9_11_16_28_30_31_35_37



Хромосома - одинаковая. Даты - разные. Группируем.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038140
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
У него в самой первой странице было

Код: sql
1.
2.
7.12.2017 3_8_9_11_16_28_30_31_35_37
5.12.2019 3_8_9_11_16_28_30_31_35_37



Хромосома - одинаковая. Даты - разные. Группируем.
кто будет в чужом нижнем белье копаться.
В данном форуме по MySQL.
Дано и так далее с Create table и Insert Into

что было бы с топиком в форуе с++ если пойти туда и начать строчить SQL выкладки?

самый главный вопрос так и не решен - как строить комбинаторику? В MySQL? (далее все очевидно)
Где у ТС SQL скрипты для воспроизведения?)))
mayton, почему ЭТО здесь?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
mayton
У него в самой первой странице было

Код: sql
1.
2.
7.12.2017 3_8_9_11_16_28_30_31_35_37
5.12.2019 3_8_9_11_16_28_30_31_35_37



Хромосома - одинаковая. Даты - разные. Группируем.
кто будет в чужом нижнем белье копаться.
В данном форуме по MySQL.
Дано и так далее с Create table и Insert Into

что было бы с топиком в форуе с++ если пойти туда и начать строчить SQL выкладки?

самый главный вопрос так и не решен - как строить комбинаторику? В MySQL? (далее все очевидно)
Где у ТС SQL скрипты для воспроизведения?)))
mayton, почему ЭТО здесь?

Этому топику - место в Программировании. Ну по крайней мере здесь темы MySQL как таковой нету.
Здесь вообще - не про базы данных. Базовикам - здесь не интересно. Здесь нечего смотреть.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038149
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ты же один их модераторов?...)
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038151
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038153
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
Где у ТС SQL скрипты для воспроизведения?)))
без этого не интересно
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038154
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что нет?
Имя mayton
Статус Зарегистрированный участник

Модератор форума C++
Модератор форума Сравнение СУБД

---
я же не сказал что модератор этого форума
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038155
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov, я - не модератор MySQL.

А непрофильные не могут переносить топики.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038172
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результат.
5 7 8 15 22 23 27 34 37 391.08.196621.08.19661244 7 8 15 22 23 27 34 37 391.08.196621.08.19661244 40 8 15 22 23 27 34 37 391.08.196621.08.19661244 7 40 15 22 23 27 34 37 391.08.196621.08.19661244 7 8 40 22 23 27 34 37 391.08.196621.08.19661244 7 8 15 40 23 27 34 37 391.08.196621.08.19661244 7 8 15 22 40 27 34 37 391.08.196621.08.19661244 7 8 15 22 23 40 34 37 391.08.196621.08.19661244 7 8 15 22 23 27 40 37 391.08.196621.08.19661244 7 8 15 22 23 27 34 40 391.08.196621.08.19661244 7 8 15 22 23 27 34 37 401.08.196621.08.1966125 44 8 15 22 23 27 34 37 391.08.196621.08.1966125 44 40 15 22 23 27 34 37 391.08.196621.08.1966125 44 8 40 22 23 27 34 37 391.08.196621.08.1966125 44 8 15 40 23 27 34 37 391.08.196621.08.1966125 44 8 15 22 40 27 34 37 391.08.196621.08.1966125 44 8 15 22 23 40 34 37 391.08.196621.08.1966125 44 8 15 22 23 27 40 37 391.08.196621.08.1966125 44 8 15 22 23 27 34 40 391.08.196621.08.1966125 44 8 15 22 23 27 34 37 401.08.196621.08.1966125 7 44 15 22 23 27 34 37 391.08.196621.08.1966125 7 44 40 22 23 27 34 37 391.08.196621.08.1966125 7 44 15 40 23 27 34 37 391.08.196621.08.1966125 7 44 15 22 40 27 34 37 391.08.196621.08.1966125 7 44 15 22 23 40 34 37 391.08.196621.08.1966125 7 44 15 22 23 27 40 37 391.08.196621.08.1966125 7 44 15 22 23 27 34 40 391.08.196621.08.1966125 7 44 15 22 23 27 34 37 401.08.196621.08.1966125 7 8 44 22 23 27 34 37 391.08.196621.08.1966125 7 8 44 40 23 27 34 37 391.08.196621.08.1966125 7 8 44 22 40 27 34 37 391.08.196621.08.1966125 7 8 44 22 23 40 34 37 391.08.196621.08.1966125 7 8 44 22 23 27 40 37 391.08.196621.08.1966125 7 8 44 22 23 27 34 40 391.08.196621.08.1966125 7 8 44 22 23 27 34 37 401.08.196621.08.1966125 7 8 15 44 23 27 34 37 391.08.196621.08.1966125 7 8 15 44 40 27 34 37 391.08.196621.08.1966125 7 8 15 44 23 40 34 37 391.08.196621.08.1966125 7 8 15 44 23 27 40 37 391.08.196621.08.1966125 7 8 15 44 23 27 34 40 391.08.196621.08.1966125 7 8 15 44 23 27 34 37 401.08.196621.08.1966125 7 8 15 22 44 27 34 37 391.08.196621.08.1966125 7 8 15 22 44 40 34 37 391.08.196621.08.1966125 7 8 15 22 44 27 40 37 391.08.196621.08.1966125 7 8 15 22 44 27 34 40 391.08.196621.08.1966125 7 8 15 22 44 27 34 37 401.08.196621.08.1966125 7 8 15 22 23 44 34 37 391.08.196621.08.1966125 7 8 15 22 23 44 40 37 391.08.196621.08.1966125 7 8 15 22 23 44 34 40 391.08.196621.08.1966125 7 8 15 22 23 44 34 37 401.08.196621.08.1966125 7 8 15 22 23 27 44 37 391.08.196621.08.1966125 7 8 15 22 23 27 44 40 391.08.196621.08.1966125 7 8 15 22 23 27 44 37 401.08.196621.08.1966125 7 8 15 22 23 27 34 44 391.08.196621.08.1966125 7 8 15 22 23 27 34 44 401.08.196621.08.1966125 7 8 15 22 23 27 34 37 441.08.196621.08.1966125 7 8 15 22 23 27 34 37 391.08.196622.08.19661140 7 8 15 22 23 27 34 37 391.08.196622.08.1966115 40 8 15 22 23 27 34 37 391.08.196622.08.1966115 7 40 15 22 23 27 34 37 391.08.196622.08.1966115 7 8 40 22 23 27 34 37 391.08.196622.08.1966115 7 8 15 40 23 27 34 37 391.08.196622.08.1966115 7 8 15 22 40 27 34 37 391.08.196622.08.1966115 7 8 15 22 23 40 34 37 391.08.196622.08.1966115 7 8 15 22 23 27 40 37 391.08.196622.08.1966115 7 8 15 22 23 27 34 40 391.08.196622.08.1966115 7 8 15 22 23 27 34 37 401.08.196622.08.1966112 12 21 28 36 50 53 55 59 663.08.19665.08.1966103 5 24 26 28 50 53 55 59 663.08.196614.08.1966102 3 5 15 23 28 37 38 50 533.08.196616.08.19661159 3 5 15 23 28 37 38 50 533.08.196616.08.1966112 59 5 15 23 28 37 38 50 533.08.196616.08.1966112 3 59 15 23 28 37 38 50 533.08.196616.08.1966112 3 5 59 23 28 37 38 50 533.08.196616.08.1966112 3 5 15 59 28 37 38 50 533.08.196616.08.1966112 3 5 15 23 59 37 38 50 533.08.196616.08.1966112 3 5 15 23 28 59 38 50 533.08.196616.08.1966112 3 5 15 23 28 37 59 50 533.08.196616.08.1966112 3 5 15 23 28 37 38 59 533.08.196616.08.1966112 3 5 15 23 28 37 38 50 593.08.196616.08.19661111 15 16 29 32 35 42 43 62 636.08.196618.08.1966107 8 21 27 30 49 50 53 54 687.08.19669.08.1966105 7 23 27 34 45 46 47 52 6410.08.196621.08.19661023 27 40 44 45 46 47 52 64 6612.08.196621.08.1966101 5 11 16 20 22 25 26 47 5613.08.196617.08.19661170 5 11 16 20 22 25 26 47 5613.08.196617.08.1966111 70 11 16 20 22 25 26 47 5613.08.196617.08.1966111 5 70 16 20 22 25 26 47 5613.08.196617.08.1966111 5 11 70 20 22 25 26 47 5613.08.196617.08.1966111 5 11 16 70 22 25 26 47 5613.08.196617.08.1966111 5 11 16 20 70 25 26 47 5613.08.196617.08.1966111 5 11 16 20 22 70 26 47 5613.08.196617.08.1966111 5 11 16 20 22 25 70 47 5613.08.196617.08.1966111 5 11 16 20 22 25 26 70 5613.08.196617.08.1966111 5 11 16 20 22 25 26 47 7013.08.196617.08.1966118 15 17 26 35 37 42 44 50 6919.08.196620.08.1966105 7 8 15 22 23 27 34 37 3921.08.196622.08.19661140 7 8 15 22 23 27 34 37 3921.08.196622.08.1966115 40 8 15 22 23 27 34 37 3921.08.196622.08.1966115 7 40 15 22 23 27 34 37 3921.08.196622.08.1966115 7 8 40 22 23 27 34 37 3921.08.196622.08.1966115 7 8 15 40 23 27 34 37 3921.08.196622.08.1966115 7 8 15 22 40 27 34 37 3921.08.196622.08.1966115 7 8 15 22 23 40 34 37 3921.08.196622.08.1966115 7 8 15 22 23 27 40 37 3921.08.196622.08.1966115 7 8 15 22 23 27 34 40 3921.08.196622.08.1966115 7 8 15 22 23 27 34 37 4021.08.196622.08.196611


Код

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
var src = `1.08.1966	5 7 8 15 22 23 27 34 37 39 40 41 43 44 50 55 57 58 62 70
2.08.1966	3 5 9 12 15 16 19 20 23 25 29 30 34 37 43 48 55 58 59 61
3.08.1966	2 3 5 12 15 21 23 24 26 28 36 37 38 39 50 53 55 59 66 68
4.08.1966	2 3 5 7 8 11 14 16 19 25 35 43 50 51 55 60 61 66 67 70
5.08.1966	2 8 11 12 14 17 18 20 21 28 36 43 50 53 55 56 59 62 64 66
6.08.1966	2 5 10 11 15 16 18 19 27 29 30 32 33 35 42 43 45 62 63 65
7.08.1966	5 6 7 8 16 21 27 30 39 46 49 50 51 53 54 58 62 64 68 70
8.08.1966	1 2 3 7 9 11 12 13 15 17 20 24 26 28 34 45 48 49 61 66
9.08.1966	7 8 12 13 14 21 23 24 27 28 30 38 40 49 50 52 53 54 63 68
10.08.1966	1 3 5 7 9 10 14 21 23 27 31 34 45 46 47 48 51 52 64 65
11.08.1966	1 5 6 7 9 11 14 17 29 30 33 36 37 39 42 43 48 50 64 65
12.08.1966	2 9 11 12 13 17 18 23 25 27 33 38 40 44 45 46 47 52 64 66
13.08.1966	1 5 6 11 14 16 17 20 22 23 25 26 31 41 44 47 56 59 64 70
14.08.1966	3 5 9 19 24 25 26 27 28 33 34 40 45 50 53 55 59 63 64 66
15.08.1966	3 6 8 11 13 19 23 25 28 32 33 34 37 41 50 54 56 57 59 65
16.08.1966	2 3 5 7 15 23 28 29 32 37 38 46 49 50 52 53 59 60 61 62
17.08.1966	1 5 7 9 11 16 18 20 22 25 26 35 45 46 47 51 56 67 68 70
18.08.1966	11 15 16 22 25 28 29 32 34 35 42 43 47 49 52 53 54 57 62 63
19.08.1966	8 9 15 17 26 30 31 35 37 38 41 42 44 50 52 58 60 64 66 69
20.08.1966	4 6 8 15 16 17 18 24 26 33 34 35 36 37 42 44 50 54 65 69
21.08.1966	5 7 8 15 22 23 27 34 37 39 40 42 44 45 46 47 52 64 66 69
22.08.1966	5 7 8 15 22 23 27 34 37 39 40 71 72 73 74 75 76 77 78 79`

var bitCount = function(n) { //со стак оверфлоу
  n = n - ((n >> 1) & 0x55555555)
  n = (n & 0x33333333) + ((n >> 2) & 0x33333333)
  return ((n + (n >> 4) & 0xF0F0F0F) * 0x1010101) >> 24
}

var BITS = 32;
var numToBit = [0] //место цифры в битсете
for (let i = 0; i < BITS; i++) numToBit[i + 1] = 1 << i;

var data = src.split("\n").map(v=>{ //парсим исходные
    var [date, digs] = v.split("\t");
    digs = digs.split(" ").map(v=>+v); //кастим строки в числа
    var bits = [0, 0, 0, 0, 0, 0, 0, 0]; //По 4 байта на число, 32 цифры в числе. Их 8, шоб всем хватило 
    //(хватает и 3-х, самая большая цифра - 256. Надо больше, сделай больше)
    digs.forEach(v=>{
        var shift = Math.floor((v - 1) / BITS); //элемент массива bits
        bits[shift] = bits[shift] | numToBit[v - shift * BITS] //"Сдвигаем" число
    });
    return {date, digs, bits}
});

var res = [];

for (let i = 0; i < data.length - 1; i++) {
    for (let j = i + 1; j < data.length; j++) { //перебор всех со всеми
        var v1 = data[i], v2 = data[j];
        var hits = 0;
        var join = [];
        for (let b = 0; b < 8; b++) {
            var cross = v1.bits[b] & v2.bits[b];
            numToBit.forEach((v,dig)=>{
                if (v & cross) join.push(dig + b * BITS);
            });
            //hits += bitCount(cross); //считаем совпавшие биты (цифры)
        }
        if (join.length >= 10) {
            res.push({set1 : v1, set2 : v2, join, hits : join.length}); // заполняем массив нужным
        }
    }
}

//Комбинаторный итератор
var iterator = function(size, digs = 9) {
    var pos = []
    var inc = function() {
        if (this.n <= 0 && this.next) {
            this.n = this.next.n + 1;
        } else {
            this.n++;
        }
        if (this.n > digs) {
            if (!this.next) return this.n = null;
            var nInc = this.next.inc();
            if (nInc) {
                this.n = -1;
            } else {
                return this.n = null;
            }
            if (this.n > digs) this.inc(); 
        }
        return this.n;
    }
    for (let i = 0; i < size; i++) pos[i] = {n : 0, inc};
    for (let i = 0; i < size; i++) {
        var rec = pos[i];
        if (i == 0) rec.first = true;
        if (i == size - 1) rec.last = true;
        if (!(rec.fisrt && rec.last)) {
            if (!rec.last) rec.next = pos[i+1];
            if (!rec.first) rec.prev = pos[i-1]
        }
    }
    return { 
        first : pos[0], 
        get : (n)=>pos[n].n,
        inc : ()=>pos[0].inc(),
        map : ()=>pos.map(v=>v.n),
        pos
    }
}

//Комбинитрует массив размером > 10
var combine = function(arr) {
    var c = arr.length
    if (c < 10) return false;
    if (c == 10) return [arr];
    var n = c - 10;
    var base = arr.slice(0,10);
    var ext = arr.slice(10);
    var it = iterator(n);
    var ret = [base];
    do {
        var rec = [...base];
        it.map().forEach((v,i)=>{if (v >= 0) rec[v] = ext[i]});
        ret.push(rec);
    } while (it.inc() != null);
    return ret; 
}


//Выхлоп
var out = []

res.forEach(v=>{
    out.push(...combine(v.join).map(j=>[j.join(" "), v.set1.date, v.set2.date, v.hits].join(",")));
});

fs.writeFileSync("out.txt", out.join("\n"))




Проверяй. Завтра сделаю генератор и мы продолжим.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038178
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

fix итератора:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
var iterator = function(size, digs = 9) {
    var pos = []
    var inc = function() {
        if (this.n <= 0 && this.next && this.next.n > 0) {
            this.n = this.next.n + 1;
        } else {
            this.n++;
        }
        if (this.next && this.n == this.next.n) return this.inc()
        if (this.n > digs) {
            if (!this.next) return this.n = null;
            var nInc = this.next.inc();
            if (nInc != null) {
                this.n = -1;
            } else {
                return this.n = null;
            }
            if (this.n > digs) this.inc(); 
        }
        return this.n;
    }
    for (let i = 0; i < size; i++) pos[i] = {n : -1, inc};
    for (let i = 0; i < size; i++) {
        var rec = pos[i];
        if (i == 0) rec.first = true;
        if (i == size - 1) rec.last = true;
        if (!(rec.fisrt && rec.last)) {
            if (!rec.last) rec.next = pos[i+1];
            if (!rec.first) rec.prev = pos[i-1]
        }
    }
    return { 
        first : pos[0], 
        get : (n)=>pos[n].n,
        inc : ()=>pos[0].inc(),
        map : ()=>pos.map(v=>v.n),
        pos
    }
}



Актуальные.

5 7 8 15 22 23 27 34 37 391.08.196621.08.1966125 7 8 15 22 23 27 34 37 391.08.196621.08.19661240 7 8 15 22 23 27 34 37 391.08.196621.08.1966125 40 8 15 22 23 27 34 37 391.08.196621.08.1966125 7 40 15 22 23 27 34 37 391.08.196621.08.1966125 7 8 40 22 23 27 34 37 391.08.196621.08.1966125 7 8 15 40 23 27 34 37 391.08.196621.08.1966125 7 8 15 22 40 27 34 37 391.08.196621.08.1966125 7 8 15 22 23 40 34 37 391.08.196621.08.1966125 7 8 15 22 23 27 40 37 391.08.196621.08.1966125 7 8 15 22 23 27 34 40 391.08.196621.08.1966125 7 8 15 22 23 27 34 37 401.08.196621.08.19661244 7 8 15 22 23 27 34 37 391.08.196621.08.19661244 40 8 15 22 23 27 34 37 391.08.196621.08.19661244 7 40 15 22 23 27 34 37 391.08.196621.08.19661244 7 8 40 22 23 27 34 37 391.08.196621.08.19661244 7 8 15 40 23 27 34 37 391.08.196621.08.19661244 7 8 15 22 40 27 34 37 391.08.196621.08.19661244 7 8 15 22 23 40 34 37 391.08.196621.08.19661244 7 8 15 22 23 27 40 37 391.08.196621.08.19661244 7 8 15 22 23 27 34 40 391.08.196621.08.19661244 7 8 15 22 23 27 34 37 401.08.196621.08.1966125 44 8 15 22 23 27 34 37 391.08.196621.08.1966125 44 40 15 22 23 27 34 37 391.08.196621.08.1966125 44 8 40 22 23 27 34 37 391.08.196621.08.1966125 44 8 15 40 23 27 34 37 391.08.196621.08.1966125 44 8 15 22 40 27 34 37 391.08.196621.08.1966125 44 8 15 22 23 40 34 37 391.08.196621.08.1966125 44 8 15 22 23 27 40 37 391.08.196621.08.1966125 44 8 15 22 23 27 34 40 391.08.196621.08.1966125 44 8 15 22 23 27 34 37 401.08.196621.08.1966125 7 44 15 22 23 27 34 37 391.08.196621.08.1966125 7 44 40 22 23 27 34 37 391.08.196621.08.1966125 7 44 15 40 23 27 34 37 391.08.196621.08.1966125 7 44 15 22 40 27 34 37 391.08.196621.08.1966125 7 44 15 22 23 40 34 37 391.08.196621.08.1966125 7 44 15 22 23 27 40 37 391.08.196621.08.1966125 7 44 15 22 23 27 34 40 391.08.196621.08.1966125 7 44 15 22 23 27 34 37 401.08.196621.08.1966125 7 8 44 22 23 27 34 37 391.08.196621.08.1966125 7 8 44 40 23 27 34 37 391.08.196621.08.1966125 7 8 44 22 40 27 34 37 391.08.196621.08.1966125 7 8 44 22 23 40 34 37 391.08.196621.08.1966125 7 8 44 22 23 27 40 37 391.08.196621.08.1966125 7 8 44 22 23 27 34 40 391.08.196621.08.1966125 7 8 44 22 23 27 34 37 401.08.196621.08.1966125 7 8 15 44 23 27 34 37 391.08.196621.08.1966125 7 8 15 44 40 27 34 37 391.08.196621.08.1966125 7 8 15 44 23 40 34 37 391.08.196621.08.1966125 7 8 15 44 23 27 40 37 391.08.196621.08.1966125 7 8 15 44 23 27 34 40 391.08.196621.08.1966125 7 8 15 44 23 27 34 37 401.08.196621.08.1966125 7 8 15 22 44 27 34 37 391.08.196621.08.1966125 7 8 15 22 44 40 34 37 391.08.196621.08.1966125 7 8 15 22 44 27 40 37 391.08.196621.08.1966125 7 8 15 22 44 27 34 40 391.08.196621.08.1966125 7 8 15 22 44 27 34 37 401.08.196621.08.1966125 7 8 15 22 23 44 34 37 391.08.196621.08.1966125 7 8 15 22 23 44 40 37 391.08.196621.08.1966125 7 8 15 22 23 44 34 40 391.08.196621.08.1966125 7 8 15 22 23 44 34 37 401.08.196621.08.1966125 7 8 15 22 23 27 44 37 391.08.196621.08.1966125 7 8 15 22 23 27 44 40 391.08.196621.08.1966125 7 8 15 22 23 27 44 37 401.08.196621.08.1966125 7 8 15 22 23 27 34 44 391.08.196621.08.1966125 7 8 15 22 23 27 34 44 401.08.196621.08.1966125 7 8 15 22 23 27 34 37 441.08.196621.08.1966125 7 8 15 22 23 27 34 37 391.08.196622.08.1966115 7 8 15 22 23 27 34 37 391.08.196622.08.19661140 7 8 15 22 23 27 34 37 391.08.196622.08.1966115 40 8 15 22 23 27 34 37 391.08.196622.08.1966115 7 40 15 22 23 27 34 37 391.08.196622.08.1966115 7 8 40 22 23 27 34 37 391.08.196622.08.1966115 7 8 15 40 23 27 34 37 391.08.196622.08.1966115 7 8 15 22 40 27 34 37 391.08.196622.08.1966115 7 8 15 22 23 40 34 37 391.08.196622.08.1966115 7 8 15 22 23 27 40 37 391.08.196622.08.1966115 7 8 15 22 23 27 34 40 391.08.196622.08.1966115 7 8 15 22 23 27 34 37 401.08.196622.08.1966112 12 21 28 36 50 53 55 59 663.08.19665.08.1966103 5 24 26 28 50 53 55 59 663.08.196614.08.1966102 3 5 15 23 28 37 38 50 533.08.196616.08.1966112 3 5 15 23 28 37 38 50 533.08.196616.08.19661159 3 5 15 23 28 37 38 50 533.08.196616.08.1966112 59 5 15 23 28 37 38 50 533.08.196616.08.1966112 3 59 15 23 28 37 38 50 533.08.196616.08.1966112 3 5 59 23 28 37 38 50 533.08.196616.08.1966112 3 5 15 59 28 37 38 50 533.08.196616.08.1966112 3 5 15 23 59 37 38 50 533.08.196616.08.1966112 3 5 15 23 28 59 38 50 533.08.196616.08.1966112 3 5 15 23 28 37 59 50 533.08.196616.08.1966112 3 5 15 23 28 37 38 59 533.08.196616.08.1966112 3 5 15 23 28 37 38 50 593.08.196616.08.19661111 15 16 29 32 35 42 43 62 636.08.196618.08.1966107 8 21 27 30 49 50 53 54 687.08.19669.08.1966105 7 23 27 34 45 46 47 52 6410.08.196621.08.19661023 27 40 44 45 46 47 52 64 6612.08.196621.08.1966101 5 11 16 20 22 25 26 47 5613.08.196617.08.1966111 5 11 16 20 22 25 26 47 5613.08.196617.08.19661170 5 11 16 20 22 25 26 47 5613.08.196617.08.1966111 70 11 16 20 22 25 26 47 5613.08.196617.08.1966111 5 70 16 20 22 25 26 47 5613.08.196617.08.1966111 5 11 70 20 22 25 26 47 5613.08.196617.08.1966111 5 11 16 70 22 25 26 47 5613.08.196617.08.1966111 5 11 16 20 70 25 26 47 5613.08.196617.08.1966111 5 11 16 20 22 70 26 47 5613.08.196617.08.1966111 5 11 16 20 22 25 70 47 5613.08.196617.08.1966111 5 11 16 20 22 25 26 70 5613.08.196617.08.1966111 5 11 16 20 22 25 26 47 7013.08.196617.08.1966118 15 17 26 35 37 42 44 50 6919.08.196620.08.1966105 7 8 15 22 23 27 34 37 3921.08.196622.08.1966115 7 8 15 22 23 27 34 37 3921.08.196622.08.19661140 7 8 15 22 23 27 34 37 3921.08.196622.08.1966115 40 8 15 22 23 27 34 37 3921.08.196622.08.1966115 7 40 15 22 23 27 34 37 3921.08.196622.08.1966115 7 8 40 22 23 27 34 37 3921.08.196622.08.1966115 7 8 15 40 23 27 34 37 3921.08.196622.08.1966115 7 8 15 22 40 27 34 37 3921.08.196622.08.1966115 7 8 15 22 23 40 34 37 3921.08.196622.08.1966115 7 8 15 22 23 27 40 37 3921.08.196622.08.1966115 7 8 15 22 23 27 34 40 3921.08.196622.08.1966115 7 8 15 22 23 27 34 37 4021.08.196622.08.196611
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038182
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с вас фигею господа. Вам реально больше не чем заняться? Может Вы тогда и нам на фирму пару запросов пооптимизируете, а то отчетик как-то долго готовиться начал .. минут 10.
:)

Ладно, я понимаю ещё помочь, подсказать челу. Особенно с интересной задачей, поправить ЕГО решение, показать КУДА стоит смотреть .. а тут? Какие в жопу "совпадения" и "заказчик хочет только так и не иначе"? Хочет - пусть платит.
Не, я ТАК ни умею.. даже уже интересно чем тут кончится: найдется желающий заплатить ТС-у за ЕГО решение? :D
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038187
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Ахаха)
тихо..... )))
(это анализ английской лотереи "10 из 20" начиная с 1966 года)

ё-заказчик!Приводите к требованиям заказчика ваш вопрос - и тогда сразу станет понятен ответ.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038188
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

Я один не увидел количества совпадений?
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038190
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте отдельным топиком поднимем генерацию k-permutations-of-n.

Это не будет тематически связано с задачками Милторга. Это - другая постановка
где мы просто поищем быстрые алгоритмы генерации. На С++, Golang и прочих
быстрых компилируемых языках.

С бенчмарками и исходниками в качестве доказательства авторства.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038196
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Ну а почему бы вам не решить полностью мою задачу? Для всех 5 тысяч строк из текстового файла, vx.txt - это вход
А на выходе - строки с максимальным числом совпадений.

Вы ведь говорите что это чрезвычайно просто. И не ресурсоёмко. И БД не нужно.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038203
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg мою задачувсе и решают твою задачу
и решили.

Почему бы тебе не обработать битовое решение в виде как требует твой заказчик?
Т.е. осталось из 11,12 совпадений добавить по 11, 12 строк с 10-ю совпадениями

кто сказал что БД не нужно?
БД нужно,
1. потому что данные ежедневные, необходимо хранить предыдущие комбинации, чтобы не генерить каждый день вчерашнее.
2. потому что там держим и вид "заказчика" и битовый и используем ф-ю для сравнения
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038205
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вид в котором можно делать комбинаторику в SQL - явно не "строка" а ...таблица
По-моему где-то выше предлагали что-то похожее
таблицаddt n5 01.08.19667 01.08.19668 01.08.196615 01.08.196622 01.08.196623 01.08.196627 01.08.196634 01.08.196637 01.08.196639 01.08.196640 01.08.196641 01.08.196643 01.08.196644 01.08.196650 01.08.196655 01.08.196657 01.08.196658 01.08.196662 01.08.196670 01.08.1966

и дал бы ты данные в виде SQL сразу - неделю бы не копались
SQL кодище набора циферек на 1966-08-01)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
USE test;
CREATE TABLE loto10 (
  n int DEFAULT NULL,
  ddt date DEFAULT NULL);

INSERT INTO loto10 (n, ddt) VALUES
(5, '1966-08-01'),
(7, '1966-08-01'),
(8, '1966-08-01'),
(15, '1966-08-01'),
(22, '1966-08-01'),
(23, '1966-08-01'),
(27, '1966-08-01'),
(34, '1966-08-01'),
(37, '1966-08-01'),
(39, '1966-08-01'),
(40, '1966-08-01'),
(41, '1966-08-01'),
(43, '1966-08-01'),
(44, '1966-08-01'),
(50, '1966-08-01'),
(55, '1966-08-01'),
(57, '1966-08-01'),
(58, '1966-08-01'),
(62, '1966-08-01'),
(70, '1966-08-01');

и именно так "1966-08-01" а для заказчика в "ответе" показывай как хочешь.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038209
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь самое главное - генерация комбинаций 10 из 20
должно получиться 20!/((20-10)!*10!)=184 756 вариантов (выше уже упоминали)


на SQL, все "влоб", ИЗЫСКИ не для нас
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT  * FROM 
(SELECT l.n AS id1 FROM loto10 l WHERE l.ddt='1966-08-01') AS t1 
JOIN 
(SELECT l.n AS id2 FROM loto10 l WHERE l.ddt='1966-08-01') AS t2 
JOIN 
(SELECT l.n AS id3 FROM loto10 l WHERE l.ddt='1966-08-01') AS t3 
JOIN 
(SELECT l.n AS id4 FROM loto10 l WHERE l.ddt='1966-08-01') AS t4 
JOIN 
(SELECT l.n AS id5 FROM loto10 l WHERE l.ddt='1966-08-01') AS t5 
JOIN
(SELECT l.n AS id6 FROM loto10 l WHERE l.ddt='1966-08-01') AS t6 
JOIN 
(SELECT l.n AS id7 FROM loto10 l WHERE l.ddt='1966-08-01') AS t7 
JOIN 
(SELECT l.n AS id8 FROM loto10 l WHERE l.ddt='1966-08-01') AS t8
JOIN 
(SELECT l.n AS id9 FROM loto10 l WHERE l.ddt='1966-08-01') AS t9
JOIN 
(SELECT l.n AS id10 FROM loto10 l WHERE l.ddt='1966-08-01') AS t10

WHERE t1.id1<t2.id2 AND id2<id3 AND id3<id4 AND id4<id5 AND t5.id5<t6.id6
AND id6<id7 AND id7<id8 
 AND id8<id9 AND id9<id10
;

тут уж верь не верь - получилось...184756
кстати innodb_buffer_pool_size лучше поставить >1G

это лишь пример для строки 1. но я так вижу что первая строка в комбинациях нам не нужна
теперь надо отработать "механику телодвижений" - что и зачем (в какой последовательности) делаем.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038212
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

И откуда только 200 тысяч? Вы ведь говорили что всё просто.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038214
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,
это не решение, это вариант построения комбинаций 10 чисел из 20
я говорил что все просто в вашем методе? запямотовал...
как сделать просто - выше все показано.

это по вашему пути идем (циклы, "массивы")
да, и что здесь сложного?
184756 - наука комбинаторика 10 из 20, заметьте - это только для одной "строки 20 чисел", т.е. для 1-го дня
для каждой новой "строки чисел" будем строить всевозможные 10-ки и сравнивать с уже имеющимися "строками 20-ти чисел " на вхождение.
1. Вариант держать 184тыщ для каждого дня я думаю не подходит, хотя решение "влоб" - самое простое - именно такое. накопленную вариационную таблицу за 5000 тыс дней (х184тыщ=) джойним с таблицей нового 5001 дня 184тыщ на совпадения и кладем машину в вечный сон
2. поэтому второй вариант -итерационный - первый день записали строку 1
второй день - построили 184тыщ комбинаций и проверили на вхождение в 1-ю строку, результат скинули в накопительную табличку
3 день - построили 184тыщ комбинаций и проверили на вхождение в 1-ю и 2 строку , результат скинули в накопительную табличку, обработали варианты вхождений
......
5001 день - построили 184тыщ комбинаций нового дня и проверили вхождение в 5000 "строк из 20 чисел" (Ура! вот он МИЛЛИАРД! 5тыщ Х 184тыщ) результат скинули в накопительную табличку, обработали варианты вхождений

какой выберем способ?)
мне кажется все просто,
хотя у меня бессоница, я мог напутать насчет простоты и в циферках
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038216
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

Прошло полмесяца, а он всё никак не выберет способ решения для "простенькой задачи"
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038219
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

прошла неделя, или вы уже по чесноку полмесяца решаете-проверяете?
Прискорбно...
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038304
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
Я с вас фигею господа. Вам реально больше не чем заняться?

Дело было в пятницу. Что бы и не решить ПТУшную лабу. Он две недели уже пыжится, давит из себя, сервак насилует своим говнокодом. Жалко смотреть.

Arhat109
Вы тогда и нам на фирму пару запросов пооптимизируете, а то отчетик как-то долго готовиться начал .. минут 10.

Так скидывай, может что кто и подскажет дельного.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038335
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miltorg,

Вот так, легко и не принужденно, делается нормализированный словарь вместо выхлопа говна, который хочет твой заказчик. Из размера набор дат сам посчитаешь своё cnt, я понятие не имею, какое тебе надо.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var numSort = (a,b)=>a-b;
var hash = {}
res.forEach(v=>{
    combine(v.join).forEach(c=>{
        c.sort(numSort);
        var seq = c.join(" ");
        var rec = hash[seq];
        if (!rec) rec = hash[seq] = { seq : c, dates : new Set() }
        rec.dates.add(v.set1.date);
        rec.dates.add(v.set2.date);
    });
});



Но суть не в этом.
Я сгенерил эти твои 5к записей и сей, не слишком хороший, код отработал за 18 секунд на затычке
Код: sql
1.
Celeron(R) Dual-Core CPU       T3500  @ 2.10GHz


сожрав всего 70 мб памяти.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038337
Фотография miltorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,

Где то на 4 странице я написал что задача полностью решена - но человек никак не может успокоиться.

Код ваш не смотрел. Потому что начиная с 4 страницы я прошу только решения-ответ в виде который требует заказчик.
...
Рейтинг: 0 / 0
Как отсортировать 1 миллиард записей?
    #40038839
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Мне кажется, что топик себя исчерпал. Чищу и закрываю.

crutchmaster и miltorg получают предупреждения.

Если что-то или кого-то пропустил - сообщайте мне, пожалуйста.
...
Рейтинг: 0 / 0
336 сообщений из 336, показаны все 14 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как отсортировать 1 миллиард записей?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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