Z perspektywy dewelopera mogę powiedzieć, że prawie każdy tradycyjny główny silnik bazy danych może jedynie skalować w górę, a skalowanie jest bardzo przemyślane.
W ostatnich latach, w związku z potrzebą większej skalowalności i wysokiej dostępności systemów, podjęto starania, aby istniejące bazy danych były skalowane. Ponieważ jednak projekty są utrudniane przez starszy kod, jest on po prostu mocno oparty na projekcie, a nie jego podstawowym znaczeniu. Spotkasz się z tym, jeśli spróbujesz skalować większość dobrze znanych silników baz danych. Dodawanie serwerów podrzędnych może być dość trudne do skonfigurowania, a zauważysz, że wiąże się to ze znacznymi ograniczeniami, z których niektóre mogą wymagać ponownego osadzenia tabel bazy danych.
Na przykład większość z nich jest projektami master / (multi-) slave, a nie multi-master. Innymi słowy, cały serwer może po prostu tam siedzieć i nie być w stanie przetwarzać zapytań. Niektóre robią to, ale z ograniczeniami ... np. Tylko do odczytu dla wielu urządzeń typu slave. Być może masz jeden serwer, który zapisuje, a wszystkie pozostałe zapewniają dane tylko do odczytu. Zauważysz, że po skonfigurowaniu tych systemów nie zawsze jest to prosty proces i trudno jest dobrze działać. W wielu przypadkach wydaje się bardzo trudny do dodania.
Z drugiej strony, od samego początku opracowywane są nowe silniki baz danych z jednoczesną i wieloplatformową konstrukcją. NOSQL i NewSQL to nowa klasa projektowa.
Wydaje się więc, że najlepszym sposobem na uzyskanie lepszej wydajności z tradycyjnego serwera SQL jest zwiększenie skali! W przypadku NOSQL i NewSQL zarówno skalowanie w górę, jak i skalowanie w górę.
Powodem, dla którego tradycyjne systemy RDBMS są ściśle powiązane, jest to, że wszystkie potrzebują spójnego widoku tych samych danych. Jeśli masz wiele serwerów, które akceptują aktualizacje tych samych danych od różnych klientów, któremu z nich ufasz? Każda metoda, która próbuje zapewnić spójność danych za pomocą pewnego rodzaju mechanizmu blokującego, wymaga współpracy z innymi serwerami, która albo obniża wydajność, albo wpływa na jakość danych, ponieważ wszelkie dane odczytywane przez klienta mogą być nieaktualne. A serwery muszą decydować między sobą, które dane są najnowsze, zapisując do tego samego rekordu. Jak widać, jest to złożony problem, który jest bardziej złożony, ponieważ obciążenie rozkłada się na serwery, a nie tylko na procesy lub wątki, w których dostęp do danych jest wciąż dość szybki.