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


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