5

Wir haben eine Enterprise-LOB-Anwendung für die Verwaltung von Millionen von bibliographischen (viele Text) Datensätze mit SQLServer (2008). Die Datenbank ist sehr normalisiert (ein vollständiger Datensatz könnte leicht aus bis zu zehn verbundenen Tabellen plus verschachtelten Sammlungen bestehen). Schreibtransaktionen sind in Ordnung, und wir haben vorläufig eine sehr reaktionsfähige Suchlösung, die die Volltextindizierung und indizierte Sichten großzügig nutzt. Das Problem ist, dass in der Realität viel von dem, was die Forschung Benutzer benötigen könnte besser durch eine Read-Only-Warehouse-Typ Kopie der Daten bedient werden, aber es müsste kontinuierlich in Echtzeit kopiert werden (Latenz von ein paar Minuten ist in Ordnung).Architekturempfehlung mit SQL Server für Echtzeit-Aggregation und Denormalisierung

Unsere Suche wird von mehreren berechneten Spalten oder Composite-Tabellen bereits optimiert, und wir möchten mehr hinzuzufügen. Indizierte Sichten können aufgrund ihrer Einschränkungen (z. B. keine äußeren Verknüpfungen) nicht alle Anforderungen abdecken. Es gibt Dutzende von "Aspekten" zu diesen Daten, ähnlich einem Read-Only-Data-Warehouse, das Berechtigungen, Geografie, Kategorie, Qualität und die Anzahl der verknüpften Dokumente enthält. Wir erstellen auch komplexe XML-Darstellungen der Datensätze, die ziemlich statisch sind und einmal zusammengesetzt und gespeichert werden können.

Der Gesamtbetrag der Denormalisierung, Berechnung und Suchoptimierung provozieren eine inakzeptable Verzögerung, wenn vollständig über Trigger getan, und ist auch anfällig für Konflikte zu sperren.

Ich habe einige der SQL Server Vorschläge von Microsoft recherchiert, und ich würde gerne wissen, wenn jemand Erfahrung mit ähnlichen Anforderungen haben kann Empfehlung aus den folgenden drei (oder andere Vorschläge, die den SQL Server/.Net-Stack verwenden) :

  1. Transaktionsreplikation auf einen schreibgeschützte Kopie - aber es ist aus der Dokumentation unklar, wie viel man das Schema auf der Teilnehmerseite ändern kann und Trigger, berechnete Spalten oder Composite-Tabellen hinzufügen;

  2. Tabellenpartitionierung - die Daten nicht zu verändern, aber vielleicht zu segmentieren große Flächen von Daten, die zur Zeit ständig, wie Berechtigungen, Satztyp (60), die geografische Region usw. neu berechnet werden ... würde das zulassen Trigger auf der Transaktionsseite mit weniger Sperren ausgeführt werden?

  3. Offline-Batch-Verarbeitung - Microsoft oft diesen Satz verwendet, aber große Beispiele nicht geben, mit Ausnahme von ‚auf Anzeichen von Kreditkartenbetrug Überprüfung‘ auf der Teilnehmerseite der Transaktionsreplikation ... das ist ein groß sein würde, Probe, aber wie wird das in der Praxis genau gemacht? SSIS-Jobs, die alle 5 Minuten ausgeführt werden? Service Broker? Externe ausführbare Dateien, die ständig abfragen? Wir möchten die Lösung "Läuft einen langen Prozess bei Nacht" vermeiden, und wir möchten auch vermeiden, dass die transaktionale Seite der Dinge durch das Ausführen einer update-intensiven aggregierenden/compositing-Routine alle 5 Minuten auf dem Transaktionsserver blockiert wird.

    • Update # 3: nach der Einlieferung, fand ich this SO answer mit einem Link zu Real Time Data Integration mit Änderungsverfolgung, Service Broker, SSIS und löst - sieht vielversprechend aus - dass eine empfohlene Weg sein würde?

    • Ein weiteres Update: was wiederum hat mir geholfen, zu finden rusanu.com - alle Dinge ServiceBroker von SO Benutzer Remus Rusanu. Die asynchronen Messaging-Lösungen scheinen unserem Szenario viel besser zu entsprechen als die Replikations-Szenarien ...

+0

Keine große Antwort hier, aber das zeigt, wie Sie Skripte nach der Initialisierung der Replikation ausführen können: http://www.englishtosql.com/english-to-sql-blog/2010/9/13/t-sql-tuesday- 10-Anwendungsindizes-zu-replizierte-Tabellen.html. – Sam

+0

@Sam Also, wenn mein Post-Snapshot-Skript eine neue Abonnententabelle nicht im Publisher erstellt hat, und ein neuer Abonnent Trigger auf einer der Tabellen, die den Publisher entspricht und Transaktionsupdates empfängt ... würde dieser Auslöser ausgelöst und Daten zu meinem hinzufügen neue Tabelle, wenn Transaktionsupdates veröffentlicht werden? – mdisibio

Antwort

1

Service Broker-Technologie ist gut für Ihre Aufgabe dient, obwohl es vielleicht möglicher Nachteil auf bestimmte Systemkonfiguration abhängig ist. Das wertvollste Merkmal IMO ist die Fähigkeit, zwei Arten der Verarbeitung zu entkoppeln - Schreiben und Aggregieren. Sie können dies auch mit verschiedenen Datenbanken/SQL Server-Instanzen/physischen Servern auf sehr zuverlässige Weise tun. Natürlich müssen Sie einige Zeit damit verbringen, den Nachrichtenaustauschprozess zu entwerfen - Nachrichtenformate zu spezifizieren, Konversationen zu planen usw., weil dies großen Einfluss auf die Zufriedenheit des resultierenden Systems hat.

Ich habe SSBS für meine Aufgabe, die mehr oder weniger ähnlich war - fast Echtzeit-Erstellung von analytischen Data Warehouse basierend auf regelmäßigen Datenfluss.

+0

Danke. Kannst du deine Lösung kurz beschreiben, wenn sie SSBS nicht nutzt? – mdisibio

+0

Entschuldigung für mein Englisch .. Meine Lösung nutzen SSBS und so empfehle ich es Ihnen. Ich war zufrieden mit SSBS, obwohl es seine eigenen Nachteile hat, aber es passt gut für meine Aufgabe. – Serg

+0

Ich habe meine Antwort aktualisiert, um sie klarer zu machen. – Serg