AWS MySQL RDS vs AWS DynamoDB [zamknięte]

109

Używam MySQL od jakiegoś czasu i czuję się komfortowo z jego strukturą, zapytaniami SQL itp.

Obecnie buduję nowy system w AWS i patrzyłem na DynamoDB. Obecnie niewiele o tym wiem.

Czy jeden jest lepszy od drugiego?

Jakie są zalety DynamoDB?

jak wygląda przejście z zapytań MySQL itp. do tej płaskiej bazy danych?

Adam
źródło

Odpowiedzi:

66

Możesz przeczytać wyjaśnienie AWS na ten temat tutaj .

Krótko mówiąc, jeśli masz głównie zapytania Lookup (a nie zapytania Join), DynamoDB (i inne bazy danych NoSQL) jest lepsze. Jeśli potrzebujesz obsługiwać dużo danych , będziesz ograniczony podczas korzystania z MySQL (i innych RDBMS).

Nie możesz ponownie używać zapytań MySQL ani schematu danych, ale jeśli poświęcisz wysiłek na naukę NoSQL, dodasz ważne narzędzie do swojego zestawu narzędzi. Istnieje wiele przypadków, w których DynamoDB daje najprostsze rozwiązanie.

Chłopak
źródło
262

Naprawdę DynamoDB i MySQL to jabłka i pomarańcze. DynamoDB to warstwa pamięci NoSQL, podczas gdy MySQL jest używany do przechowywania relacyjnego. Powinieneś wybrać, czego chcesz użyć, na podstawie rzeczywistych potrzeb aplikacji. W rzeczywistości niektóre aplikacje mogą być dobrze obsługiwane przy użyciu obu.

Jeśli, na przykład, przechowujesz dane, które nie nadają się dobrze do schematu relacyjnego (struktury drzewa, reprezentacje JSON bez schematu itp.), Które można porównać z pojedynczym kluczem lub kombinacją klucz / zakres, wówczas DynamoDB ( lub inny sklep NoSQL) byłby prawdopodobnie najlepszym rozwiązaniem.

Jeśli masz dobrze zdefiniowany schemat danych, który może dobrze pasować do struktury relacyjnej i potrzebujesz elastyczności w wyszukiwaniu danych na wiele różnych sposobów (oczywiście dodając indeksy w razie potrzeby), RDS może być lepszym rozwiązaniem .

Główną korzyścią z używania DynamoDB jako magazynu NoSQL jest to, że masz gwarantowaną przepustowość odczytu / zapisu na dowolnym wymaganym poziomie bez martwienia się o zarządzanie magazynem danych w klastrze. Więc jeśli Twoja aplikacja wymaga 1000 odczytów / zapisów na sekundę, możesz po prostu udostępnić swoją tabelę DynamoDB dla tego poziomu przepustowości i tak naprawdę nie musisz się martwić o podstawową infrastrukturę.

RDS ma taką samą korzyść, że nie musisz martwić się o samą infrastrukturę, jednak jeśli w końcu będziesz musiał wykonać znaczną liczbę zapisów do punktu, w którym największy rozmiar instancji nie będzie już nadążał, pozostaniesz bez opcje (można skalować w poziomie dla odczytów przy użyciu replik do odczytu).

Zaktualizowana uwaga: DynamoDb obsługuje teraz globalne indeksowanie pomocnicze, więc masz teraz możliwość wykonywania zoptymalizowanych wyszukiwań w polach danych innych niż hash lub kombinacja kluczy hash i range.

Mike Brant
źródło
10
Gdybym mógł głosować za twoją odpowiedzią o 100, zrobiłbym to.
Salil,
Pewne rodzaje problemów w modelu informacyjnym dobrze pasują do implementacji typu NoSQL. Kiedy natkniesz się na takie problemy, zadaj sobie pytanie, czy miałoby sens posiadanie bazy danych NoSQL. Niektóre z tych podmiotów to: logi, dane szeregów czasowych, sieci społecznościowe, zarządzanie treścią, katalog produktów itp.
user398039
150

Właśnie dokonaliśmy migracji wszystkich naszych tabel DynamoDB do RDS MySQL.

Chociaż używanie DynamoDB do określonych zadań może mieć sens, zbudowanie nowego systemu na bazie DynamoDB jest naprawdę złym pomysłem. Najlepiej ułożone plany itp., Zawsze potrzebujesz dodatkowej elastyczności od swojej bazy danych.

