Мне нужно провести серьезный анализ данных на очень больших наборах данных, хранящихся в базе данных MySQL. Однако запросы, требующие чуть больше базового SELECT * FROM X WHERE ...
, имеют тенденцию становиться довольно неэффективными, поскольку они возвращают результаты порядка 10e6 или более, особенно когда вводится JOIN
в одной или нескольких таблицах - подумайте о объединении 2 или более таблицы, содержащие несколько десятков миллионов строк (после фильтрации данных), что практически всегда происходит при каждом запросе. Чаще всего мы хотели бы запускать агрегатные функции на них (sum
, avg
, count
и т. Д.), Но это невозможно, поскольку MySQL просто задыхается.
Следует отметить, что было предпринято много усилий для оптимизации текущей производительности - все таблицы правильно проиндексированы и запросы настроены, оборудование на высшем уровне, механизм хранения настроен и т. Д. Тем не менее, каждый запрос занимает очень много времени - до такой степени, что «давайте запустим его, прежде чем мы пойдем домой и будем надеяться на лучшее, когда мы придем на работу завтра». Не хорошо.
Это должно быть решаемой проблемой - многие крупные компании выполняют очень интенсивный анализ данных и вычислительных ресурсов и хорошо справляются (без написания собственных механизмов хранения, Google). Я готов принять штраф времени, чтобы сделать работу, но порядка часов, а не дней. Мой вопрос - что люди используют для борьбы с такими проблемами? Я слышал о механизмах хранения данных, предназначенных для решения этой проблемы (greenplum и т. Д.), Но я хотел услышать, как обычно решается эта проблема. Наше текущее хранилище данных явно реляционное и, вероятно, должно оставаться таковым, но любые мысли и предложения приветствуются. Благодаря.