In letzter Zeit habe ich viel über noSQL DBMS gelesen. Ich verstehe das CAP-Theorem , die ACID- Regeln, die BASE- Regeln und die Basistheorie. Sie haben jedoch keine Ressourcen gefunden, warum noSQL einfacher zu skalieren ist als RDBMS (z. B. bei einem System, das viele DB-Server erfordert)?
Ich vermute, dass das Beibehalten von Einschränkungen und Fremdschlüsseln Ressourcen kostet und wenn ein DBMS verteilt wird, ist es viel komplizierter. Aber ich gehe davon aus, dass es noch viel mehr gibt.
Kann mir jemand erklären, wie noSQL / SQL die Skalierbarkeit beeinflusst?
sql
nosql
scalability
Ducin
quelle
quelle
Antworten:
noSQL-Datenbanken bieten eine enorme Menge an Funktionen, die Ihnen eine SQL-Datenbank von Natur aus bietet.
Dinge wie die automatische Durchsetzung der referenziellen Integrität, Transaktionen usw. Dies sind alles Dinge, die für einige Probleme sehr nützlich sind und die einige interessante Techniken für die Skalierung außerhalb eines einzelnen Servers erfordern (denken Sie darüber nach, was passiert, wenn Sie zwei sperren müssen Tabellen für eine atomare Transaktion, und sie sind auf verschiedenen Servern!).
noSQL-Datenbanken haben das alles nicht. Wenn Sie das Zeug brauchen, müssen Sie es selbst machen, aber wenn Sie es NICHT brauchen (und es gibt viele Anwendungen, die dies nicht tun), haben Sie Glück, Junge. Die Datenbank muss nicht all diese komplexen Operationen ausführen und einen Großteil des Datensatzes sperren, sodass es wirklich einfach ist, das Objekt auf viele Server / Festplatten / was auch immer zu partitionieren und es sehr schnell arbeiten zu lassen.
quelle
Es geht nicht um NoSQL vs SQL, es geht um BASE vs ACID.
Skalierbar muss in seine Bestandteile zerlegt werden:
ACID-kompatible Datenbanken (wie herkömmliche RDBMS) können Lesevorgänge skalieren. Sie sind von Natur aus nicht weniger effizient als NoSQL-Datenbanken, da die (möglichen) Leistungsengpässe durch Dinge verursacht werden, die NoSQL (manchmal) fehlt (wie Joins und wo Einschränkungen), die Sie nicht verwenden können. Mit SQL-RDBMS-Clustern können Lesevorgänge skaliert werden, indem zusätzliche Knoten in den Cluster eingefügt werden. Es gibt Einschränkungen, inwieweit Leseoperationen skaliert werden können. Diese ergeben sich jedoch aus der Schwierigkeit, Schreibvorgänge zu skalieren, wenn Sie mehr Knoten in den Cluster einfügen.
Beim Skalieren von Texten wird es haarig. Das ACID-Prinzip unterwirft verschiedene Einschränkungen, die Sie in schließlich konsistenten (BASE-) Architekturen nicht sehen:
Um Schreibvorgänge oder die Anzahl der Knoten in einem Cluster über einen bestimmten Punkt hinaus zu skalieren, müssen Sie einige der ACID-Anforderungen lockern können:
NoSQL-Datenbanken folgen normalerweise dem BASE-Modell anstelle des ACID-Modells. Sie geben die A-, C- und / oder D-Anforderungen auf und verbessern im Gegenzug die Skalierbarkeit. Bei einigen wie Cassandra können Sie sich für die Garantien von ACID entscheiden, wenn Sie diese benötigen. Es sind jedoch nicht immer alle NoSQL-Datenbanken skalierbarer.
Der SQL-API fehlt ein Mechanismus zur Beschreibung von Abfragen, bei denen die Anforderungen von ACID gelockert werden. Aus diesem Grund sind alle BASE-Datenbanken NoSQL.
Persönliche Anmerkung: Ein letzter Punkt, den ich ansprechen möchte, ist, dass in den meisten Fällen, in denen NoSQL zur Verbesserung der Leistung verwendet wird, eine Lösung für ein ordnungsgemäßes RDBMS möglich ist, indem ein ordnungsgemäß normalisiertes Schema mit geeigneten Indizes verwendet wird. Wie von genau dieser Site (unterstützt von MS SQL Server) bewiesen, können RDBMS auf hohe Arbeitslasten skaliert werden, wenn Sie sie ordnungsgemäß verwenden. Leute, die nicht verstehen, wie man RDBMS optimiert, sollten sich von NoSQL fernhalten, weil sie nicht verstehen, welche Risiken sie mit ihren Daten eingehen.
Update (17.09.2019):
Die Datenbanklandschaft hat sich seit dem Posten dieser Antwort weiterentwickelt. Obwohl es immer noch eine Dichotomie zwischen der RDBMS ACID-Welt und der NoSQL BASE-Welt gibt, ist die Linie unübersichtlicher geworden. Die NoSQL-Datenbanken haben Funktionen aus der RDBMS-Welt wie SQL-APIs und Transaktionsunterstützung hinzugefügt. Es gibt jetzt sogar Datenbanken, die SQL, ACID und Schreibskalierung versprechen , wie Google Cloud Spanner, YugabyteDB oder CockroachDB. Typischerweise steckt der Teufel im Detail, aber für die meisten Zwecke sind diese "SÄURE genug". Für einen tieferen Einblick in die Datenbanktechnologie und deren Entwicklung können Sie sich dieses Foliendeck ansehen (die Foliennotizen enthalten die dazugehörige Erklärung).
quelle
Es ist richtig, dass NoSQL-Datenbanken (MongoDB, Redis, Riak, Memcached usw.) keine Fremdschlüsseleinschränkungen beibehalten und atomare Operationen genauer spezifiziert werden müssen. Es ist auch richtig, dass SQL-Datenbanken (SQL Server, Oracle, PostgreSQL usw.) skaliert werden können, um sehr große Leistungsanforderungen durch erfahrene DBAs zu erfüllen.
Mit NoSQL-Datenbanken können erfahrene Programmierer, die sich mit den Race-Bedingungen und den atomaren Operationen gut auskennen, auf einen großen Verarbeitungsaufwand verzichten, der nur in einem geringen Prozentsatz des heutigen Webanwendungscodes erforderlich ist. NoSQL-Datenbanken haben zweifellos atomare Operationen und die meisten Transaktionsanforderungen, die in SQL-Datenbanken vorhanden sind, können auch in NoSQL-Datenbanken abgerufen werden. Der Unterschied ist die Abstraktionsebene. NoSQL-Datenbanken entfernen die höheren Abstraktions- und Handlungsstufen an den Anwendungsprogrammierer, wodurch der Code insgesamt schneller wird und die Wahrscheinlichkeit von Datenverfälschungen durch ungewöhnliche Programmierer steigt.
Infolgedessen ist es viel wahrscheinlicher, dass NoSQL-Datenbanken im Webanwendungsbereich, in dem Entwicklungszeit und Leistung sehr wichtig sind, immer häufiger verwendet werden. Finanz- und Unternehmenssoftware wird wahrscheinlich ihr SQL-Erbe beibehalten, da die Hardwareleistung relativ günstig ist, erfahrene Datenbankadministratoren zur Verfügung stehen und das erhöhte Risiko, das durch ungewöhnliche Programmierer verursacht wird, nicht akzeptabel ist.
quelle
Von IBM developerWorks: Bieten Sie Daten-Skalierbarkeit auf Cloud-Ebene mit NoSQL-Datenbanken
Skalierbarkeit ist das System, das sehr große Datenbanken mit sehr hohen Anforderungsraten bei sehr geringer Latenz unterstützen soll.
NoSQL-Systeme haben eine Reihe von Designmerkmalen gemeinsam:
Warum relationale Datenbanken für die Skalierung möglicherweise nicht optimal sind
Im Allgemeinen werden relationale Datenbankverwaltungssysteme seit Jahrzehnten als "einheitliche Lösung für die Persistenz und den Abruf von Daten" angesehen. Sie sind nach umfangreichen Forschungs- und Entwicklungsanstrengungen gereift und haben sehr erfolgreich einen großen Markt und Lösungen in verschiedenen Geschäftsbereichen geschaffen.
Das stetig wachsende Bedürfnis nach Skalierbarkeit und neuen Anwendungsanforderungen hat die traditionellen RDBMS vor neue Herausforderungen gestellt, einschließlich einiger Unzufriedenheit mit diesem einheitlichen Ansatz in einigen Web-Anwendungen. Die Antwort auf diese Frage war eine neue Generation von kostengünstiger und leistungsstarker Datenbanksoftware, die die Dominanz relationaler Datenbankverwaltungssysteme in Frage stellen soll. Ein wichtiger Grund für die NoSQL-Bewegung ist, dass bei verschiedenen Implementierungen von Web-, Unternehmens- und Cloud-Computing-Anwendungen unterschiedliche Anforderungen an die Datenbanken gestellt werden. Nicht jede Anwendung erfordert beispielsweise eine starre Datenkonsistenz.
Ein weiteres Beispiel: Für Websites mit hohem Volumen wie eBay, Amazon, Twitter oder Facebook sind Skalierbarkeit und hohe Verfügbarkeit wesentliche Voraussetzungen, die nicht gefährdet werden dürfen. Bei diesen Anwendungen kann jeder noch so kleine Ausfall erhebliche finanzielle Konsequenzen haben und das Kundenvertrauen beeinträchtigen.
Over on DBA.SE: Was bedeutet horizontale Skalierung?
Die horizontale Skalierung baut sich im Wesentlichen auf, anstatt auf. Sie kaufen keinen größeren Server und verlagern Ihre gesamte Last darauf. Stattdessen kaufen Sie 1 oder mehr zusätzliche Server und verteilen Ihre Last auf diese Server.
Die horizontale Skalierung wird verwendet, wenn Sie mehrere Instanzen gleichzeitig auf Servern ausführen können. Normalerweise ist es viel schwieriger, von 1 Server auf 2 Server zu wechseln, als von 2 auf 5, 10, 50 usw.
Sobald Sie die Probleme beim Ausführen paralleler Instanzen behoben haben, können Sie Umgebungen wie Amazon EC2, den Cloud-Service von Rackspace, GoGrid usw. optimal nutzen, da Sie Instanzen je nach Bedarf hoch- und runterfahren können, sodass Sie weniger für die Serverleistung zahlen müssen Sie verwenden nicht nur, um diese Spitzenlasten abzudecken.
Relationale Datenbanken sind eines der schwierigeren Elemente, um das vollständige Lesen / Schreiben parallel auszuführen.
quelle