МонгоДБ проти Кассандри [закрито]


738

Я оцінюю, що може бути найкращим варіантом міграції.

Наразі я перебуваю на заточеному MySQL (горизонтальному розділі), більшість моїх даних зберігається у краплях JSON. У мене немає складних запитів SQL (вже переміщених після того, як я розділив db).

Зараз здається, що і MongoDB, і Кассандра були б імовірними варіантами. Моя ситуація:

  • Багато читає в кожному запиті, менш регулярно пише
  • Не переживає "масивна" масштабованість
  • Більше стурбовані простими налаштуваннями, технічним обслуговуванням та кодом
  • Мінімізуйте вартість апаратного забезпечення / сервера

4
Офіційна статистика показників ефективності доступна. Кассандра - МонгоДБ проти HBase
Раві

1
> Багато читань у кожному запиті, менш регулярне записування => Шукайте CQRS (відокремте свої читання від записів, ймовірно, без пошуку подій, але перевірте, чи можете ви оновити модель читання async. Синхронізація може працювати теж .. Це залежить від вашого використання -для)
бодрін

2
Це насправді велике питання. Цікаво, чи є оновлена ​​версія? Цей зараз дуже старий
slashdottir

Відповіді:


584

Багато запитів у кожному запиті, менше регулярних записів

Обидві бази даних добре працюють при зчитуванні, де гарячий набір даних вписується в пам'ять. Обидва також наголошують на моделях даних, що не містять об'єднаних даних (а натомість заохочують денормалізацію), і обидва надають індекси на документи чи рядки , хоча індекси MongoDB наразі є більш гнучкими.

Кассандрівський накопичувач забезпечує постійний час запису незалежно від того, наскільки великий набір ваших даних. Записи є більш проблематичними в MongoDB, частково через механізм зберігання даних, що базується на b-дереві, але більше через багатогранність блокування .

Для аналітики MongoDB забезпечує власну карту / зменшення впровадження; Cassandra надає підтримку нативного Hadoop, у тому числі для Hive (сховища даних SQL, побудованого на карті Hadoop / зменшення) та Pig (мова для аналізу Hadoop, яка, на думку багатьох, є більш придатною для навантаження на карту / зменшення навантажень, ніж SQL). Кассандра також підтримує використання Spark .

Не переживає "масивна" масштабованість

Якщо ви дивитесь на один сервер, MongoDB, мабуть, краще підходить. Для тих, хто більше стурбований масштабуванням, архітектура Кассандри, яка не має жодної точки відмови, буде простішою у налаштуванні та надійнішою. (Глобальне блокування запису MongoDB теж стає більш болісним.) Кассандра також дає набагато більше контролю над тим, як працює ваша реплікація, включаючи підтримку декількох центрів обробки даних.

Більше стурбовані простими налаштуваннями, технічним обслуговуванням та кодом

І те й інше налаштовано з розумними стандартними типовими налаштуваннями для одного сервера. Кассандру простіше налаштувати в конфігурації з декількома серверами, оскільки немає жодних вузлів для особливих ролей.

Якщо ви зараз використовуєте краплі JSON, MongoDB - це шалено добре відповідне для вашого випадку використання, враховуючи, що він використовує BSON для зберігання даних. Ви зможете мати багатші та більш цікаві дані, ніж у вашій теперішній базі даних. Це була б найзначніша перемога для Монго.


86
Зовсім інший, коментар недостатньо великий, але ... Кассандра є лінійно масштабованим (амортизований постійний час читає і пише) динамо / google bigtable гібрид, який має функції швидкого запису незалежно від розміру даних. Набір функцій є мінімалістичним, що мало перевищує розмір упорядкованого ключа. MongoDB - це широкофункціональний (і швидкий) магазин документів за ціною довговічності та гарантій щодо збереження записів (оскільки вони не відразу записуються на диск). Вони різні звірі з різною філософією, ближче до MongoDB до заміни RDMS ...
Майкл

28
у той час як Кассандра нижчого рівня, але дозволяє масштабувати uber (див. Twitter / Digg / Facebook), але вам потрібно буде поміркувати, як викладаєте свої дані, будуєте вторинні індекси тощо, оскільки не допускається гнучка запит.
Майкл

11
Оскільки тут усі згадували щебет щодо Кассандри: вони не використовують Кассандру для збереження твітів, вони все ще використовують MySQL тут ( Engineering.twitter.com/2010/07/cassandra-at-twitter-today.html ). Гаразд, але я можу уявити, що вони все ще зберігають у Кассандрі багато даних для інших цілей.
Н6.

