HSakamoto Ответов: 0

Python SQL запросы с графическим процессором


- Привет!
I've been studying Python for the last weeks and I'm trying to implement a way to use Python to improve SQL queries using the GPU (CUDA). But was talking with a Oracle engineer in a convention and he said that this kind of improvement was possible with Python, as it has libraries ready to work with GPU. So what I need it to improve the query time, like a select or view. Right now, let's say, a select we have takes 1 minute to select all rows from our database. I want to use Python to use the GPU parallelism to improve this query time. I read that you can use que PyCuda to make vectors and matrix calculation. What I don't know is if you can use it, or any library to make the SQL query run using the GPU instead of the CPU, as the database engine usually does. As the Python layer it would be over the database integrated with out software. I don't know if this helps. I Googled around but didn't find anything specific. Can anyone can confirm this? Anyone have any resources that I can read, watch, study on the matter? Any information is helpful! Thank you very much!

Что я уже пробовал:

I saw that there are a few softwares that make this kind of improvement, like MapD, BlazingDB and Kinetica (I haven't fully read about them though).

David_Wimbley

Это звучит так, как будто вы можете использовать oracle, так как вы разговаривали с инженером oracle? Если вы не агрегируете данные для целей отчетности, если вы пытаетесь показать огромные объемы данных в пользовательском интерфейсе сразу без разбиения на страницы, я бы переосмыслил то, что вы пытаетесь сделать.

Но в любом случае вы можете попытаться ускорить свои результаты sql в течение всего дня, но если время отклика настолько велико, что вам нужно работать с графическим процессором, я был бы склонен сначала посмотреть на схему и посмотреть, есть ли у сервера БД аппаратные проблемы или просмотреть индексы в таблицах, чтобы увидеть, нужно ли их добавлять или удалять.

Сколько строк в вашей таблице? Вы указываете, что оператор select занял 1 минуту, чтобы вернуть все строки в вашей таблице...Для этого потребуется целая минута лучше иметь несколько миллионов rows...to представьте себе, что у меня есть плохо индексированная таблица с более чем 7 миллионами строк, на возврат которых потребовалась 1 минута.

SQL предназначен для обработки огромных объемов данных, но если вы пытаетесь запускать отчеты или агрегировать эти данные в производственной базе данных, я бы либо посмотрел на настройку базы данных отчетов, которая позволяет вам выполнять свою работу без какого-либо влияния на производство, либо посмотрел бы на повышение эффективности ваших индексов. Там очень много говорится об индексах, и, учитывая, что я не знаю вашей точной базы данных, я не буду вдаваться в это далеко, но индексы значительно помогут вам ускорить ваши запросы.

Все это нужно сказать, а не идти и пытаться реализовать sql gpu acceleration...it важно оценить, какова истинная причина вашей медлительности, а не строить что - то поверх нее в качестве пластыря.

Другое предложение заключается в том, что если вам нужна такая скорость, возможно, посмотрите на параметры базы данных NoSQL.

HSakamoto

Прежде всего, спасибо за ответ, Дэвид!
Я бы сказал, что я на 98% уверен, что наши запросы хорошо настроены. Просто давая вам некоторый контекст, у нас есть программное обеспечение для расчета налогов, поэтому нам в значительной степени нужно делать суммы и работать с представлениями, используя много таблиц, и поскольку большую часть времени у нас есть результаты в приемлемое время, некоторые из наших клиентов вставляют 5 миллионов строк в день в некоторые таблицы, и для тех, которые имеют огромное количество данных, мы хотели бы, по крайней мере, попытаться решить эту проблему с помощью параллелизма GPU, а не наращивать свое оборудование в целом.
Конечно, эти данные используются для отчетов, но также и для бухгалтерии, и отправляют их в IRS.
Наше программное обеспечение использует C#, но я ищу решение Python, как мне сказал инженер, что Python может сделать это легко (и теперь я знаю, что это не так просто).
И я хотел бы спросить, если вы знаете какой-либо другой способ использования GPU с базой данных SQL, я хотел бы знать, чтобы я мог попробовать реализовать это решение и запустить некоторые тесты.
Еще раз спасибо за вашу помощь и время!

an0ther1

Я не уверен, что вы увидели бы какое-либо улучшение, если бы весь движок БД не работал на графическом процессоре. Когда запрос выполняется, существует время обработки клиента и время обработки сервера, так как клиент передает запрос на сервер базы данных для фактического выполнения, вам нужно посмотреть, где происходит замедление.
Высокое время обработки клиента может быть связано с медленной сетью, низкой производительностью, низкими техническими характеристиками или с самой презентацией.
Высокое время работы сервера может быть вызвано недостаточностью ресурсов для обработки большого количества одновременных запросов, низкой производительностью диска, неправильной индексацией или плохим дизайном запросов.
У меня есть таблица, которая содержит ~2,9 миллиона строк и имеет размер около 2 ГБ. Выбор * на этом столе занимает ~1 минуту.
Время обработки клиента составляет большинство, а время ожидания сервера - ~9 секунд.

Сделайте некоторый мониторинг производительности - я обычно запускаю мелодию каждые 3-4 месяца и регистрирую все запросы, которые занимают более " x " секунд для завершения. Затем они отслеживаются, чтобы определить причину.

с уважением

0 Ответов