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


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