7
Схоже, глобальний блокування запису може бути знято в Монго 2.2 ...
Метт Фармер

16
Ще до того, як мій проект розпочався жити, я відчуваю больові точки в Монгоббі. Гаряче резервне копіювання - основна вимога. Щоб зробити гарячу резервну копію на сервері Linux, спочатку потрібно встановити LVM-розділ (не настільки поширений) і зробити знімок перед кожним сеансом резервного копіювання. Ще один простий спосіб - це послуга платного резервного копіювання Mongodb. Але ця послуга дорога (2,3 $ / ГБ / місяць). Незабаром вам знадобиться реплікація для відмовостійкості. За допомогою версії з відкритим кодом, вузли можуть обмінюватися даними лише як чіткий текст. Для SSL вам потрібно перейти з виданням Entprise. А це 10 000 $. Прощай Мондобб. Відновлення коду до Кассандри.
Karthik Sankar

146

Я широко використовував MongoDB (останні 6 місяців), будуючи ієрархічну систему управління даними, і я можу поручитися як за простоту налаштування (встановити її, запустити, використовувати!), Так і швидкість. Поки ви ретельно продумуєте індекси, вони можуть абсолютно кричати разом, із швидкістю.

Я вважаю, що Кассандра, завдяки використанню таких масштабних проектів, як Twitter, має кращу функціональність масштабування, хоча команда MongoDB працює над паритетом. Я мушу зазначити, що я не використовував Кассандру поза етапом випробувань, тому не можу говорити для деталей.

Справжнім свінгерів для мене, коли ми оцінювали бази даних NoSQL, був запит - Кассандра в основному є просто гігантським сховищем ключів / цінностей, а запити - трохи хитро (принаймні порівняно з MongoDB), тому для продуктивності вам доведеться дублювати досить багато даних як своєрідний індекс вручну. MongoDB, з іншого боку, використовує модель "запит за прикладом".

Наприклад, скажіть, що у вас є колекція (мова MongoDB для еквівалента таблиці RDMS), що містить користувачів. MongoDB зберігає записи як Документи, які в основному є бінарними об'єктами JSON. наприклад:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

Якщо ви хочете знайти всіх користувачів, які називаються Смітом, які мають права адміністратора, ви просто створіть новий документ (на консолі адміністратора за допомогою Javascript або у виробництві на вибраній вами мові):

{
   LastName: "Smith",
   Groups: "Admin"
}

... а потім запустіть запит. Це воно. Додані оператори для порівнянь, фільтрування RegEx тощо, але все це досить просто, а документація на основі Wiki є досить хорошою.


54
Оновлення (8 серпня 2011 р.): В центрі даних Ірландії EC2 в Амазонії минулої ночі стався блискавичний інцидент, і, розбираючись у відновленні нашого сервера, я виявив один досить важливий момент: якщо у вас є набір реплікацій з двох серверів (і вони легко налаштувати), переконайтеся, що у вас є вузол Arbiter, тож якщо один знизиться, другий не панікує і не затримується у вторинному режимі! Повірте, боліть ззаду, щоб розібратися з великою базою даних.
Річард К.

8
щоб додати те, що сказав @Richard K, у вас повинен бути вузол арбітра, коли у вас є парне число вузлів (первинний + вторинний) у наборі реплік.
Amareswar

Додано до цього, врахуйте mongodb, коли потрібно зробити більше агрегації з аналізу даних.
user1503117

As long as you think about indexes carefully, it can absolutely scream along, speed-wise.Зачекайте, поки фізична пам'ять не
заповниться,

117

Чому вибирати між традиційною базою даних та сховищем даних NoSQL? Використовуйте обидва! Проблема з рішеннями NoSQL (за межами початкової кривої навчання) полягає у відсутності транзакцій - ви робите всі оновлення для MySQL і MySQL заповнюєте сховище даних NoSQL для читання - ви отримуєте вигоду від переваг кожної технології. Це додає більшої складності, але у вас вже є MySQL сторона - просто додайте MongoDB, Cassandra тощо до суміші.

Сховища даних NoSQL, як правило, значно краще, ніж традиційні БД, для тих же специфікацій - є причина, чому Facebook, Twitter, Google і більшість стартапів використовують рішення NoSQL. Це не просто вундеркінги, які отримують високий рівень нових технологій.


