powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить сравнение огромных таблиц
48 сообщений из 48, показаны все 2 страниц
Как ускорить сравнение огромных таблиц
    #39702455
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! У меня есть 2 таблицы, одна на 300млн. строк (ТАБ1) и вторая на 20млн. строк (ТАБ2)

Я написал команду по нахождению совпадений:
select * from tab1, tab2
where tab1 = tab2

В обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d", при создании таблиц в настройках ставил маркеры NN и Binar, формат VARCHAR (100).

Сравнение запустилось, но вот уже прошло больше 1 часа, но процесс не заканчивается, и хз когда закончится. И при чем ресурсы не затрачиваются, ОЗУ свободно ещё 30гб, проц холодный, нагрузка 10-17%, 2 gtx1080ti вообще прохлаждаются на 0% загрузки.
В общем как ускорить процесс, может можно как-то настроить чтобы ресурсов больше затрачивалось? Может есть у кого какие идеи?
Потому что скорость слишком мала, файл на 20млн. строк тестовый, закинул посмотреть найдет ли три заранее спрятанных совпадения. А так на очереди файл под 1 МЛРД. строк, но с такой скоростью пока что это не имеет смысла.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702460
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegar2 gtx1080ti вообще прохлаждаются на 0% загрузки
GPU-то тут при чём?

mordegarпроц холодный, нагрузка 10-17%
Суммарно по ядрам? Запрос-то однопоточный.

mordegarОЗУ свободно ещё 30гб
А базе в конфиге объяснили, что ей можно этим пользоваться?

Ну и что важнее - индексы-то есть? mysql умеет только nested loops для join, что без индекса вечности подобно, на каждую строку левой таблицы перебирать всю правую таблицу.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702468
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij на каждую строку левой таблицы перебирать всю правую таблицу.

Мне нужно чтобы каждую строку из файла 20млн. строк проверил на совпадения в файле с 300 млн. строк.
Как меня уверяли, что база sql легко с этим справится за пару минут, и ничего там настраивать не надо особо, что такое ключи и прочее я хз, мне сказали поставить флажки и выбрать варчар (100), дальше типа по команде пойдет сравнение с богоподобной скоростью.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702469
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не ключи а индексы
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702482
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как и куда эти индексы ставить в workbenchе?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702486
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarкак и куда эти индексы ставить в workbenchе?
создали таблицы, залили данные, прописали индексы
именно в таком порядке
заливать в таблицу с индексами в разы дольше
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702491
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для обеих таблиц нужно делать индексы?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702494
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarЯ написал команду по нахождению совпадений:
Код: sql
1.
2.
select * from tab1, tab2
  where tab1 = tab2


Должно быть
Код: sql
1.
2.
select * from tab1, tab2
  where tab1.field1 = tab2.field2



mordegarДля обеих таблиц нужно делать индексы?Конечно.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702499
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
а индексы уникальные ставить? У меня все значения в строках уникальные, в рамках одной таблицы совпадений нет.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702563
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarиндексы уникальные ставить?Если модель требует уникальности - да, иначе лучше не надо...
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702592
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarДля обеих таблиц нужно делать индексы?я бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702597
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftя бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.

А это как сделать, я имею ввиду ведущую или ведомую. Большую таблицу поставил на процесс индексирования, вот уже час идет.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702628
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegar , а каково ожидаемое количество записей из этого запроса?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702661
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

ровно 3, специально их туда внедрил для теста.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702668
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока ещё идет индексация большой таблицы. В принципе мне без разницы каким способом все это делать. Мною на другом ресурсе был поставлен вопрос о том, с помощью каких ресурсов можно сделать перебор на совпадения в текстовых файлах от 30 до 100 Гб веса, мне посоветовали SQL, поэтому данный способ и проверяю. Мне в целом и Excel подошел бы по задаче, но у него лимит 1 млн. строк, это где то 40Мб.
Если с sql не получится, даже хз какие ещё варианты использовать.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702671
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. для ясности, у меня есть файл с 300 млн. значений - базовые, т.е. они в стоке будут всегда. А есть постоянно пополняющийся файл, он может в конечном виде и 1 и 2 млрд. значений иметь, но это не суть, главное своевременно, можно даже по частям, эти значения проверять на совпадения в стоковом файле. И вроде задача то не самая сложная по структуре, но как на практике оказалось, не то что мощностей не хватает, а именно искусственные везде какие-то лимиты, ограничения, и вот так просто не получается.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702674
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarmiksoftя бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.

А это как сделать, я имею ввиду ведущую или ведомую. Большую таблицу поставил на процесс индексирования, вот уже час идет.Если индекс будет только один, то оптимизатор сам определит таблицу с индексом в ведомые.
Проверить можно в плане запроса.
Если план оптимизатора не устраивает, то порядок соединения таблиц можно указать в запросе явно.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702678
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d"Это действительные данные, или некая хитрожопая контрольная сумма?

