|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Arhat109, Дайте пожалуйста результат. Если он есть и он правильный - тогда интересно. А ломать голову... - я правда ничего в вашей теории не понял. Тем более вы про 8 цифр. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:13 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Arhat109 Строку надо хранить в мускуле повдоль, а не поперек. Если при этом миллиард строк превратится в десять миллиардов, то вряд ли. А вот использование битовой строки в данном случае выглядит привлекательно. Но недостаточно данных от ТС, чтобы в этом убедиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:14 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
ptr128, тут непонятна постановка задачи целиком .. если табличка растет (по одной записи в день), то не факт что триггер сильно поможет, да и вообще востребован. Как вариант подхода (числа - двухзначные), ещё можно их запихать в табличку со 100 полями (булевыми): есть в этой строке такая цифра или ее там нету и смотреть у каких строк поле имеет значение "есть такая цифирька".. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:16 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
ptr128, Задача пополняется как минимум каждый день. А в перспективе - задачи которые пополняются значительно чаще. 3 раза в час или даже хуже. Добавляется 1 строка. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:16 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg, тогда лучше поручить выделение дупликатов триггеру. Но это верно только исходя из того, что 99% строк уникальны. Так в каком диапазоне находятся исходные числа? [0,1000000]? [1,100]? [-10000,10000]? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:22 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg Arhat109, Дайте пожалуйста результат. Если он есть и он правильный - тогда интересно. А ломать голову... - я правда ничего в вашей теории не понял. Тем более вы про 8 цифр. Там же есть всё, что Вам требуется: создание таблички, вставка значений, запрос, что формирует промежуточный результат с выбранными строками с данной цифирью .. и даже его результат. Все что осталось, это выделить из результата то, что требуется найти: номера строк и сколько раз они встречаются в результате. Показал даже какой результат надо получить вторым этапом. .. просто я бы его не стал делать в скуле, а реализовал бы "на клиенте". Все что требуется это операция поиска подстроки в строке результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:27 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
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.
2) Что делать с такими записями? Код: sql 1. 2. 3.
1-ая и 2-ая похожи между собой. 2-ая и 3-я тоже похожи между собой. Но 1-ая и 3-я вообще не имеют ничего общего. На выходе нужно выводить все 3 записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:29 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Ares_ekb, Ну ТС действительно утомил уже тем, что не может четко озвучить поставленную задачу во всех подробностях. А мы уже гадаем на кофейной гуще, пытаясь хоть как-то восстановить отсутствующую информацию ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:37 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Ares_ekb, Про миллиард записей ТС внятно ответил, что это попытка решения его задачи в лоб, перебором. Сама табличка - типа 5000 записей по 20 чисел. Как видно из последнего, там даже поле даты не актуально, но внезапно выяснилось что пополняться она может существенно резвее, чем в раннем описании "раз в день", что меняет подход к решению задачи и вариант с триггерами и сбором статистики в иное место становится вполне актуальным. Мне "показалось", что это задача из области поиска "выигрышного билетика" в столото или что-то подобное .. найти сколько выигрышных билетов в комбинации по 10 цифр (двухзначных как было заявлено) из набора в 20 заполняемых ... продаются билетики, прилетают "строчки" .. по ним смотрим наиболее популярные цифирьки. Но это моя трактовка .. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:44 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Ещё в продолжение: 3) Что делать с разными группами похожих записей? Код: sql 1. 2. 3. 4.
Например здесь похожи 1-ая и 2-ая. И 3-я и 4-я тоже похожи между собой. Есть две группы похожих записей: 1+2 и 3+4. На выходе нужно выдавать все 4 записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:45 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Решение второй части на скуле (раз сами не справились) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
и его результат: row_id cnt numbers181+2+3+4+5+6+7+8241+3+5+7342+4+6+8441+2+3+4 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:49 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Arhat109, если это что-то типа лото, то тогда нужно сравнивать записи не между собой, а с выпавшей комбинацией? Я поэтому и засомневался сначала: это задача кластеризации записей (тогда сравниваем их между собой, выделяем кластеры похожих записей, но это слишком ядреная задача и слишком много вопросов) или задача поиска наиболее похожей записи (например, на входе есть одна запись с выигрышной комбинацией и нужно найти все записи, которые на неё похожи). У меня ощущение, что ТС хочет решить 2-ую задачу, но описывает 1-ую. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 13:56 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
ptr128, Я ведь дал образец. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 14:00 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Ares_ekb, как вариант это подготовка к тиражу, и выбрать надо иное.. :) В целом лучше использовать функцию find_in_set() вместо locate() или дополнять начало и конец строки запятыми и сравнивать включая запятые тоже. Иначе можно получить "не совсем то" или даже "совсем не то". Но это уже думаю, ТС справится самостоятельно. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 14:02 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Arhat109, Результат нужен вот в таком виде: Код: sql 1. 2. 3. 4. 5. 6.
это требование заказчика ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 14:03 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg Arhat109, Результат нужен вот в таком виде: Код: sql 1. 2. 3. 4. 5. 6.
это требование заказчика Цена вопроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 14:10 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Arhat109, То есть ваше прежнее решение - Туфта? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 14:15 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg, но по образцу невозможно судить о допустимом диапазоне чисел в нем. Можно только на кофейной гуще гадать. Или закладываться по самые помидоры, считая что числа могут быть в диапазоне от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 14:26 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg Arhat109, То есть ваше прежнее решение - Туфта? Не понял, что Вы этим хотели заявить. Решение - выложено, набор данных - приведен. Вы отписали что Заказчику требуется "иной вид" .. ну так и доработайте до этого "требования Заказчика". Если не можете самостостоятельно, то возникает "вопрос цены", а также полноценного описания задачи. Возможно потребуется иное решение. Мне - это не известно, т.к. постановку задачи Вы не сделали. Но, в том ключе как Вы ее поставили тут выше - чем Вам не "решение"? Просто дешево и без переборов миллиардов записей. Свое любопытство я - удовлетворил, Вам нужно в ином виде? Ну так или справляйтесь самостоятельно или объявляйте ценник. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 15:25 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg Александр Бердышев, В результате - нужно 100 первых цифр Ну так напиши LIMIT 100 Если будут проблемы - в условие WHERE добавь условие по полю сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 15:33 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg Слушайте. А ведь вроде не имеет никакого смысла сортировать исходную строку если в ней не совпадают как минимум 10 цифр Почему я раньше до этого не додумался? Или нет? Мой метод вроде как работает: Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2021, 15:54 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
ptr128 а что мешает отсортировать снаружи обычным sort То, что miltorg закоренелый виндузятник и не может знать о том, что такое "обычный sort" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2021, 06:55 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Akina Ну это я ещё понимаю - конкуренция и всё такое. Он так жестоко демпингует, что никакой конкуренции уже быть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2021, 06:59 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
miltorg Нужно получить все совпадения. В идеале в виде сортировки. То есть на самом верху таблицы: Ты всё делаешь не правильно. Тебе не нужна таблица на миллиард записей. Не нужно перемножать все эти множества. Реши задачу наоборот. У тебя есть 5к последовательностей. Берешь первую, считаешь число совпавших цифр для всех остальных строк. Там где их больше 10, собираешь все последовательности с таким же множеством, делаешь перестановки, выводишь. Повторяешь тоже самое для следующих. Твои данные влезают в ОЗУ полностью на много раз и всё это решается алгоритмически на раз-два. Нахера ты принципиально упёрся в решение через жопу sql? СУБД головного мозга? ps. Ой, у меня же нет правильного диплома ВО, зачем я всё это пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2021, 07:15 |
|
Как отсортировать 1 миллиард записей?
|
|||
---|---|---|---|
#18+
Данные (все 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.
Если нужно единоразово прошерстить все строки Код: sql 1. 2. 3. 4.
Поскольку в MySQL максимальный диапазон ограничен 64 битами, придется использовать два поля по 50 бит. Ну и представить результат в формате, как нужно заказчмку. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2021, 15:13 |
|
|
start [/forum/topic.php?fid=47&msg=40034613&tid=1828220]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 165ms |
0 / 0 |