вторник, 5 октября 2010 г.

Не все так просто с этой вашей cassandra

Вот, значит, вы скачали последнюю версию кассандры, а также украли из соседнего дата-центра несколько представительных серверов и думаете, что теперь у вас все будет хорошо. Зачем вы все это затеяли? А, ну недавно вы состряпали замечательный СТАРТАП на php + mysql. Спустя сутки после опубликования поста на ХАБРЕ в блоге Я ПИАРЮСЬ на ваш сайт набежало 300 000 пользователей и mysql перестал справляться. Тогда-то вы и начали воровать сервера и ставить на них mysql в режиме slave. Но все равно что-то было не так, вы же читали про ГОРИЗОНТАЛЬНУЮ МАСШТАБИРУЕМОСТЬ и про то, что её-то mysql лишен. Еще вы читали про то, фейсбук, твиттер и все-все-все используют кассандру.

Но вот беда - нету в кассандре селектов. Бог с ними, с транзакциями, на момент написания сайта, вы про них только мельком слышали и использовать не стали. А вот без селектов тяжело. Что же делать-то?

Надо сказать, тот же фейсбук использует кассандру (согласно внешним данным) только для поиска по входящим личным сообщениям. Наверное, как распределенный поисковый индекс. То есть, не для селектов. А селекты нужны. Мы с пацанами обсудили этот вопрос и решили, что, наверное, надо иметь помимо кассандры что-то еще, что поддерживает нужные селекты, и дублировать в ней все необходимые поля, а еще хранить вместе с этими полями ключ, по которому все остальное можно вытащить из кассандры.  При этом вопрос, что же использовать для селектов, остается открытым. Для себя (то есть для нашего СТАРТАПА) я пока склоняюсь к mongodb/couchdb, потому что они, как заявлено, ГОРИЗОНТАЛЬНО МАСШТАБИРУЮТСЯ, а кроме того поддерживают довольно широкий класс запросов. А mongodb еще и быстрая. Вот такие дела.

Надо сказать, что кое-какие селекты в кассандре можно-таки сделать, если правильно организовать ключи. Ключ в кассандре это строка неограниченного размера. Доступно 8, кажется, способов их сравнивать. Если дичайше денормализовать данные и хитро устроить ключи, то некоторые выборки можно делать по непрерывному диапазону ключей. Key slice эта штука называется.