Как правильно работать с Greenplum. Часть первая — о заблуждениях

Greenplum-how

В этой статье Михаил Герштейн делится своим опытом работы с аппаратно-программным комплексом Greenplum. Представляем вашему вниманию первую часть статьи.

О заблуждениях

Точнее — не «как правильно работать», а на какие грабли приходилось наступать за четыре года активного использования Greenplum.

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

1. Greenplum — это не СУБД для быстрой обработки индивидуальных транзакций. Он на это не рассчитан. Не надо от него ожидать, что вставка и изменение индивидуальных записей будет работать мгновенно. Это просто невозможно с архитектурной точки зрения. Greenplum — это MPP-система, принципиально состоящая из нескольких узлов, поэтому для того, чтобы запись попала в Greenplum, он должен сделать достаточно много операций: сначала то, что и все остальные СУБД — синтаксический разбор SQL-выражения, построение плана выполнения запроса, а потом послать этот запрос на все свои узлы и дождаться от них подтверждения того, что запрос успешно выполнился. Поскольку взаимодействие с узлами осуществляется по обычным UDP/TCP протоколам, то запись в таблицу «всего-навсего» одной записи вызывает несколько взаимодействий между разными компонентами Greenplum, поэтому произойти это мгновенно не может.

2. Greenplum нельзя собрать из компонент с разной производительностью и разной конфигурацией системы. То есть, собрать-то можно, но ожидать, что он будет работать быстро, если «всего один узел» медленный, нельзя. Greenplum выполняет запрос сразу на всех своих узлах, поэтому время выполнения запроса равно времени его выполнения на самом медленном узле — просто потому, что мастер ждет, когда все узлы отдадут ему результаты выполнения своей порции запроса. Очевидно, что самый медленный узел сделает это в самую последнюю очередь, и, следовательно, вся система будет работать со скоростью этого узла.

3. Одновременное выполнение слишком большого количества запросов на Greenplum не имеет большого смысла потому, что все запросы и так выполняются в параллель, используя все ресурсы всех узлов Greenplum. Поскольку Greenplum практически ничего не хранит в памяти и всегда читает данные с дисков (точнее, не всегда, но управлять этим процессом пользователь не может) — поскольку он это делает быстро и принципиально в параллель, то и запросы выполняются быстро. Выполнение нескольких запросов одновременно создает очередь при обращении к дискам, и фактически выстраивает эти запросы последовательно.

Поделиться в соц. сетях

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Добавить комментарий