2010-03-04 3 views
32

Я работаю над проектом, который рассматривает возможность использования Cassandra в качестве базы данных. Мы хотели бы в конечном итоге перейти на Cassandra, даже если мы будем использовать MySQL для начала, учитывая его масштабируемость. Я знаю, что крупные компании, такие как Facebook, Digg и недавно Twitter, используют Cassandra, но я не верю, что ни один из этих сайтов не убежал от Rails. Мой вопрос заключается в том, можно ли использовать Cassandra с помощью Ruby on Rails. Вопросы для рассмотрения:Готово ли производство Cassandra для Ruby on Rails?

  1. Мы в значительной степени полагаемся на драгоценный камень Authlogic. Переключение на Кассандру повлияет на то, как это работает?
  2. Есть ли зрелые рубиновые клиенты для Кассандры? Глядя на Github, кажется, что fauna's client (now twitters's client) является самым зрелым. Кто-нибудь имел опыт производства с ним?

Оцените любые советы.

+3

Да, но не предполагайте, что эти компании используют Cassandra для всего. Например, у Facebook есть массовое развертывание MySQL, и Twitter сохраняет все свои твиты в MySQL. Рассмотрим ваши конкретные варианты использования. –

+0

Я бы сказал, что Ruby недостаточно зрел для Cassandra. –

ответ

16

Twitter использует направляющие на большинстве своих передних концов. Клиент Fauna фактически построен и выпущен на Twitter, поэтому вы можете быть уверены, что он обновлен и стабилен при больших нагрузках. Глядя на историю коммитов, видно, что к нему часто прикладываются улучшения, и это здорово.

Скорее всего, Authlogic должен быть настроен для правильной работы с Cassandra. В частности, он, по-видимому, предоставляет определенные методы, основанные на named_scope и реляционных данных.

Кажется, что кто-то создал плагин для поддержки DataMapper в Authlogic: http://twitter.com/collintmiller/statuses/2064046718. Вы можете использовать это как отправную точку для обеспечения совместимости с Cassandra.

Удачи вам!

+0

Спасибо. Прояснение фауны очень полезно, и я обязательно загляну в плагин DataMapper. – funkymunky

+1

Еще один вариант, который стоит рассмотреть: используйте приложение rails для использования mysql и cassandra. Таким образом, таблица ваших пользователей (среди других) может остаться на MySql с помощью AuthLogic, в то время как ваши таблицы с большим объемом могут перейти в cassandra. Я еще не пробовал это, но это звучит так, как я видел. –

9

Я не думаю, что начать с MySQL, а затем переехать в Кассандру - хорошая идея.

Cassandra - это решение NoSQL, а MySQL - это «классическая» база данных, основанная на SQL.

Это означает, что ваши модели будут отличаться.

Если вы начинаете с MySQL, вам придется полагаться на ActiveRecord для создания ваших моделей. Если вы затем перейдете на Cassandra, вам придется изменить все свои модели на совместимое с NoSQL промежуточное программное обеспечение (например, BigRecord). Это не только означает изменение ваших моделей, но и контроллеры, которые их используют (поскольку их интерфейс будет отличаться).

Это говорит о том, что Кассандра и тому подобное должны использоваться на очень требовательных приложениях - например, в твиттере.

Остальные веб-приложения на порядок меньше интенсивны - вы уверены, что вам все равно понадобится Кассандра?

PostgreSQL и хорошо спроектированная база данных достаточно хороши в 98% случаев.

+1

Полностью согласовано. NoSQL - это классная и захватывающая технология. Если вам нужно масштабировать что-то большое дешево. Сначала вам нужно что-то крупное. –

1

Существует также http://github.com/NZKoz/cassandra_object, который IIANM строит на вершине клиента фауны. «Cassandra Object предоставляет хороший API для работы с Cassandra. CassandraObjects в основном совместимы с объектами ActiveRecord типа« утка », поэтому большая часть вашего кода контроллера должна работать нормально ... Используйте это только в том случае, если вы хотите помочь в разработке , сейчас есть куча грубых краев ».

5

Я изучаю Cassandra, MongoDB и CouchDB прямо сейчас.

Один из способов узнать, какая поддержка поддерживается большинством разработчиков, путем проверки количества наблюдателей на наивысшем номинальном проекте github для каждого. По крайней мере, как приблизительная оценка.

Прямо сейчас это

852 - MongoDB http://github.com/jnunemaker/mongomapper

544 - CouchDB http://github.com/jchris/couchrest

178 - Cassandra http://github.com/fauna/cassandra

Хотя, я должен сказать, что с кучей высокого профиля сайты (Twitter, Digg, Reddit и т. д.), недавно объявив, что они переезжают в Кассандру, это большой v доверие к ним.

У Mongo, похоже, есть самая лучшая документация. Их авто-осколки все еще находятся в альфе, хотя так, насколько хорошо это масштабируется, все еще остается видимым, я думаю.

Я только начинаю узнавать обо всех этих вещах, поэтому, если у других есть понимание, пожалуйста, поделитесь.

+0

Это немного искажено, поскольку у Mongo много прецедентов, в то время как что-то вроде Cassandra будет использоваться только людьми, у которых есть особые потребности, в этом случае высокая производительность и т. Д. – Bitterzoet

7

Если вы меняете Кассандре, вам придется изменить все свои модели к NoSQL

Это не так. Если вы запрограммировали таким образом, что ваш MySQL db загружает соединения, то да, может возникнуть проблема. Мы избегали объединения столько, сколько могли, с самого начала, когда мы начали маршрут MySQL. Затем, когда мы начали мигрировать в Casandra, было довольно легко, мы сделали это только с 1 моделью. Затем скажите 4 модели за один раз. И т.д. Хорошо работает. На самом деле, когда вы читаете интервью с твиттером, вы заметите, что они запускали MySQL и Casandra параллельно для одной модели на некоторое время: http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king.

Что касается Authlogic, вы можете сохранить эту часть в mySQL столько, сколько хотите, просто держите ее свободно в сочетании с данными Cassandra.

+0

Спасибо за ссылку, это очень интересно. На данный момент мы придерживаемся MySQL, потому что знаем, что 100% это работает с нашим приложением. Приятно знать, что переход в Кассандру возможен в будущем. – funkymunky