Відповіді:
Реляційні бази даних застосовують ACID . Отже, у вас будуть схеми на основі транзакцій, орієнтовані на сховища даних. Це перевірено і підходить для 99% реальних програм. З реляційними базами даних ви можете практично все робити.
Однак існують обмеження швидкості та масштабування, коли мова йде про масові сховища даних із високою доступністю. Наприклад, Google і Amazon мають терабайти даних, що зберігаються у великих центрах обробки даних. Запит та вставлення не є виконаним у цих сценаріях через характер блокування / схеми / транзакції RDBM. Ось чому вони впровадили власні бази даних (насправді, сховища ключових значень) для масового підвищення продуктивності та масштабованості.
Бази даних NoSQL існують давно - просто термін новий. Деякі приклади - бази даних графіків, об'єктів, стовпців, XML та документів.
Для вашого 2-го питання: Чи добре використовувати обидва на одному веб-сайті?
Чому ні? Обидва служать різним цілям, правда?
Рішення NoSQL, як правило, призначені для вирішення проблеми, щодо якої реляційні бази даних або недостатньо підходять, занадто дорогі у використанні (наприклад, Oracle), або вимагають від вас впроваджувати щось, що порушує реляційний характер вашого DB.
Переваги, як правило, специфічні для вашого використання, але якщо у вас не виникне якась проблема моделювання ваших даних у RDBMS, я не бачу причин, чому ви б обрали NoSQL.
Я сам використовую MongoDB і Riak для конкретних проблем, коли RDBMS не є життєздатним рішенням, для всіх інших речей я використовую MySQL (або SQLite для тестування).
Якщо вам потрібен NoSQL db, про який ви зазвичай знаєте, можливі причини:
Якщо вам не потрібне рішення NoSQL, майте на увазі, що ці рішення розглядалися не як заміна RDBMS, а як альтернатива, коли колишній виходить з ладу, і що ще важливіше, що вони відносно нові як такі, вони все ще мають багато помилок і відсутні функції.
О, а щодо другого питання - цілком чудово використовувати будь-яку технологію спільно з іншою, тому просто для завершення мого досвіду MongoDB і MySQL добре працюють разом, якщо вони не на одній машині
У Мартіна Фаулера є відмінне відео, яке дає добре пояснення баз даних NoSQL. Посилання йде прямо про його причини використовувати їх, але все відео містить хорошу інформацію.
У вас є велика кількість даних, особливо якщо ви не можете вмістити все це на одному фізичному сервері, оскільки NoSQL був розроблений для того, щоб добре масштабувати.
Невідповідність об'єктно-реляційного імпедансу - Ваші доменні об'єкти не вписуються добре у схему реляційних баз даних. NoSQL дозволяє зберігати ваші дані як документи (або графіки), які можуть набагато ближче до вашої моделі даних.
NoSQL - це система бази даних, де дані впорядковуються в документ (MongoDB), пара ключ-значення (MemCache, Redis), форма структури графіка (Neo4J).
Можливо, тут можливі запитання та відповіді на запитання "Коли йти на NoSQL":
Потрібна гнучка схема або мати справу з такими деревами?
Як правило, в умовах гнучкої розробки ми починаємо проектувати систему, не знаючи всіх вимог наперед, де пізніше впродовж усієї системи баз даних розробки можуть знадобитися часті зміни дизайну, демонструючи MVP (мінімальний життєздатний продукт). Або ви маєте справу зі схемою даних, яка має динамічний характер. наприклад, Системні журнали, дуже точним прикладом є журнали AWS cloudwatch.
Набір даних великий / великий?
Так, база даних NoSQL є кращим кандидатом для додатків, де базі даних потрібно керувати мільйонами, а то й мільярдами записів без шкоди для продуктивності.
Торгуйте між масштабуванням над послідовністю
На відміну від RDMS, база даних NoSQL тут і там може втрачати невеликі дані (Примітка: ймовірність .x%), але її легко масштабувати з точки зору продуктивності. Приклад: Це може бути корисним для зберігання людей, які перебувають в Інтернеті, у додатку для обміну миттєвими повідомленнями, жетонах в db, реєстрації статистики трафіку веб-сайтів.
Виконання геолокаційних операцій: MongoDB має хеш-підтримку для виконання операцій GeoQuerying та Geolocation. Мені дуже сподобалася ця особливість MongoDB.
Коротше кажучи, MongoDB чудово підходить для програм, де ви можете зберігати динамічні структуровані дані у великих масштабах.
Для відповіді на запитання відсутня якась істотна інформація: Які випадки використання повинна охоплювати база даних? Чи потрібно проводити складний аналіз із наявних даних ( OLAP ) або програма повинна мати можливість обробляти багато транзакцій ( OLTP )? Яка структура даних? Це далеко не час закінчення питання.
На мою думку, невірно приймати технологічні рішення на основі сміливих модниць, не знаючи, що саме за ними стоїть. NoSQL часто оцінюють за свою масштабованість. Але ви також повинні знати, що горизонтальне масштабування (на декількох вузлах) також має свою ціну і не є безкоштовною. Тоді вам доведеться вирішувати такі питання, як можлива послідовність і визначити, як вирішити конфлікти даних, якщо вони не можуть бути вирішені на рівні бази даних. Однак це стосується всіх розподілених систем баз даних.
Радість розробників зі словом "схема менше" в NoSQL на початку також дуже велика. Це мовленнєве слово швидко відключається після технічного аналізу, оскільки воно не вимагає схеми при написанні, але вступає в гру при читанні. Ось чому вона повинна бути правильно "схемою на прочитане". Це може бути заманливо мати можливість записувати дані на власний розсуд. Але як мені впоратися з ситуацією, якщо існують дані, але нова версія програми очікує іншої схеми?
Модель документа (як, наприклад, у MongoDB) не підходить для моделей даних, де існує багато взаємозв'язків між даними. Приєднання має відбуватися на рівні додатків, що є додатковими зусиллями, і чому я повинен програмувати речі, які має робити база даних.
Якщо ви зробите аргумент, що Google та Amazon створили власні бази даних, оскільки звичайні RDBMS вже не можуть обробляти потоки даних, ви можете сказати лише: Ви не Google та Amazon. Ці компанії є головою, приблизно 0,01% сценаріїв, коли традиційні бази даних вже не підходять, але для решти світу вони є.
Що не суттєво: SQL існує вже понад 40 років, і мільйони годин розробки пройшли у великих системах, таких як Oracle або Microsoft SQL. Цього треба досягти за допомогою нових баз даних. Іноді також легше знайти адміністратора SQL, ніж когось для MongoDB. Що підводить нас до питання технічного обслуговування та управління. Тема, яка не зовсім сексуальна, але це частина технологічного рішення.
Я натрапив на це питання, шукаючи переконливих підстав відхилитися від дизайну RDBMS.
Є чудовий пост Джуліана Брауна, який проливає світло на обмеження розподілених систем. Концепція називається теоремою CAP Brewer, яка узагальнюється:
Три вимоги розподілених систем: Послідовність, Доступність та Толерантність до Розбиття (коротше CAP). Але одночасно їх можна мати лише два.
І ось так я підсумував це для себе:
Вам краще піти на NoSQL, якщо послідовність - це те, що ви жертвуєте.
Я розробляв та впроваджував рішення з базами даних NoSQL, і ось мій список контрольних точок, щоб прийняти рішення працювати з SQL або NoSQL, орієнтованим на документи .
НЕ
SQL не є застарілим і в деяких випадках залишається кращим інструментом. Важко виправдати використання документоорієнтованого NoSQL, коли
ДО
Якщо у вас немає цих умов або ви можете їх пом'якшити, то ось дві причини, з яких ви можете скористатися NoSQL:
Більше інформації
У своїх публікаціях в блозі я пояснюю причини більш детально:
Примітка: вищевикладене стосується лише документа, орієнтованого на NoSQL. Є й інші типи NoSQL, які потребують інших міркувань.
Поводження з великою кількістю операцій з читання запису
Погляньте на бази даних NoSQL, коли вам потрібно швидко масштабувати. І коли вам взагалі потрібно швидко масштабувати?
Коли на вашому веб-сайті є велика кількість операцій читання-запису та під час роботи з великим обсягом даних, бази даних NoSQL найкраще вписуються в ці сценарії. Оскільки вони мають можливість додавати вузли під час руху, вони можуть обробляти більше одночасного трафіку та велику кількість даних з мінімальною затримкою.
Гнучкість при моделюванні даних
Друга кия - це на початкових етапах розробки, коли ви не впевнені в моделі даних, дизайні бази даних, очікується, що все зміниться швидкими темпами. Бази даних NoSQL пропонують нам більшу гнучкість.
Подія консистенції над міцною послідовністю
Бажано вибирати бази даних NoSQL, коли нам нормально відмовлятися від суворої послідовності та коли нам не потрібні транзакції.
Хорошим прикладом цього є веб-сайт у соціальних мережах, як Twitter. Коли твіт знаменитості вибухає, і всі подобаються та повторно твіттують його з усього світу. Чи має значення, якщо кількість лайків ненадовго трохи знизиться чи зменшиться?
Знаменитості точно не буде байдуже, якщо замість фактичних 5 мільйонів 500 лайків, система показує, що подібні рахуються як 5 мільйонів 250 на короткий час.
Коли велика програма розгорнута на сотнях серверів, розповсюджених по всьому світу, географічно розподіленим вузлам потрібно деякий час, щоб досягти глобального консенсусу.
Поки вони не досягнуть консенсусу, цінність суб'єкта господарювання є непослідовною. Цінність суб'єкта господарювання з часом стає узгодженою через короткий час. Ось в чому полягає Подія Послідовності.
Хоча непослідовність не означає, що є якісь втрати даних. Це просто означає, що дані потребують короткого часу, щоб подорожувати по всьому світу за допомогою кабелів Інтернету під океаном, щоб досягти глобального консенсусу та стати послідовним.
Ми постійно переживаємо таку поведінку. Особливо на YouTube. Часто ви побачите відео з 10 переглядами та 15 лайками. Як це можливо навіть?
Це не. Фактичних поглядів вже більше, ніж подобається. Просто кількість переглядів непослідовна і потребує короткого часу, щоб оновитись.
Запуск даних Analytics
Бази даних NoSQL також найкраще підходять для використання в аналітиці даних, коли нам доводиться мати справу з припливом величезної кількості даних.