Кассандра вместо MySQL для социального сетевого приложения

StackOverflow https://stackoverflow.com/questions/2581465

Вопрос

Я нахожусь в середине построения нового приложения, которое будет иметь очень похожие функции в Facebook, и хотя, очевидно, это не придется иметь дело с людьми в размере 400 000 000 миллионов пользователей, он все еще будет использоваться значительной пользовательской базой, и большинство из них потребуют Это работает очень очень быстро.

У меня есть обширный опыт работы с MySQL, но социальное приложение предлагает сложности, которые MySQL тоже не очень хорошо подходит. Я знаю Facebook, Twitter и т. Д. Переехал к Кассандре для многих их данных, но я не уверен, как далеко пойти с ним.

Например, вы будете хранить такие вещи, как пользовательские данные - имя пользователя, пароли, адреса и т. Д. в Кассандре? Будете ли вы хранить электронные письма, комментарии, обновления статуса и т. Д. В Кассандре? Я также прочитал, что что-то вроде Neo4j гораздо лучше для представления отношений друзей, используемых социальными приложениями, как это графа базы данных. Я только начинаю вниз по маршруту NoSQL, поэтому какое-либо руководство очень ценится.

Кто-нибудь сможет посоветовать мне на это? Я надеюсь, что я не буду слишком общим!

Это было полезно?

Решение

Например, вы будете хранить такие вещи, как пользовательские данные - имя пользователя, пароли, адреса и т. Д. в Кассандре?

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

Я также прочитал, что что-то вроде Neo4j гораздо лучше для представления отношений друзей, используемых социальными приложениями, как это графа базы данных.

Я большой поклонник правильного инструмента для правильной работы. Я не использовал Neo4j, но я использовал DB4O (который является объектной базой данных) и найдет очень полезно. Это облегчает развитие в использовании инструмента, который в родом поддерживает ваши потребности. Поскольку вам нужны графики и работа с графиками в SQL, это боль, я бы порекомендовал посмотреть и оценить, соответствует ли он вашим конкретным потребностям.

Смешивание баз данных звучит как хорошая идея для меня до тех пор, пока выбор естественен (т.е. соответствующая база данных полезно с конкретными заданиями, базами данных графика для графов, таблица для таблиц, кислотных баз данных для всего, что нуждается в безопасности транзакций и т. Д. ..).

Другие советы

Я бы предложил сделать некоторые тестирования с MySQL и с Кассандрой. Когда нам пришлось сделать выбор между PostgreSQL и MongoDB в одной из моих рабочих мест, мы сравнили время запроса на миллионах записей как и обнаружили, что примерно 10 м записей Postgres предоставит нам адекватное время отклика.

Мы знали, что мы не получим до этого количества записей по крайней мере за пару лет, и у нас был опыт работы с Postgres (в то время как Mongodb не очень зрелым), поэтому мы пошли с Postgres.

Моя точка зрения в том, что вы, вероятно, можете посмотреть на тесты MySQL, выполняйте тесты производительности самостоятельно, оцените размер вашего набора данных и как он собирается вырастет, и в этом порядке.

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

Facebook не сделал переехать КАССАНДРА, они создали это. :) Насколько мне известно, NoSQL DBMM не требует или даже упомянуть (Благодаря Mnemosyn для коррекции Facebook использует Oracle и Cassandra) бок о бок с реляционной базой данных. Этот является одним наоборотм примером (хранение информации о пользователе в NoSQL DB).

Я бы сказал, что если Cassandra достаточно хороша для Facebook, вероятно, будет достаточно хорош для вашего проекта. Возможно, не больно пытаться абстрактно аннотация логики настойчивости, чтобы у вас была возможность переключиться на что-то еще, если это абсолютно приходит к этому.

Отказ от ответственности: у меня нет (все же?) У меня были какие-либо руки на опыте с базами данных NoSQL: то, что я знаю, исходит от чтения об этом.

Кассандра обеспечивает хорошее распределенное решение, и, вероятно, лучше для платформы Facebook, чем MySQL (если ему нужно будет масштабировать). Но Кассандра не подходит для отношений с данными, где у вас возникнет комбизенность по отношению к многим ко многим. База данных графов, привязанная к кассандре, обеспечивает как потребности объема объема, плюс очень быстрое возможности запроса отношений. Мы работаем над чем-то, что сочетает в себе две технологии, и всегда заинтересованы в видах требований вашей платформы. Если у вас есть какие-либо вопросы о том, как справиться с определенными проблемами, связанными с данными, я бы хотел слышать их, возможно, мы можем помочь понять это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top