MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB kontra MySQL NoSQL — dlaczego Mongo jest lepszy

Jest tak wiele systemów zarządzania bazami danych (DBMS) do wyboru, od relacyjnych do nierelacyjnych DBMS. W ostatnich latach relacyjny system SZBD był bardziej dominujący, ale wraz z najnowszymi trendami w strukturze danych nierelacyjny SZBD staje się coraz bardziej popularny. Wybory dla relacyjnych DBMS są dość oczywiste:MySQL, PostgreSQL i MS SQL. Z drugiej strony MongoDB, nierelacyjny DBM, zyskał popularność głównie ze względu na jego zdolność do obsługi dużego zestawu danych. Każdy wybór ma swoje zalety i wady, ale Twój wybór będzie głównie zależał od potrzeb aplikacji, ponieważ oba służą w różnych niszach. Jednak w tym artykule omówimy zalety używania MongoDB przez MySQL.

Zalety używania MongoDB przez MySQL

  1. Szybkość i wydajność
  2. Wysoka dostępność i przetwarzanie w chmurze
  3. Elastyczność schematu
  4. Trzeba urosnąć
  5. Funkcja osadzania
  6. Model bezpieczeństwa
  7. Dane oparte na lokalizacji
  8. Obsługa bogatego języka zapytań

Szybkość i wydajność

Jest to jedna z głównych korzyści wynikających z używania MongoDB w porównaniu z MySQL, zwłaszcza gdy w grę wchodzi duży zestaw nieustrukturyzowanych danych. MongoDB domyślnie zachęca do wysokiej szybkości wstawiania w stosunku do bezpieczeństwa transakcji. Ta funkcja nie jest dostępna w MySQL, dlatego na przykład, jeśli chcesz zapisać dużo danych w DBM na raz, w przypadku MySQL będziesz musiał to zrobić jeden po drugim. Ale w przypadku MongoDB, dzięki dostępności funkcji insertMany(), możesz bezpiecznie wykonać wielokrotne wstawianie. Obserwując niektóre zachowania zapytań tych dwóch, możemy podsumować różne żądania operacji dla 1 miliona dokumentów na poniższej ilustracji.

W przypadku aktualizacji, która jest operacją zapisu, MongoDB zajmuje 0,002 sekundy, aby zaktualizować wszystkie e-maile uczniów, podczas gdy MySQL zajmuje 0,2491 sekundy, aby wykonać to samo zadanie.

Z ilustracji możemy wywnioskować, że MongoDB zajmuje znacznie mniej czasu niż MySQL dla tych samych operacji. MongoDB ma głównie taką strukturę, że dokumenty są podstawą przechowywania, co sprzyja ogromnym zapytaniom i przechowywaniu danych. Oznacza to, że wydajność zależy od dwóch kluczowych wartości, którymi są projekt i skalowanie. Z drugiej strony, MySQL przechowuje dane w pojedynczej tabeli, dlatego w pewnym momencie przed wykonaniem operacji zapisu trzeba przejrzeć całą tabelę.

Wysoka dostępność i przetwarzanie w chmurze

W przypadku niestabilnych środowisk MongoDB zapewnia lepszą technikę obsługi niż MySQL. Dzieje się tak, ponieważ aktywne węzły drugorzędne potrzebują znacznie mniej czasu, aby wybrać nowy węzeł główny, co ułatwia administrację w momencie awarii. Poza tym, ze względu na obszerne indeksy wtórne i replikację natywną, tworzenie kopii zapasowej bazy danych MongoDB jest dość łatwe w porównaniu z MySQL, ponieważ ten ostatni ma zintegrowaną obsługę replikacji.

Krótko mówiąc, ustawienie zestawu serwerów, które mogą działać jako Master-Slaves, jest łatwe i szybkie w MongoDB niż MySQL. Poza tym odzyskiwanie po awarii klastra jest natychmiastowe, automatyczne i bezpieczne. W przypadku MySQL nie ma jasnego, oficjalnego rozwiązania zapewniającego przełączanie awaryjne między urządzeniem nadrzędnym i podrzędnym w przypadku awarii.