8
Я цілком погоджуюся. Я використовую mongodb + mysql в одному з майбутніх продуктів, які я архітектор. Це майбутня хмара фінансових продуктів. mysql використовується там, де нам абсолютно потрібні транзакційні можливості. mongodb використовується для зберігання не обчислювальних складних структур даних, які просто потрібно підтягувати при необхідності. працює добре поки що. :)
Ram on Rails-n-React

Я також використовував такий подвійний підхід у більшості своїх проектів, а в деяких інших файлову систему, встановлену NFS, використовували разом з PostgreSQL для сейсмічних крапок, що наближаються до 1 Gb в деяких випадках. Шлях - це своєрідний запит до бази даних ключових значень.
Audrius Meskauskas

1
Ось посилання на запитання, яке я запитав про те, як архітектуру баз даних sql та nosql: dba.stackexchange.com/questions/102053/… Я міг би використати деяку інформацію, яку ви можете мати
j

Він уже врятувався від транзакцій на добро => тепер можлива нескінченна масштабованість .. інакше -> не :)
бодрин

1
Це не дуже вдале рішення, якщо ваші дані будуть розповсюджені
Естебан Вербель,

60

Я, мабуть, буду дивакуватою людиною, але я думаю, що вам потрібно залишатися з MySQL. Ви не описали справжню проблему, яку потрібно вирішити, і MySQL / InnoDB є відмінним резервним сховищем навіть для даних blob / json.

Серед веб-інженерів існує загальна хитрість намагатися використовувати більше NoSQL, як тільки з'ясовується, що використовуються не всі функції RDBMS. Це одне не є вагомою причиною, оскільки найчастіше в базах даних NoSQL є досить погані двигуни даних (те, що MySQL називає двигуном зберігання даних).

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


13
Він використовує шардинг, а це означає, що його дані розподіляються вручну на серверах. Mongodb може автоматизувати заточування, що може принести користь.
fabspro

18
Він також зберігає в основному краплі JSON в RDBMS - робить реляційний дизайн (функції) марним.
Дамір Сударевич

4
Модель даних та автоматичне загострення дійсно відрізняються, але, вибираючи базу даних, потрібно по- перше подивитися на механізм зберігання даних , а решта дзвіночків - друге. Яким чином двигун зберігання буде виконуватись під навантаженням? Як функція автоматичного загортання буде виконуватись під шипом припливу даних? Перш ніж відмовитись від управління базою даних для цих важливих аспектів, краще переконайтесь, що вона зможе виконати завдання.
Костя

7
Реляційна модель - одна з найбільш продуманих, ефективних для впровадження та спритних моделей даних. "Надання функцій реляційного дизайну марними" може стосуватися обмежень, тригерів або референтної цілісності - але все це оплата за використання.
Костя

20

Я не використовував Кассандру, але я використав MongoDB і думаю, що це приголомшливо.

Якщо ви після простого налаштування, це все: ви просто зніміть MongoDB і запускаєте демона mongod, і це все ... це працює.

Очевидно, що це лише закваска, але розпочати роботу досить просто.


22
AFAIK, те саме стосується і Кассандри. Untar, біжи демона. Тестовий кластер налаштований і готовий до виробництва!
асгс

13

Я вчора побачив презентацію на mongodb. Я точно можу сказати, що налаштування було "простим", таким же простим, як його розпакувати та запустити. Зроблено.

Я вірю, що і mongodb, і cassandra працюватимуть практично на будь-якому звичайному апаратному забезпеченні Linux, тому ви не повинні знаходити особливих бар'єрів у цій галузі.

Я думаю, що в такому випадку, наприкінці дня, це дійде до того, до чого ви особисто почуваєтесь більш комфортно і який має набір інструментів, який ви віддаєте перевагу. Що стосується презентації на mongodb, то ведучий зазначив, що набір інструментів для mongodb досить легкий і що не було багато (вони сказали, що справді) інструментів, схожих на доступні для MySQL. Це, звичайно, був їхній досвід, тому YMMV. Одне, що мені сподобалось у mongodb, це те, що, здається, існує велика підтримка мови для нього (Python та .NET - це два, якими я в основному користуюся).

Список сайтів, які використовують mongodb, досить вражаючий , і я знаю, що твіттер просто перейшов на використання кассандри.


4
Наприкінці дня це порівняння яблук проти апельсинів. Обидві бази даних мають свої сильні сторони. Ось деякі речі, які слід врахувати - Об'єктна модель, Вторинні індекси, масштабованість запису, висока доступність тощо мають посаду в блозі, яка пояснює високі стратегічні відмінності між mongodb та кассандрою тут - scalegrid.io/blog/cassandra-vs-mongodb
Dharshan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.