powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как отсортировать 1 миллиард записей?
25 сообщений из 336, страница 6 из 14
Как отсортировать 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
25 сообщений из 336, страница 6 из 14
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как отсортировать 1 миллиард записей?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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