Anzeigen von 350 Millionen Zeilen aus einer Datenbank in einem Webformular

    Der Titel dieses Artikels ist eine kurze Zusammenfassung dessen, was der Kunde angefordert hat. Ich war zu dieser Zeit im Urlaub, und mein Manager gab, ohne auf Einzelheiten einzugehen, grünes Licht für die Umsetzung. Nachdem ich mich gut ausgeruht hatte und zur Arbeit ging, fühlte ich mich in den Schuhen eines Igels, der in einem berühmten Cartoon in den Nebel fiel. Und die Situation forderte den Zauberer der Smaragdstadt.

    Also alles in Ordnung:

    Inszenierung


    Der Kunde war die Abteilung für den Umgang mit Problemschulden. Um ihre Probleme erfolgreich zu lösen, brauchten sie
    1. Verfolgen Sie die Geschichte eines Problemkredits: Beobachten Sie, wann es in Verzug geriet und wie es zurückgezahlt wurde. Überprüfen Sie auch, ob der Kreditnehmer, der sich verspätet hat, andere Kredite hat.
    2. Erhalten Sie Informationen über das Kreditportfolio, verfolgen Sie Trends und Änderungen im Portfolio für einen beliebigen Zeitraum.
    3. Die Fähigkeit, aufgrund aggregierter Indikatoren wie „Ausstellungsdatum eines Kredits“, „Ausstellungsregion“, „Überfällige Kredite“ usw. zu „scheitern“. direkt auf die Darlehensverträge selbst.
    4. Verfolgen Sie die Arbeit von Kreditmanagern: Prüfen Sie, wie erfolgreich sie Darlehen vergeben.

    Die Kunden sahen die Lösung auf jeden Fall in Form eines Webformulars. Dies lag an der Tatsache, dass die Abteilung die Hauptabteilung war und sich die Unterabteilungen in verschiedenen Städten unseres riesigen Landes befanden und alle Mitarbeiter das gleiche Bild hätten sehen müssen, das sich durch Zugriffsrechte auszeichnete.
    Die Aufgabe wurde etwas erleichtert durch die Tatsache, dass eine tägliche Überprüfung des Kreditportfolios nur in den letzten drei Monaten erforderlich war. Spätere Informationen sollten am ersten Tag eines jeden vergangenen Monats vorliegen.
    Zusätzlich zu dieser Bedingung gab es ein weiteres Problem: Unter einem Kredit wurden alle Arten von Krediten, einschließlich Kreditkarten, verstanden, die separat gespeichert wurden und sich durch die Bewertung unterschieden.

    Lösung


    Zum Zeitpunkt der Implementierung befand sich in der Oracle-Datenbank ein Repository, in dem alle Informationen zu Karten und Darlehen in der Form gespeichert waren, in der sie aus betrieblichen Quellen stammten. Informationen gingen mit einer Verzögerung von 1 Tag ein. Im Durchschnitt erschienen jeden Tag 3 Millionen neue Einträge, von denen einige Darlehen waren und Teil der Karte waren.
    Um dieses Problem zu lösen, wurde der folgende Algorithmus gewählt:
    1. Es wurde ein Datenschaufenster gebaut, in dem Kredite und Karten kombiniert wurden. Die Vitrine wurde nach dem „Star“ -Schema gebaut.
    2. Täglich, mit Hilfe des Task-Schedulers, hat gestern "gegossen".
    3. Ball erstellte einen OLAP-Cube für die Berechnung von Aggregaten.
    4. Am Ende des Showcase-Updates wurde das OLAP-Cube-Update gestartet.
    5. OLAP übermittelte Daten über den OLAP Viewer an das Webformular.

    Zusätzlich zur Implementierung des Algorithmus mussten alle Risiken und Hindernisse minimiert oder beseitigt werden, die den Betrieb dieses Systems beeinträchtigen könnten.

    Vorarbeiten:


    1. Im Fenster für die Kombination von Krediten und Karten wurde ein gemeinsamer Schlüssel erstellt, der sowohl den Kredit als auch die Karte eindeutig identifizierte. Der Schlüssel wurde in einer Tabelle gespeichert, in der in jeder Zeile entweder eine Kreditkarte oder eine Karte eindeutig identifiziert wurde.
    2. Zur täglichen Füllung wurde ein Mechanismus hinzugefügt, mit dem Änderungen in den Operationstabellen nicht nur des gestrigen Datums, sondern auch aller Daten für ein beliebiges Intervall in der Vergangenheit, beginnend mit dem gestrigen, verfolgt werden können. Dies erfolgte im Falle von Änderungen oder Fehlern in der Yesterday-Datenbank. Es ist eine Situation eingetreten, in der Informationen zu Krediten und Karten mit einer gewissen Verzögerung in der Datenbank gespeichert sind und wir uns damit befassen mussten. Überprüft die letzten 15 Tage von gestern.
    3. Der Cube wurde für die Funktionen der Webanwendung erstellt. Insgesamt gab es ungefähr 3 Millionen Kredite und Karten, und die gleichzeitige Anzeige in einem Browser war entweder sehr schwierig oder unmöglich. Um dieses Problem zu lösen, zusätzlich zur Standardtrennung von Krediten und Karten nach Eröffnungsdatum, Referenzregion, ausgestellt vom Manager, etc. zusätzliche Dimensionen wurden erfunden. Im beschriebenen Fall wurden die Abstufungen der Kredite um den Betrag, den Betrag der Verzögerung, die Anzahl der Tage der Verzögerung und das Vorzeichen - mindestens einmal in der Verzögerung - ergänzt. Außerdem wurden nach dem Datum der Eröffnung und Schließung des Kredits Hierarchien vom Typ Jahr-Viertel-Monat-Tag erstellt. Infolgedessen wurden alle Kredite zusammengefasst, von denen der größte nicht mehr als 10.000 Zeilen umfasste. Der Kunde war nur an der Verzögerung interessiert, daher wurden für Kredite, die pünktlich zurückgezahlt wurden, keine zusätzlichen Messungen erfunden. Der Zugriff auf sie wurde vom Viewer beschränkt und konnte jederzeit geöffnet werden. In der aktuellen Version sah der Benutzer nur Informationen, die durch Standardmessungen aggregiert wurden. Einige dieser Darlehen waren jedoch noch zu sehen - dies waren die Darlehen des Schuldners, von denen nur ein Darlehen überfällig war, aber mehrere aufgenommen wurden.
    4. Die Aktualisierung des Cubes sollte unmittelbar nach der Aktualisierung des Fensters beginnen. Hierzu wurde ein Service erstellt, der den Status des Oracle Task Schedulers überprüft. Für ihn wurde auch ein Hilfsprogramm geschrieben, mit dessen Hilfe es möglich war, die Aktualisierung des Cubes dringend zu starten / zu unterbrechen oder den aktuellen Status zu überwachen.
    5. Es musste ein OLAP-Viewer gefunden werden, der alle erforderlichen Funktionen, das normale Erscheinungsbild und die Flexibilität der Einstellungen bietet. Diese Aufgabe war nicht einfach: Viele von ihnen sind nicht sehr benutzerfreundlich, und die Arbeit mit ihnen ist nicht sehr bequem. Selbst mit dem, der gefunden wurde, musste ich leiden.

    Die Implementierung selbst basierte auf dem Wissen und der Technologie, die ich zu dieser Zeit besaß, sowie auf den Software-Richtlinien des Unternehmens. Deshalb, wenn es Ihnen plötzlich in der Umsetzung so vorkommt, als hätte ich einen Ball in Form eines Kätzchens aufgeblasen, dann bitte ich Sie, nachsichtig zu sein, nicht alles hing von mir ab.

    Implementierung:


    Das System wurde auf Windows Server 2008 64-Bit, das Webformular auf IIS, ASP.NET-Technologie bereitgestellt.
    1. Data Showcase - Oracle-Datenbank
    2. Task Scheduler - Oracle-Datenbank
    3. OLAP Cube - Microsoft Analysis Services
    4. Verfolgen von Storefront-Updates und Starten von Updates für einen Cube - Windows-Dienst
    5. OLAP Viewer - DevExpres AspxPivotGrid

    Ein wenig über die technischen Feinheiten und Tricks, die bei der Entwicklung dieses Systems angewendet wurden.

    Technische Tricks:


    • 1. Für den korrekten Betrieb von 32-Bit- und 64-Bit-Oracle-Anbietern unter Windows:
      1. Laden Sie die 32-Bit- und 64-Bit-Oracle-Treiber von der offiziellen Website herunter.
      2. Legen Sie in einem separaten Ordner Client32 Runtime.
      3. Starten Sie den Computer neu.
      4. Legen Sie in einem separaten Ordner Client64 Runtime.
      5. Fügen Sie in der Windows-Registrierung den Wert TNS_ADMIN zum Abschnitt KEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ORACLE hinzu, und legen Sie den Pfad zum Ordner für Clinet32 - ... \ network \ admin fest
      6. Starten Sie den Computer neu

    • Wenn Sie den Zugriff im Analysis Services-Cube einschränken, müssen Sie auf der Registerkarte "Cubes" die Option "Lesen" festlegen, dann die Dimensionswerte im Cube auswählen, diejenigen auswählen, auf die die Rolle Zugriff hat. Wenn Sie auf die Registerkarte "Erweitert" wechseln, aktivieren Sie das Kontrollkästchen "Visuelle Gesamtwerte aktivieren". Es ist standardmäßig deaktiviert. Ist dies nicht der Fall, werden in den Summen für diese Dimension nicht nur die Summen für die Dimensionen angezeigt, auf die die Rolle Zugriff hatte, sondern auch die Messwerte, auf die kein Zugriff erfolgte.
    • Bei großen Dimensionen muss ASPxPivotGrid die Standardsortierung deaktivieren.


    Über das Wichtige!


    In diesem Artikel wollte ich zeigen, wie Sie Probleme im Zusammenhang mit großen Datenmengen mithilfe verfügbarer und langjähriger Technologien lösen können. Vor der Implementierung von OLAP hat meine Führungskraft auf der Suche nach einer „goldenen Kugel“ viele Lösungen in Kisten geprüft, sowohl von großen Herstellern als auch von kleinen Unternehmen. Es stellte sich oft heraus, dass die Unterstützung von Lösungen aus der Box einen hohen Aufwand und finanzielle Kosten erforderte. In einigen Fällen konnte das verpackte Produkt aufgrund seiner Architektur einfach nicht das tun, was es wollte. Vielleicht hat die Firma, in der ich arbeite, nicht am richtigen Ort gesucht, und es gibt so eine „goldene“ oder zumindest eine „silberne“ Kugel. Aber was war, war. Andererseits kann dieser Artikel jemanden davon abhalten, „Fahrräder“ in Form von zusätzlichen aggregierten Tabellen, einigen komplexen Architekturen und sperrigen Standorten zu erfinden.
    Aber wie viele Leute haben so viele Meinungen und in dieser Hinsicht mag ich die fiktive Geschichte der Erfindung des Kugelschreibers: Die

    NASA gab Millionen von Dollar für die Erfindung eines Kugelschreibers aus, der in der Schwerelosigkeit geschrieben werden kann.
    Die Russen schrieben einfach mit Bleistift.


    Aber wo ist jetzt der Stift und wo ist der Stift. Daher kann jede Lösung, auch eine sehr komplexe und umständliche, ihren Benutzer finden, genau wie eine einfache.
    Vielen Dank an alle, die alles gelesen haben, was ich oben geschrieben habe!

    Jetzt auch beliebt: