Mit unserer serverbasierten mssql-Lösung sind wir derzeit am Rande der Ressourcen.
Wir haben jetzt viele traditionelle Optionen für den nächsten Schritt, um die Last anzugehen:
- Kaufen Sie schnellere CPUs und E / A.
- Teilen Sie einige Kunden auf, um den Server zu trennen
- Verschieben Sie die Datenbank in den Cluster
Alle sind entweder in Bezug auf Lizenzierung und Hardware oder Zeit teuer. Daher möchte ich eine weitere Option hinzufügen, indem ich das gesamte System auf eine skalierbare Lösung umstelle, die die nosql-Engine Cassandra verspricht.
Ich bin mir jedoch nicht sicher und habe keine Erfahrung mit noSQL-Datenbanken. Daher muss ich die Struktur "unstrukturierter" Daten verstehen.
In unserer Anwendung speichern wir Daten, die von Benutzern auf verschiedene Weise eingegeben wurden, grundsätzlich als "Schlüsselwert" -Listen. Es gibt eine übergeordnete Tabelle, die das head-Element enthält (wie eine Bestellung), und es gibt eine untergeordnete Tabelle mit den Schlüssel-Wert-Paaren, die den Inhalt der Bestellung enthalten (wie Order_Lines).
In geschäftlicher Hinsicht sind Order und OrderLines eine Einheit. Aufgrund des RDBMS werden sie jedoch in Tabellen gespeichert und müssen ständig verbunden werden.
Während des Betriebs laden wir manchmal nur den oberen Teil, aber meistens laden wir die Kopfzeile + einige KVPs, um einige nützliche Informationen anzuzeigen.
In einer Übersichtsliste zeigen wir beispielsweise die Kopfkennung + einige Werte in Spalten für jede Zeile.
UPDATE: Wir speichern Formulare jeglicher Art. Im Grunde speichern wir also "Dokumente". Trotzdem müssen wir diese Formulare nach beliebigen Werten, Sortierungen usw. vorbereiten und durchsuchen. Die Datenzugriffskontrolle fügt der Datenbank eine weitere Ebene der Komplexität hinzu.
Wie Sie sich vorstellen können, variieren Menge und Verfügbarkeit bestimmter KVPs von Objekt zu Objekt. Es gibt keine gültige Möglichkeit, einzelne Tabellen für jede Art von Objekt zu erstellen, da wir Tausende von Tabellen für die verschiedenen Datenkombinationen erstellen müssten.
Wäre diese Art von "Dictionary" -ähnlichen Datensätzen besser in einer noSQL-Datenbank gespeichert? Und werden wir davon Leistungsvorteile haben? Würde Cassandra diese Head + KVPs als einen Datensatz modellieren? Wenn ich mir die Cassandra-Webseite und einige Tutorials anschaue, habe ich den Eindruck, dass es in Bezug auf die Datenorganisation keinen so großen Unterschied zwischen unserem RDBMS und Cassandra gibt. Wenn Sie also 5 KVPs auswählen möchten, haben wir die gleiche Anzahl an Joins für eine Liste für jede Zeile.
Aufklärung ist willkommen, auch Hinweise auf Papiere, die die Probleme erklären, sind in Ordnung.