Rozwiązania pamięci masowej oparte na chmurze wymagają płynnego rozmieszczenia danych na różnych serwerach w celu skalowania w górę. MongoDB może ładować duże ilości danych w porównaniu do MySQL, a dzięki wbudowanemu shardingowi łatwo jest partycjonować i rozdzielać dane na wiele serwerów, co jest sposobem na wykorzystanie ekonomicznego rozwiązania, zgodnie z zaletami pamięci masowej w chmurze.

Elastyczność schematu

MongoDB jest pozbawiony schematu, tak że różne dokumenty w tej samej kolekcji mogą mieć te same lub różne pola. Oznacza to, że nie ma ograniczeń dotyczących struktury dokumentu dla każdej wstawki lub aktualizacji, dlatego zmiany w modelu danych nie będą miały dużego wpływu. Oczywiście istnieją scenariusze, w których można zdecydować się na użycie niezdefiniowanego schematu, na przykład w przypadku denormalizacji schematu bazy danych lub gdy baza danych rośnie, ale schemat jest niestabilny. MongoDB pozwala zatem na dodawanie różnych typów danych zgodnie ze zmianą potrzeb.

Z drugiej strony MySQL jest zorientowany na tabelę, w której każdy wiersz musi mieć te same kolumny, co inne wiersze. Dodanie nowej kolumny wymagałoby uruchomienia operacji ALTER, która jest dość kosztowna pod względem wydajności, ponieważ będzie musiała zablokować całą bazę danych. Dzieje się tak szczególnie w przypadku, gdy stół rośnie powyżej 10 GB, MongoDB nie ma tego problemu.

Dzięki elastycznemu schematowi łatwo jest opracować i utrzymać czystszy kod. Poza tym MongoDB zapewnia opcję użycia walidatora JSON w przypadku, gdy chcesz zapewnić pewną integralność i spójność danych w swojej kolekcji, dlatego możesz przeprowadzić weryfikację przed wstawieniem lub aktualizacją dokumentu.

Potrzeba rozwoju

Skalowanie baz danych nie jest łatwym przedsięwzięciem, zwłaszcza w przypadku MySQL, może powodować obniżoną wydajność, gdy przekroczona zostanie 5-10 GB pamięci na tabelę. W przypadku MongoDB nie stanowi to problemu, ponieważ można partycjonować i shardować bazę danych za pomocą wbudowanej funkcji shardingu. Po określeniu klucza fragmentu i włączeniu fragmentowania dane są partycjonowane równomiernie zgodnie z kluczem fragmentu. Jeśli zostanie dodany nowy fragment, następuje automatyczne równoważenie. Sharding zasadniczo umożliwia skalowanie poziome, co jest trudne do zaimplementowania w MySQL. Poza tym MongoDB ma wbudowaną replikację, dzięki której zestawy replik tworzą wiele kopii danych. Każdy członek tego zestawu odgrywa rolę pierwszorzędową lub drugorzędną w dowolnym momencie procesu.

Odczyty i zapisy są wykonywane na podstawowym, a następnie replikowane do wtórnych. Mając tę ​​zaletę, w przypadku niespójności danych lub awarii instancji, nowy członek może zostać wybrany na głównego członka.

Funkcja osadzania

W przeciwieństwie do MySQL, w którym nie można osadzić danych w polu, MongoDB oferuje lepszą technikę osadzania powiązanych danych. O ile możesz wykonać JOIN dla tabel w MySQL, możesz mieć tak wiele tabel, z których niektóre są niepotrzebne, zwłaszcza jeśli nie obejmują tak wielu pól. W przypadku MongoDB możesz zdecydować się na osadzenie danych w polu dla powiązanych danych lub referencji z innej kolekcji, jeśli spodziewasz się, że dokument w przyszłości przekroczy rozmiar dokumentu JSON.

Na przykład, jeśli mamy dane dla użytkowników, których chcemy przechwycić ich adresy i kilka innych informacji, w przypadku MongoDB możemy łatwo mieć prostą strukturę, taką jak