В теории для такого типа запроса на таких объёмах данных можно создать дополнительное хранимое вычисляемое поле хэша, имеющего целочисленный тип, его проиндексировать, и по нему связывать (вернее, связывать по hash(t1f1)=hash(t2.f2) and t1.f1=t2.f2 ). Но вот незадача - в MySQL есть либо CRC32, чего маловато на таких объёмах, либо MD5, который, наоборот, великоват. А CRC64, который тут был бы в самый раз - увы... хотя никто не запрещает взять, к примеру, первую (или вторую) половину MD5 и преобразовать его в BIGINT. Вероятность коллизии будет достаточно низкой.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702682
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Это действительные данные
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702864
NIK.2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.
Если исходная информация - текстовые файлы, и проверку надо сделать один раз, возможно, окажется проще:
cat file1 file2 | sort | uniq -d
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702865
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NIK.2017Приветствую.
Если исходная информация - текстовые файлы, и проверку надо сделать один раз, возможно, окажется проще:
cat file1 file2 | sort | uniq -dСоединять нужно по одному полю, а не по всей строке, насколько я понял задачу.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702872
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftСоединять нужно по одному полю, а не по всей строке, насколько я понял задачу.

Да, но пока жду что получится с индексом, уже 12 часов пыхтит, вроде недолго осталось но места конечно он мне ппц как занял в ходе данной процедуры. Завтра отпишусь, что получится.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702873
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если правильно понял, каждое поле имеет уникальный индекс (ключевое?), а значит, в принципе, вполне может сработать сравнение файлов, состоящих из одного этого поля.

Другой вопрос - алгоритм. Каждое с каждым сравнивать - реально долго.

Если же строки файлов заранее отсортированы, тогда можно составить довольно простой алгоритм в один проход, который прочитает по первой строке из каждого файла, сравнит значения, а далее будет читать и сравнивать строки из того файла, где значение оказалось меньше. При равенстве - вывод значения. Далее прочитать по строчке и пошли по кругу, пока какой-то файл не закончится.

Тут, скорее, вопрос реализации. Возможно СУБД не самое подходящее средство для такой задачи, хотя, отсортированную выгрузку по каждому полю вполне можно сделать.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702874
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegar,

Покажите DDL таблиц и индекса, который пытаетесь создать.
Если поле для соединения уникально, то лучше было бы сначала его сделать первичным ключом, а потом данные в таблицу заливать.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702885
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d", при создании таблиц в настройках ставил маркеры NN и Binar, формат VARCHAR (100).
а они что, разных размеров идут?
и вы конечно же делаете индекс по всей длине?
там 10 чаров хватит
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702888
Фотография MarchCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравнение закончилось? Сколько шло?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702916
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, индексы поставил, теперь сравнение проходит за 7-8 минут, спасибо что подсказали!)
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702924
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот ещё вопрос такой, этот процесс сам по себе не жрет у меня ресурсы, легкая загрузка цп да и только. А можно как то 2 (или больше) таких процесса запараллелить? Или для этого нужен другой локальный сервер, и как следствие другая ОС? Просто настроек по увеличению производительности процесса в му.ini или в самом Workbenche я увы не нашел.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702925
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarА вот ещё вопрос такой, этот процесс сам по себе не жрет у меня ресурсы, легкая загрузка цп да и только.Если содержимое таблиц и индексов полностью в кэше, то должно быть полностью занято одно ядро. MySQL не умеет параллелить выполнение одного запроса на несколько ядер. Но можно это имитировать - выполнить несколько запросов в разных подключениях.

Чтобы можно было посоветовать что-то по ускорению, покажите DDL обеих таблиц (включая индексы) и запрос.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702929
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

