AWS MySQL RDS проти AWS DynamoDB [закрито]


109

Я вже досить довго використовую MySQL і мені комфортно його структура та SQL запити тощо.

В даний час будується нова система в AWS, і я дивився на DynamoDB. В даний час я лише трохи про це знаю.

Чи один кращий, ніж інший?

У чому перевага DynamoDB?

що таке перехід від запитів MySQL тощо на цю плоску БД?

Відповіді:


66

Ви можете прочитати пояснення AWS про це тут .

Якщо коротко, якщо ви маєте в основному запити пошуку (а не запити приєднання), DynamoDB (та інші БД NoSQL) краще. Якщо вам потрібно обробити велику кількість даних , ви будете обмежені під час використання MySQL (та інших RDBMS).

Ви не можете повторно використовувати свої запити MySQL, а також схему даних, але якщо ви витратите зусилля на вивчення NoSQL, ви додасте важливий інструмент до свого інструментального вікна. Є багато випадків, коли DynamoDB дає найпростіше рішення.


262

Дійсно DynamoDB і MySQL - це яблука та апельсини. DynamoDB є шаром зберігання NoSQL, тоді як MySQL використовується для реляційного зберігання. Ви повинні вибрати, що використовувати, виходячи з реальних потреб вашої програми. Насправді, деякі програми можуть бути добре обслуговані, використовуючи обидва.

Наприклад, якщо ви зберігаєте дані, які не піддаються належній реляційній схемі (структури дерева, представлення JSON без схем тощо), які можна шукати проти однієї клавіші або комбінації клавіш / діапазону, тоді DynamoDB ( або якийсь інший магазин NoSQL), швидше за все, буде вашою найкращою ставкою.

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

Основна перевага для використання DynamoDB як магазину NoSQL полягає в тому, що ви отримуєте гарантовану пропускну здатність для читання / запису на будь-якому рівні, який вам потрібен, не турбуючись про управління кластерним сховищем даних. Отже, якщо вашій програмі потрібно 1000 читання / запису в секунду, ви можете просто надати свою таблицю DynamoDB для цього рівня пропускної здатності, і не потрібно переживати за базову інфраструктуру.

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

Оновлена ​​примітка: DynamoDb тепер підтримує глобальну вторинну індексацію, тому тепер у вас є можливість виконувати оптимізовані пошуки в полях даних, окрім хеша чи комбінації хеш-клавіш і діапазонів ключів.


10
Якби я міг підтвердити вашу відповідь на 100, я б.
Саліл

Деякі проблеми в інформаційній моделі, як правило, є реалізацією NoSQL. Коли ви натрапляєте на подібні проблеми, задайте собі питання, чи було б сенс мати NoSQL Db. Деякі з цих організацій: Журнали, Дані часових рядів, Соціальні мережі, Управління вмістом, Каталог товарів тощо
user398039

150

Ми щойно перенесли всі наші таблиці DynamoDB в RDS MySQL.

Хоча використання DynamoDB для конкретних завдань може мати сенс, побудова нової системи на базі DynamoDB - це справді погана ідея. Кращі закладені плани тощо, вам завжди потрібна додаткова гнучкість у вашому БД.

Ось наші причини, з яких ми перейшли з DynamoDB:

  1. Індексація - Змінення або додавання ключів під час руху неможливо без створення нової таблиці.
  2. Запити - дані запитів надзвичайно обмежені. Особливо, якщо ви хочете запитувати неіндексовані дані. З'єднання, звичайно, неможливо, тому вам доведеться керувати складними відносинами даних на рівні коду / кешу.
  3. Резервне копіювання - Така копітка процедура резервного копіювання є невтішною несподіванкою порівняно з гладкою резервною копією RDS
  4. GUI - поганий UX, обмежений пошук, не весело.
  5. Швидкість - час реакції є проблематичним порівняно з RDS. Ви виявите, що ви створюєте складний механізм кешування, щоб компенсувати його там, де ви могли б влаштуватися для внутрішнього кешування RDS.
  6. Цілісність даних - Хоча концепція структури даних про рідину звучить приємно для початку, деякі ваші дані краще "встановити в камінь". Сильне введення тексту - це благо, коли маленький помилок намагається знищити вашу базу даних. З DynamoDB все можливе, і все, що може піти не так, робить.

Зараз ми використовуємо DynamoDB як резервну копію для деяких систем, і я впевнений, що ми будемо використовувати його в майбутньому для конкретних, чітко визначених завдань. Це не погано БД, це просто не БД, щоб обслуговувати 100% вашої базової системи.

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


11
Дуже конкретні плюси / мінуси. Відмінна відповідь
stevendesu

10
Дещо з цього застаріло. Наприклад, 1 більше не відповідає дійсності.
mbroshi

2
Дуже добре задокументована відповідь. Однак деякі з цих проблем можуть бути характерними для рідкісних випадків використання. Номер 2 - "З'єднання, звичайно, неможливо" - структури даних DynamoDB не повинні мати жодних відносин - періоду. Таблиця повинна бути повністю денормована. Це означає, що деякі атрибути дублюються. Для таких випадків використовуйте динамо-тригер або умовні записи. Якщо користувачі не можуть мати справу із затримкою для умовного запису, поставте чергу SQS між програмою та динамо. Крім того, точка 6 неправильно називається до того, що вона ставить під сумнів "цілісність" DynamoDB - це може бути не наміром ...
doles

1
Динамо все ще не вистачає гнучкості під час запитів. Хоча GSI - це величезна допомога, але все ж ми можемо краще моделювати наші дані за допомогою схеми RDBMS.
Pavan

1
Я додам, що можливості запиту в DynamoDB мають кілька "gotchas". Наприклад, якщо ваш первинний ключ складається лише з хеша, запит "Динамо" може повернути лише 1 запис, ви не можете надати діапазон ключовому значенню лише для запиту, а також не можете запитувати, не знаючи конкретного хеша предмет, який ви шукаєте. BatchGet приймає лише 100 надходжень у запиті, загальний розмір відповіді 1 МБ або загальний розмір запиту 1 МБ, залежно від того, що відбувається раніше. Сканування дає гнучкий пошук, але є надзвичайно неефективним та дорогим, повертаючи всю таблицю перед фільтруванням.
Брукс

12

Під час використання DynamoDB ви також повинні знати, що елементи / записи в DynamoDB обмежені 400KB (Див. Обмеження DynamoDB ). Для багатьох випадків використання це не допоможе. Тож DynamoDB буде корисний для кількох речей, але не для всіх. Те саме стосується багатьох інших баз даних NoSQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.