{
    id:1,
    name:'George Bush',
    gender: 'Male',
    age:45,
    address:{
        City: 'New York',
        Street: 'Florida',
        Zip_code: 1342243
    }
}

Ale w przypadku MySQL będziemy musieli w tym przypadku stworzyć 2 tabele z odniesieniem id. To znaczy

Tabela szczegółów użytkowników

id imię płeć wiek
1 George Bush Mężczyzna 45

Tabela adresów użytkowników

id Miasto Ulica Kod pocztowy
1 George Bush Mężczyzna 134224

W MySQL będziesz miał tak wiele tabel, z którymi będziesz musiał sobie radzić tak gorączkowo, zwłaszcza gdy w grę wchodzi skalowanie. O ile można również wykonać łączenie tabel w jednym zapytaniu podczas pobierania tych danych w MySQL, opóźnienie jest znacznie większe w porównaniu z MongoDB i jest to jeden z powodów, dla których wydajność MongoDB przewyższa wydajność MySQL.

Kilkadziesiąt — Zostań administratorem baz danych MongoDB — wprowadzenie MongoDB do produkcjiDowiedz się, co trzeba wiedzieć, aby wdrażać, monitorować, zarządzać i skalować MongoDB. Pobierz za darmo

Model bezpieczeństwa

Administracja bazą danych (DBA) jest dość istotna w MySQL, ale nie jest konieczna w przypadku MongoDB. Oznacza to, że musisz mieć administratora DBA, aby zmodyfikować schemat w przypadku MySQL, gdy aplikacja się zmieni. Z drugiej strony, można dokonać modyfikacji schematu bez DBA w MongoDB, ponieważ jest to świetne dla trwałości klas, a klasa może być również serializowana do JSON i przechowywana. Jest to jednak najlepsza praktyka, jeśli nie spodziewasz się, że dane będą rosły, w przeciwnym razie będziesz musiał postępować zgodnie z najlepszymi praktykami, aby uniknąć pułapek.

Dane oparte na lokalizacji

W celu poprawy przepustowości, zwłaszcza operacji odczytu, MongoDB zapewnia wbudowane funkcje specjalne, które usprawniają wyszukiwanie odpowiednich danych z określonych lokalizacji, które są dokładne, a tym samym przyspieszają proces. Nie jest to możliwe w przypadku MySQL.

Obsługa bogatego języka zapytań

Z osobistego zainteresowania jako entuzjasta MongoDB, zainteresowałem się elastycznością w zakresie funkcji zapytań MongoDB. Jeśli chodzi o strukturę agregacji w późniejszych wersjach i funkcję MapReduce, można zoptymalizować dane wynikowe do własnych specyfikacji. O ile MySQL oferuje również operacje takie jak grupowanie, sortowanie i wiele innych, MongoDB jest dość obszerny, szczególnie w przypadku osadzonych struktur danych. Ponadto, jak wspomniano wcześniej, zapytania są zwracane z mniejszym opóźnieniem w ramach agregacji niż w przypadku wykonania JOIN w przypadku MySQL. Na przykład MongoDB oferuje łatwy sposób modyfikowania schematu za pomocą operacji $set i $unset dla osadzonego schematu. Ale w przypadku MySQL należy wykonać polecenie ALTER dla jedynej tabeli, w której istnieje pole, a to jest dość kosztowne pod względem wydajności.

Wniosek

W odniesieniu do zalet omówionych powyżej, o ile wybór bazy danych bezwzględnie zależy od projektu aplikacji, MongoDB oferuje dużą elastyczność na różnych płaszczyznach. Jeśli szukasz czegoś, co zapewni lepszą wydajność, radzenie sobie ze złożonymi danymi, stąd brak ograniczeń w projektowaniu schematu, przyszłe oczekiwania dotyczące rozwoju bazy danych i bogata technika języka zapytań, polecam wybrać MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $tydzień

  2. Zautomatyzuj kontrolę stanu bazy danych

  3. Mongoose wiele połączeń

  4. wepchnij nową wartość do wewnętrznej tablicy mongodb - mongodb/php

  5. Agregacja MongoDB:Oblicz sumy bieżące z sumy poprzednich wierszy