Oto powody, dla których przenieśliśmy się z DynamoDB:

  1. Indeksowanie - zmiana lub dodawanie kluczy w locie jest niemożliwa bez tworzenia nowej tabeli.
  2. Zapytania - zapytania o dane są bardzo ograniczone. Zwłaszcza jeśli chcesz przeszukiwać niezindeksowane dane. Połączenia są oczywiście niemożliwe, więc musisz zarządzać złożonymi relacjami danych w warstwie kodu / pamięci podręcznej.
  3. Kopia zapasowa - taka żmudna procedura tworzenia kopii zapasowych jest rozczarowującą niespodzianką w porównaniu do zgrabnej kopii zapasowej RDS
  4. GUI - zły UX, ograniczone wyszukiwanie, bez zabawy.
  5. Szybkość - czas reakcji jest problematyczny w porównaniu z RDS. Odkrywasz, że budujesz skomplikowany mechanizm buforowania, aby zrekompensować to w miejscach, które wybrałbyś dla wewnętrznego buforowania RDS.
  6. Integralność danych - chociaż koncepcja płynnej struktury danych brzmi przyjemnie na początku, niektóre dane lepiej „utrwalić”. Silne pisanie jest błogosławieństwem, gdy mały błąd próbuje zniszczyć twoją bazę danych. Z DynamoDB wszystko jest możliwe i rzeczywiście wszystko, co może pójść nie tak, dzieje się.

Teraz używamy DynamoDB jako kopii zapasowej dla niektórych systemów i jestem pewien, że będziemy go używać w przyszłości do konkretnych, dobrze zdefiniowanych zadań. To nie jest zła baza danych, po prostu nie jest to baza danych obsługująca 100% podstawowego systemu.

Jeśli chodzi o zalety, powiedziałbym, że skalowalność i trwałość. Skaluje się niesamowicie i przejrzyście i jest (jakby) zawsze w górę. To naprawdę świetne funkcje, ale w żaden sposób nie rekompensują ich wad.

Yami Glick
źródło
11
Bardzo konkretne zalety / wady. Świetna odpowiedź
stevendesu
10
Niektóre z nich są nieaktualne. Na przykład 1 nie jest już prawdą.
mbroshi
2
Bardzo dobrze udokumentowana odpowiedź. Jednak niektóre z tych problemów mogą dotyczyć rzadkich przypadków użycia. Punkt 2 - „Połączenia są oczywiście niemożliwe” - Struktury danych DynamoDB nie powinny mieć żadnych relacji - kropka. Tabela powinna być całkowicie zdenormalizowana. Oznacza to, że niektóre atrybuty są zduplikowane. W takich przypadkach użyj wyzwalacza dynamo lub zapisów warunkowych. Jeśli użytkownicy nie mogą poradzić sobie z opóźnieniem dla zapisów warunkowych, umieść kolejkę SQS między aplikacją a dynamo. Co więcej, punkt numer 6 jest błędnie nazwany do tego stopnia, że ​​poddaje w wątpliwość „integralność” DynamoDB - może to nie być intencją ...
doles
1
Dynamo nadal brakuje elastyczności podczas zapytań. Chociaż GSI są ogromną pomocą, ale nadal możemy lepiej modelować nasze dane za pomocą schematu RDBMS.
Pavan
1
Dodam, że możliwości zapytań w DynamoDB mają kilka "pułapek". Na przykład, jeśli twój klucz podstawowy składa się tylko z skrótu, zapytanie Dynamo może zwrócić tylko 1 wpis, nie możesz podać zakresu do klucza tylko z hashem w czasie zapytania ani nie możesz zapytać bez znajomości konkretnego skrótu przedmiot, którego szukasz. BatchGet akceptuje tylko 100 pobrań w żądaniu, 1 MB całkowitego rozmiaru odpowiedzi lub 1 MB całkowitego rozmiaru zapytania, w zależności od tego, co nastąpi wcześniej. Skanowanie zapewnia elastyczne wyszukiwanie, ale jest wysoce nieefektywne i kosztowne, ponieważ zwraca całą tabelę przed filtrowaniem.
Brooks
12

Korzystając z DynamoDB, powinieneś również wiedzieć, że pozycje / rekordy w DynamoDB są ograniczone do 400KB (patrz Limity DynamoDB ). W wielu przypadkach to nie zadziała. Więc DynamoDB będzie dobre do kilku rzeczy, ale nie do wszystkich. To samo dotyczy wielu innych baz danych NoSQL.

Ali
źródło