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

Jakieś szczegółowe i konkretne powody, dla których MongoDB jest znacznie szybszy niż bazy danych SQL?

Najpierw porównajmy jabłka z jabłkami:Odczyty i zapisy z MongoDB są jak pojedyncze odczyty i zapisy według klucza podstawowego w tabeli bez indeksów nieklastrowanych w RDBMS.

Więc porównajmy dokładnie to:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

I okazuje się, że różnica prędkości w uczciwym porównaniu dokładnie tej samej prymitywnej operacji nie jest duża. W rzeczywistości MySQL jest nieco szybszy. Powiedziałbym, że są równoważne.

Czemu? Ponieważ w rzeczywistości oba systemy robią podobne rzeczy w tym konkretnym benchmarku. Zwrócenie pojedynczego wiersza, przeszukiwanego według klucza podstawowego, w rzeczywistości nie jest zbyt dużo pracy. To bardzo szybka operacja. Podejrzewam, że dużą część stanowią koszty ogólne komunikacji między procesami.

Domyślam się, że bardziej dostrojony kod w MySQL przewyższa nieco mniej systematyczne koszty MongoDB (brak logicznych blokad i prawdopodobnie kilka innych drobiazgów).

Prowadzi to do interesującego wniosku:Możesz używać MySQL jak bazy danych dokumentów i uzyskać z niej doskonałą wydajność.

Gdyby ankieter powiedział:„Nie dbamy o dokumenty ani style, potrzebujemy po prostu znacznie szybszej bazy danych, czy myślisz, że powinniśmy użyć MySQL lub MongoDB?”, co bym odpowiedział?

Polecam zignorować na chwilę wydajność i przyjrzeć się względnej sile obu systemów. W przypadku MongoDB na myśl przychodzą takie rzeczy, jak skalowanie (w górę) i replikacja. W przypadku MySQL istnieje znacznie więcej funkcji, takich jak rozbudowane zapytania, modele współbieżności, lepsze narzędzia i dojrzałość oraz wiele innych.

Zasadniczo możesz wymienić funkcje na wydajność. Czy chcesz to zrobić? To jest wybór, którego generalnie nie można dokonać. Jeśli zdecydujesz się na wydajność za wszelką cenę, rozważ najpierw dostrojenie MySQL przed dodaniem kolejnej technologii.

Oto, co się dzieje, gdy klient pobiera pojedynczy wiersz/dokument według klucza podstawowego. Opiszę różnice między obydwoma systemami:

  1. Klient buduje polecenie binarne (to samo)
  2. Klient wysyła to przez TCP (to samo)
  3. Serwer analizuje polecenie (to samo)
  4. Serwer uzyskuje dostęp do planu zapytań z pamięci podręcznej (tylko SQL, nie MongoDB, nie HandlerSocket)
  5. Serwer prosi komponent B-Tree o dostęp do wiersza (to samo)
  6. Serwer przyjmuje fizyczną blokadę tylko do odczytu na ścieżce B-Tree prowadzącej do wiersza (to samo)
  7. Serwer blokuje wiersz (tylko SQL, nie MongoDB, nie HandlerSocket)
  8. Serwer serializuje wiersz i wysyła go przez TCP (to samo)
  9. Klient deserializuje to (to samo)

Istnieją tylko dwa dodatkowe kroki dla typowych systemów RDBMS opartych na SQL. Dlatego tak naprawdę nie ma różnicy.



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

  2. Jak korzystać z MongoRegex (sterownik MongoDB C#)

  3. MongoDB $toLower

  4. Aktualizacja Mongoose nie aktualizuje się:{ ok:0, n:0, nModified:0 }

  5. MongoDB $degreesToRadians