CREATE TABLE `rustts` (
`rustts` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
KEY `idxrustts` (`rustts`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Это таблица на 300млн.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702930
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И такая же на 20 млн.
CREATE TABLE `uss`.`biground` (
`biground` VARCHAR(100) BINARY NOT NULL)
ENGINE = MyISAM;
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702931
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iNDEX:

Type BTREE
Allows NULL Yes
Unique No
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702935
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegar,

Т.е. в каждой из таблиц по одному полю?
Тогда имеет смысл попробовать 21675163

И почему одно поле BINARY, а другое utf8mb4 ?
Если в данных только латинские буквы и цифры, то имеет смысл использовать тип VARBINARY. А если они постоянной длины, то даже BINARY (отдельный тип данных, а не модификатор varchar).
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702937
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Да по одному полю в таблице, просто там написано: "Если исходная информация - текстовые файлы, и проверку надо сделать один раз", вот про один раз я не понял, я буду делать много таких проверок, просто будут заменяться данные в таблице где 20 млн. строк.

Форматы одинаковые, просто я из разных мест скопировал. Ок, предложенный метод испробую.
Длинна данных разная, но состоят только из лат. букв (мелких и заглавных) и цифр.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702940
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В целом конечно, конкретно для моих задач, результат проверки таблиц 20млн. на 300 млн. = 7-8 минут, т.е. 2-3 млн. в минуту это нормально. Просто было интересно, можно ли задействовать имеющиеся ресурсы видеокарт из под винды, чтобы повысить производительность. А то, почитаешь перед покупкой сколько Терафлопс выдают новоиспеченные модели карт, а на деле все эти мощности хз как использовать, именно для полезной нагрузки.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702941
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы еще попробовал данные положить в InnoDB-таблицу и сделать из единственного поля первичный ключ, а других индексов не делать.

Кроме того, если большая таблица не перезаливается от раза к разу, то имеет смысл собрать по ней статистику.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702942
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Ну InnoDB я пытался в самом начале сделать, но там постоянно мне какие-то ошибки выдавал в некоторых строках при импорте записей в таблицу, а если получалось игнорировать ошибки в строках, workbench зависал намертво.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702943
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarПросто было интересно, можно ли задействовать имеющиеся ресурсы видеокарт из под винды, чтобы повысить производительность. А то, почитаешь перед покупкой сколько Терафлопс выдают новоиспеченные модели карт, а на деле все эти мощности хз как использовать, именно для полезной нагрузки.Может, это и имеет смысл с точки зрения производительности, но это уже точно не средствами СУБД делается.
Ищите по словам CUDA, OpenCL.
Если готового продукта под ваши цели не найдется, то придется программировать.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702944
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarmiksoft,

Ну InnoDB я пытался в самом начале сделать, но там постоянно мне какие-то ошибки выдавал в некоторых строках при импорте записей в таблицу, а если получалось игнорировать ошибки в строках, workbench зависал намертво.Ошибки про дубли?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702945
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftОшибки про дубли?

1262 it contained more data than there were input columns - вот это было и ещё 1062.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702946
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftmordegarПросто было интересно, можно ли задействовать имеющиеся ресурсы видеокарт из под винды, чтобы повысить производительность. А то, почитаешь перед покупкой сколько Терафлопс выдают новоиспеченные модели карт, а на деле все эти мощности хз как использовать, именно для полезной нагрузки.Может, это и имеет смысл с точки зрения производительности, но это уже точно не средствами СУБД делается.
Ищите по словам CUDA, OpenCL.
Если готового продукта под ваши цели не найдется, то придется программировать.
как же не средствами БД?
распараллелить свои поиски асинхронно может только сама бд...
кто же ещё снаружи за неё там искать будет
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702947
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не увидели?
полудухmordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d", при создании таблиц в настройках ставил маркеры NN и Binar, формат VARCHAR (100).
а они что, разных размеров идут?
и вы конечно же делаете индекс по всей длине?
там 10 чаров хватит
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702948
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудух,
Да, разных размеров
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702951
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. получается если в VirtualBox включить такой же сервер, и поставить ту же задачу, параллельно на реальной винде будет такой же процесс висеть, они оба будут нагружать одно и то же ядро?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702952
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухmiksoftпропущено...
Может, это и имеет смысл с точки зрения производительности, но это уже точно не средствами СУБД делается.
Ищите по словам CUDA, OpenCL.
Если готового продукта под ваши цели не найдется, то придется программировать.
как же не средствами БД?
распараллелить свои поиски асинхронно может только сама бд...
кто же ещё снаружи за неё там искать будет Ну в смысле не классические РСУБД (Oracle, MS SQL, MySQL и т.п.) - они не умеют GPU использовать. А специализированные, которые умеют, мне неизвестны.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702955
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarТ.е. получается если в VirtualBox включить такой же сервер, и поставить ту же задачу, параллельно на реальной винде будет такой же процесс висеть, они оба будут нагружать одно и то же ядро?Зачем VirtualBox ?
Сделайте столько подключений к MySQL, сколько ядер, и в каждом по запросу запускайте. Или даже больше, тут уже смотреть надо по реальной загрузке.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702957
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

аа, точно, ок!
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39703346
NIK.2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы бы рассказали, чуть побольше об исходной задаче.
- В каком виде получаете данные.
- У Вас две таблицы. Они обе постоянные, или одна меняется ?
- После того, как нашли дубли, какая-то еще обработка данных требуется ?
- Под какой ОС ?


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

Задача выглядит не как счетная, вся нагрузка будет по вводу-выводу... Тут нужны не процессоры, а памяти побольше и SSD.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить сравнение огромных таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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