2010-04-21 3 views
3

Несколько дней назад я слышал о базе данных базы данных cassandra и искал для нее хорошую документацию. после изучения на кассандре я получил cassandra более масштабируемым, чем другие данные двигателя. Я также читал об Amazon SimpleDB, но поскольку SimpleDB имеет ограничение 10GB/table и Google Datastore медленнее, чем Amazon SimpleDB, я предпочитаю не использовать их (Google Datastore, Amazon SimpleDB). Таким образом, для того, чтобы наш сайт масштабировал специально высокие скорости записи с массивными данными, мне нравится использовать Cassandra в качестве нашего Data Engine.Комплексный запрос на cassandra

Но перед началом использования cassandra я смущен на тему «Как обрабатывать сложные данные с помощью casssandra». Я даю вам структуру базы данных MySQL ниже, пожалуйста, прочитайте это и дайте мне хорошее предложение.

Пользователи Таблица
hasColum ID Первичный
hasColum электронной почты Уникальный
hasColum FirstName
hasColum LastName

Категория Таблица
hasColum ID Первичный
hasColum Родитель
hasColum Категория

сообщений Таблица
hasColum ID первичного
внешнего ключа hasColum UID индекс связан с users-> ID
hasColum ИДС Index внешний ключ, связанный с category-> ID
hasColum Название
hasColum Индекс
hasColum PunDate

Комментарии
hasColum ID primary
hasColum UID Index внешний ключ, связанный с пользователями-> ID
hasColum Индекс PID-индекса, связанный с сообщениями-> ID
hasColum Комментарий

Группа пользователя
hasColum ID первичного
hasColum Имя

UserToGroup Table (многие ко многим отношения только)
hasColum UID внешний ключ связан с Users-> ID
hasColum GID иностранных ключа связанных с Group-> ID

Наконец, для вашей информации, я хотел бы использовать SimpleCassie PHP Class http://code.google.com/p/simpletools-php/ Итак, это будет очень полезно, если вы можете дать мне пример le using SimpleCassie

+0

Итак, вопрос в том, как иметь отношения при использовании нереляционной базы данных NoSQL? Из любопытства, что вы строите, чтобы MySQL не масштабировался? – Gordon

+0

Да, это вопрос. Мы собираемся разработать приложение (которое будет в основном представлять собой секретный шлюз, где разработчик веб-сайтов будет устанавливать/получать данные через API). –

ответ

0

Вы действительно конкурировать с Google и Amazon с точки зрения объемов трафика? Я бы рекомендовал начать с изучения модернизации существующей инфраструктуры MySQL - сколько серверов баз данных вы сейчас используете в своих кластерах? Разделите данные?

C.

+0

Я не говорю об объеме трафика .. Я предпочитаю кассандру для ее производительности ... См. Архитектура cassandra http://wiki.apache.org/cassandra/ArchitectureOverview MySQL Требование 300 мс для записи с данными 50 ГБ, где требуется cassandra только 0.12ms .. это самый быстрый движок данных MySQL требует 350 мс для чтения с данными 50 ГБ, где cassandra требуется только 15 мс читать Самые популярные сайты переносятся на cassandra для масштабирования и улучшения производительности, включая facebook, twitter, digg и т. д. –

+3

Эти данные заголовка выглядят впечатляюще - но нет никаких подробностей о том, как они настроили тесты. Кроме того, даже используя новейшую волоконно-оптическую коммутируемую структуру (то есть самую быструю технологию для дисков), вам повезло бы получить устойчивый 20 Гбит/с, и предполагается, что базовые диски могут справиться с этой скоростью/объемом данных - или 20 000 в несколько раз медленнее, чем цифры, приведенные для Cassandra на этой странице. Действительно, 20 Гбит/с - это пропускная способность памяти системы среднего и высокого диапазона, отличной от NUMA. Единственный способ, которым эти цифры могут иметь смысл, - это посмотреть на очень большой кластер баз данных. – symcbean

5

От :

В отличие от реляционных систем, где модели сущности и связи, а затем просто добавить индексы для поддержки любые запросы становятся необходимыми, с Кассандрой вы должны думать о том, какие запросы вы хотите поддерживать эффективно заблаговременно и надлежащим образом моделировать. Поскольку нет автоматически предоставленных индексов, вы будете намного ближе к одному столбцу для каждого запроса, чем если бы вы были с таблицами: запросы реляционно. Не бойтесь соответственно денормализовать;

A goog article here.

Надеюсь, это вам поможет.

5

Предполагаю, что у вас будет большая нагрузка и много данных, поступающих через вашу систему, и снова я предполагаю, что вы пробовали реляционную базу данных и раздавили под большой нагрузкой, поразили миллионы из строк, 10k + запрос в секунду и т. д.

После этих предположений я бы сказал вам, что вам нужно изменить то, как вы думаете. Например, в вашем вопросе вы записали структуру таблицы, которая действительно важна, когда вы думаете о реляционных базах данных. Но в хранилищах столбцов (например, cassandra/hbase/etc) это не так важно, его типы запросов учитываются. Поскольку в хранилищах столбцов вы всегда можете добавить новые метаданные (дополнительный столбец, который вы не будете использовать в своих запросах, но в ответах) в новом столбце, вам не нужно изменять свой дизайн. Но в реляционных базах данных вам нужно изменить таблицу или даже получить другую таблицу с отношением pk-fk.

При использовании cassandra (или любой другой базы данных столбцов) вы должны иметь все свои api перед собой.

Пример:

если у вас есть getAllUserPosts($userId) в вашем API вы должны иметь eighter: UserPosts ColumnFamily или вторичный индекс сообщений ColumnFamily (что делает подобную вещь в фоновом режиме). Чем дальше, как вам нужно отсортировать результат? Да, это ключевой момент в дизайне, если вы хотите, чтобы он сортировался по дате создания, тогда вам лучше использовать TimeUID в ключе или стороннем механике, чтобы генерировать для вас все больше uids. Может быть, вы хотели бы отсортировать их со своим «последним обновлением», тогда вам лучше поместить на него вторичный индекс.

Из моего опыта я бы сказал, что его действительно здорово развить что-то с кассандрой, когда ваш api или что вам нужно от данных, кристально ясно, но когда вы хотите изменить большую функцию, у вас возникнут некоторые большие проблемы остерегайтесь. Также убедитесь, что вы понимаете подстилающую «в конечном итоге последовательность», которая быстро делает кассандру. Поскольку вам придется много раз ударять головой по клавиатуре, чтобы получить транзакционную работу (по крайней мере, я сделал это). И, конечно же, в какой-то момент вы хотели бы провести массовую операцию над огромными данными, которые у вас есть на cassandra: будьте готовы к тому, чтобы мясо облако вычислить. Hadoop.

PS: Я считаю, что здесь много людей с большим опытом и знаниями с кассандрой, а затем я, который поможет вам разработать свою систему намного лучше, чем я мог. Я просто хотел поделиться тем, что я испытал и понял, когда использовал cassandra в производстве.

Смежные вопросы