Mehr

Effiziente Möglichkeiten zum Lesen von Tabellendaten aus einem großen Feature-Layer?

Effiziente Möglichkeiten zum Lesen von Tabellendaten aus einem großen Feature-Layer?


Ich habe einen Feature-Layer, der etwa 460.000 Datensätze enthält, und es dauert derzeit etwa 20 Minuten, diese Tabelle mit dem zu lesenarcpy.da.TableToNumPyArray()Werkzeug. Gibt es eine effizientere Möglichkeit, die Zeilen zu lesen, um diese Daten dann bearbeiten zu können? Es scheint, als ob es eine "C-ähnliche" Möglichkeit geben sollte, auf die Zeilen zuzugreifen. Hier ist die Funktion in ihrer Gesamtheit, obwohl ich mich auf die Zeile am unteren Rand konzentriere, in der ich anrufearcpy.da.TableToNumpyArray()um die Daten auszulesen:

def import_surface(surface, grid, nrow, ncol, row_col_fields, field_to_convert): """ Referenziert die Rasteroberfläche auf das Modellraster. Gibt ein Array der Größe nrow, ncol zurück. """ out_table = r'in_memory{}'.format( surface) grid_oid_fieldname = arcpy.Describe(grid).OIDFieldName # Berechnen Sie den mittleren Oberflächenwert für jede Modellzelle und geben Sie eine Tabelle aus (~20 Sekunden) arcpy.sa.ZonalStatisticsAsTable(grid, grid_oid_fieldname, surface, out_table, 'DATA', ' MEAN') # Erstellen Sie einige Layer und Ansichten grid_lyr = r'in_memorygrid_lyr' table_vwe = r'in_memory	able_vwe' arcpy.MakeFeatureLayer_management(grid, grid_lyr) arcpy.MakeTableView_management(out_table, table_vwe) grid_lyr_py. OIDFieldName # table_vwe_oid_fieldname = arcpy.Describe(table_vwe).OIDFieldName # Verbinde die Ausgabe-Zonenstatistiktabelle mit dem Raster, um jedem Wert Zeile/Spalte zuzuweisen. arcpy.AddJoin_management(grid_lyr, grid_lyr_oid_fieldname, table_vwe, 'OID_', 'KEEP_ALL') # Nehmen Sie die neu hinzugefügten Gitter-/Zonenstatistiken und lesen Sie Tupel von (row, col, val) aus (dauert ~20 Minuten) a = arcpy.da .TableToNumPyArray(grid_lyr, row_col_fields + [field_to_convert], skip_nulls=False) # Formt die 1D-Arrayausgabe von TableToNumpy in ein 2D-strukturiertes Array um, sortiert nach Zeile/Spalte (~0,1 Sekunden) a = np.rec.fromrecords(a.tolist (), names=['row', 'col', 'val']) a.sort(order=['row', 'col']) b = np.reshape(a.val, (nrow, ncol) ) zurück b

Dachte zuerst zu kommentieren, aber dann wurde es groß…

  • Die Verarbeitung so vieler Daten in 20 Minuten ist imo eine angemessene Zeit. Ich habe auch versucht, einige der Arcpy-Operationen zu beschleunigen - schauen Sie hier.
  • Wenn die Leistung ein Problem darstellt, könnten Sie die File-Geodatabase mit API lesen, aber ich bezweifle, dass dies schneller wäre, als die Daten mit arcpy in eine reine Python-Datenstruktur wie ein Diktier oder eine Liste von Tupeln einzulesen.
  • Es hängt ein wenig von der Datenstruktur ab, die Sie in Ihrer gdb-Tabelle haben - das Suchen nach Schlüsseln ist schneller als das Suchen nach Werten in einem Python-Diktat, und Listenverständnisse können in einigen Situationen die Verarbeitungsgeschwindigkeit erheblich erhöhen. Suchen nach Operationen sind in Python kostspielig und finden optimalere Ansätze.

  • Ich führe immer 64-Bit-Python für jede große Datenverarbeitung aus - es werden ca. 10 % der von mir verwendeten Datensätze verarbeitet.

  • Sie könnten mit SQLite spielen, indem Sie Daten in eine Datenbank laden und etwas SQL ausführen - es könnte schneller sein, aber es ist schwer, dies ohne Testen ohne Ihre Daten zu überprüfen.

Endlich, falls du es noch nicht hast - besorg dir eine SSD-Festplatte - nachdem ich auf SSD umgestiegen bin, fing alles an zu fliegen (jetzt wird es wieder langsam :) - weil man sich daran gewöhnt hat ).


Der größte Engpass in meinem vorherigen Code war das Lesen aus einer GDB-Feature-Class. Nach der Konvertierung in ein Shapefile sank meine Lesezeit auf etwa 10 % des Originals. Ich hätte mich daran erinnern sollen, dass ich vor ein paar Monaten das gleiche Problem hatte #facepalm. Außerdem habe ich in einer früheren Iteration des aktuellen Problems versucht, meine Funktionen in einein ErinnerungStandort, der keine Verbesserung der Bearbeitungszeit brachte. Ich habe es jedoch erneut versucht, vielleicht nach dem Zurücksetzen des iPython Notebook-Kernels, und die Verarbeitungszeit wurde viel vernünftiger.

Hier ist der neue Code, der in weniger als 2 Minuten ausgeführt wird:

def import_surface(surface, grid, nrow, ncol, zstat_field=None, join_field=None, row_col_fields=('grid_row', 'grid_col'), field_aliasname_to_convert="MEAN"): """ Referenziert Rasterfläche auf Modellraster und gibt ein . zurück Array of size nrow, ncol the grid; int zstat_field: Feld im Grid, das die Zonen definiert; str join_field: Feld in den resultierenden Features, die für den Join verwendet werden sollen; str row_col_fields: Namen der Felder mit Zeilen- und Spaltennummern; list field_aliasname_to_convert: Alias ​​des resultierenden zstat zu verwendendes Feld; str """, wenn join_field None ist: join_field = arcpy.Describe(grid).OIDFieldName wenn zstat_field None ist: zstat_field = join_field zstat = r'in_memory{}'.format(surface) arcpy.sa.ZonalStatisticsAsTable (grid, zstat_field, surface, zstat, 'NODATA', 'MEAN') # Feature erstellen Layer und Tabellenansichten zum Verbinden von grid_lyr = r'in_memorygrid_lyr' arcpy.MakeFeatureLayer_management(grid, grid_lyr) zstat_vwe = r'in_memoryzstat_vwe' arcpy.MakeTableView_management(zstat, zstat_vwe) # Tabellen verbinden arcpy , join_field, 'KEEP_ALL') # Schreiben Sie die Grid-Features in eine neue Feature-Class zstat_grid = r'in_memoryzstat_grid' arcpy.CopyFeatures_management(grid_lyr, zstat_grid) # Stellen Sie sicher, dass wir auf den richtigen zstat-Feldnamen zeigen, falls für idx, Alias ​​abgeschnitten in enumerate([f.aliasName for f in arcpy.ListFields(zstat_grid)]): if alias == field_aliasname_to_convert: name = [f.name for f in arcpy.ListFields(zstat_grid)][idx] break # Konvertiert reguläres Rastergri Polygon-Shapefile in ein Array. a = arcpy.da.TableToNumPyArray(zstat_grid, row_col_fields + (name, ), skip_nulls=False) # In recarray konvertieren a_1 = np.rec.fromrecords(a.tolist(), names=['row', 'col', 'val']) a_1.sort(order=['row', 'col']) b = np.reshape(a_1.val, (nrow, ncol)) return b

31Datenbankreplikation

Lady, du bist die Grausamste, die sie lebt, Wenn Sie diese Gnaden ins Grab führen und der Welt keine Kopie hinterlassen.

In diesem Kapitel werden die grundlegenden Konzepte und die Terminologie im Zusammenhang mit den Oracle-Replikationsfunktionen erläutert.

Die in diesem Kapitel beschriebenen erweiterten Replikationsfunktionen sind nur verfügbar, wenn Sie Oracle8 Enterprise Edition erworben haben.

Oracle8 Replication enthält detaillierte Informationen zur Datenbankreplikation.

Was ist Replikation?

Replikation ist der Prozess des Kopierens und Verwaltens von Datenbankobjekten in mehrere Datenbanken, die ein verteiltes Datenbanksystem bilden. Die Replikation kann die Leistung verbessern und die Verfügbarkeit von Anwendungen schützen, da alternative Datenzugriffsoptionen vorhanden sind. Beispielsweise greift eine Anwendung normalerweise auf eine lokale Datenbank statt auf einen Remote-Server zu, um den Netzwerkverkehr zu minimieren und maximale Leistung zu erzielen. Darüber hinaus kann die Anwendung bei einem Ausfall des lokalen Servers weiterhin funktionieren, andere Server mit replizierten Daten bleiben jedoch zugänglich.

Oracle unterstützt zwei verschiedene Formen der Replikation: grundlegende und erweiterte Replikation.

Einfache Replikation

Bei der Basisreplikation bieten Datenreplikate schreibgeschützten Zugriff auf die Tabellendaten, die von einem primären (Master-)Standort stammen. Anwendungen können Daten von lokalen Datenreplikaten abfragen, um den Netzwerkzugriff unabhängig von der Netzwerkverfügbarkeit zu vermeiden. Anwendungen im gesamten System müssen jedoch auf Daten am primären Standort zugreifen, wenn Aktualisierungen erforderlich sind.

Abbildung ಟ-1 veranschaulicht die grundlegende Replikation.

Oracle kann einfache, schreibgeschützte Replikationsumgebungen mit schreibgeschützten Tabellen-Snapshots unterstützen. Weitere Informationen zur grundlegenden Replikation und schreibgeschützten Snapshots finden Sie unter "Grundlegende Replikationskonzepte" auf Seite 31-4.

Abbildung 31-1 Basic, schreibgeschützte Replikation

Erweiterte (symmetrische) Replikation

Die erweiterten Replikationsfunktionen von Oracle erweitern die Fähigkeiten der grundlegenden schreibgeschützten Replikation, indem sie Anwendungen ermöglichen, Tabellenreplikate in einem replizierten Datenbanksystem zu aktualisieren. Mit der erweiterten Replikation können Datenreplikate überall im System sowohl Lese- als auch Aktualisierungszugriff auf die Daten einer Tabelle bereitstellen. Teilnehmende Oracle Datenbankserver arbeiten automatisch daran, die Daten aller Tabellenreplikate zu konvergieren und die globale Transaktionskonsistenz und Datenintegrität sicherzustellen.

Abbildung ಟ-2 veranschaulicht die erweiterte Replikation.

Oracle kann die Anforderungen von erweiterten Replikationsumgebungen mit mehreren Konfigurationen unterstützen. Weitere Informationen zu erweiterten Replikationssystemen finden Sie unter "Erweiterte Replikationskonzepte" auf Seite 31-11.

Abbildung 31-2 Erweiterte Replikation.

Grundlegende Replikationskonzepte

Basisreplikationsumgebungen unterstützen Anwendungen, die schreibgeschützten Zugriff auf die Tabellendaten erfordern, die von einem primären Standort stammen. In den folgenden Abschnitten werden die grundlegenden Konzepte grundlegender Replikationsumgebungen erläutert.

Anwendungen der Basisreplikation

Die einfache, schreibgeschützte Datenreplikation ist für verschiedene Arten von Anwendungen nützlich.

Informationsverteilung

Die einfache Replikation ist für die Informationsverteilung nützlich. Betrachten Sie zum Beispiel den Betrieb einer großen Warenhauskette für Verbraucher. Bei dieser Art von Geschäft ist es wichtig sicherzustellen, dass Produktpreisinformationen immer verfügbar, relativ aktuell und in allen Verkaufsstellen konsistent sind. Um diese Ziele zu erreichen, kann jedes Einzelhandelsgeschäft seine eigenen Produktpreisdaten haben, die es jede Nacht aus einer Hauptpreistabelle in der Unternehmenszentrale aktualisiert.

Abbildung 31-3 Informationsverteilung

Informationen zum Entladen

Die einfache Replikation ist nützlich, um ganze Datenbanken zu replizieren oder Informationen auszulagern. Wenn zum Beispiel die Leistung eines Transaktionsverarbeitungssystems mit hohem Volumen kritisch ist, kann es vorteilhaft sein, eine doppelte Datenbank zu unterhalten, um die anspruchsvollen Abfragen von Entscheidungsunterstützungsanwendungen zu isolieren.

Abbildung 31-4 Informationen entladen

Informationstransport

Die grundlegende Replikation kann als Informationstransportmechanismus nützlich sein. Die einfache Replikation kann beispielsweise Daten in regelmäßigen Abständen von einer Produktionsdatenbank für die Transaktionsverarbeitung in ein Data Warehouse verschieben.

Schreibgeschützte Tabellen-Snapshots

Ein schreibgeschützter Tabellen-Snapshot ist eine lokale Kopie von Tabellendaten, die aus einer oder mehreren Remote-Master-Tabellen stammt. Eine Anwendung kann die Daten in einem schreibgeschützten Tabellen-Snapshot abfragen, aber keine Zeilen im Snapshot einfügen, aktualisieren oder löschen.

Abbildung ಟ-5 und die folgenden Abschnitte erläutern mehr über schreibgeschützte Tabellen-Snapshots und die grundlegende Replikation.

Abbildung 31-5 Schreibgeschützte Snapshots, Master-Tabellen und Snapshot-Protokolle

Schreibgeschützte Snapshot-Architektur

Oracle unterstützt die grundlegende Datenreplikation mit seinem Tabellen-Snapshot-Mechanismus. In den folgenden Abschnitten wird die Architektur einfacher schreibgeschützter Tabellen-Snapshots erläutert.

Oracle bietet weitere grundlegende Replikationsfunktionen wie komplexe Snapshots und ROWID-Snapshots für einzigartige Anwendungsanforderungen. Weitere Informationen zu diesen speziellen Konfigurationen finden Sie unter "Andere grundlegende Replikationsoptionen" auf Seite 31-10.

Die definierende Abfrage eines Snapshots

Die logische Datenstruktur eines Tabellen-Snapshots wird durch eine Abfrage definiert, die auf Daten in einer oder mehreren Remote-Master-Tabellen verweist. Die definierende Abfrage eines Snapshots bestimmt, welche Daten der Snapshot enthalten wird.

Die definierende Abfrage eines Snapshots sollte so sein, dass jede Zeile im Snapshot direkt einer Zeile oder einem Teil einer Zeile in einer einzelnen Mastertabelle entspricht. Insbesondere sollte die definierende Abfrage eines Snapshots keine eindeutige oder aggregierte Funktion, keine GROUP BY- oder CONNECT BY-Klausel, keinen Join, eingeschränkte Typen von Unterabfragen oder eine Mengenoperation enthalten. Das folgende Beispiel zeigt eine einfache Tabellen-Snapshot-Definition.

In allen Fällen muss die definierende Abfrage des Snapshots auf alle Primärschlüsselspalten in der Mastertabelle verweisen.

Die definierende Abfrage eines Snapshots kann eingeschränkte Typen von Unterabfragen enthalten, die auf mehrere Tabellen verweisen, um Zeilen aus der Mastertabelle des Snapshots zu filtern. Ein Unterabfrage-Snapshot kann verwendet werden, um Snapshots zu erstellen, die die Viele-zu-Eins-Referenzen von untergeordneten zu übergeordneten Tabellen, die mehrere Ebenen umfassen können, "aufsteigen" lassen. Im folgenden Beispiel wird ein einfacher Unterabfrage-Snapshot erstellt.

Snapshot-Aktualisierungen

Die Daten, die ein Snapshot präsentiert, stimmen nicht unbedingt mit den aktuellen Daten seiner Mastertabellen überein. Ein Tabellen-Snapshot ist ein transaktionskonsistentes Abbild seiner Stammdaten, da diese Daten zu einem bestimmten Zeitpunkt vorhanden waren. Um die Daten eines Snapshots mit den Daten seines Masters relativ aktuell zu halten, muss Oracle den Snapshot regelmäßig aktualisieren. Eine Snapshot-Aktualisierung ist eine effiziente Batch-Operation, die dafür sorgt, dass dieser Snapshot einen aktuelleren Status seines Masters widerspiegelt.

Sie müssen entscheiden, wie und wann es angebracht ist, jeden Snapshot zu aktualisieren, um eine aktuellere Darstellung seiner Stammdaten zu erhalten. Beispielsweise erfordern Snapshots, die aus Mastertabellen stammen, die von Anwendungen häufig aktualisiert werden, in der Regel häufige Aktualisierungen. Im Gegensatz dazu erfordern Snapshots, die von relativ statischen Mastertabellen abhängen, normalerweise seltene Aktualisierungen. Analysieren Sie zusammenfassend die Anwendungsmerkmale und -anforderungen, um geeignete Snapshot-Aktualisierungsintervalle zu bestimmen.

Um Snapshots zu aktualisieren, unterstützt Oracle verschiedene Arten von Aktualisierungen (vollständig und schnell), Snapshot-Aktualisierungsgruppen sowie manuelle und automatische Aktualisierungen.

Vollständige und schnelle Aktualisierungen

Oracle kann einen einzelnen Snapshot entweder mit einer vollständigen oder einer schnellen Aktualisierung aktualisieren.

Komplette Auffrischungen

Um eine vollständige Aktualisierung eines Snapshots durchzuführen, führt der Server, der den Snapshot verwaltet, die definierende Abfrage des Snapshots aus. Das Resultset der Abfrage ersetzt die vorhandenen Snapshot-Daten, um den Snapshot zu aktualisieren. Oracle kann für jeden Snapshot eine vollständige Aktualisierung durchführen.

Schnelle Aktualisierungen

Um eine schnelle Aktualisierung durchzuführen, identifiziert der Server, der den Snapshot verwaltet, zuerst die Änderungen, die seit der letzten Aktualisierung des Snapshots im Master vorgenommen wurden, und wendet sie dann auf den Snapshot an. Schnelle Aktualisierungen sind effizienter als vollständige Aktualisierungen, wenn nur wenige Änderungen am Master vorgenommen werden, da die beteiligten Server und Netzwerke weniger Daten replizieren müssen. Schnelle Aktualisierungen sind nur für Snapshots verfügbar, wenn die Mastertabelle über ein Snapshot-Protokoll verfügt.

Snapshot-Protokolle

Wenn eine Mastertabelle einem oder mehreren Snapshots entspricht, erstellen Sie ein Snapshot-Protokoll für die Tabelle, damit schnelle Aktualisierungen der Snapshots möglich sind. Das Snapshot-Log einer Master-Tabelle verfolgt die Fast-Refresh-Daten für alle entsprechenden Snapshots – pro Master-Tabelle ist nur ein Snapshot-Log möglich. Wenn ein Server eine schnelle Aktualisierung für einen Snapshot durchführt, verwendet er die Daten im Snapshot-Protokoll seiner Mastertabelle, um den Snapshot effizient zu aktualisieren. Oracle löscht automatisch bestimmte Aktualisierungsdaten aus einem Snapshot-Protokoll, nachdem alle Snapshots Aktualisierungen durchgeführt haben, sodass die Protokolldaten nicht mehr benötigt werden.

Snapshot-Aktualisierungsgruppen

Um die referenzielle Integrität und Transaktionskonsistenz zwischen den Tabellen-Snapshots mehrerer zusammengehöriger Mastertabellen zu bewahren, organisiert und aktualisiert Oracle jeden Snapshot als Teil einer Aktualisierungsgruppe. Oracle aktualisiert alle Snapshots in einer Gruppe als einen einzigen Vorgang. Nach dem Aktualisieren aller Snapshots in einer Refresh-Gruppe entsprechen die Daten aller Snapshots in der Gruppe demselben transaktionskonsistenten Zeitpunkt.

Automatische Snapshot-Aktualisierungen

Beim Erstellen einer Snapshot-Aktualisierungsgruppe konfigurieren Administratoren die Gruppe normalerweise so, dass Oracle ihre Snapshots automatisch aktualisiert. Andernfalls müssten Administratoren die Gruppe bei Bedarf manuell aktualisieren.

Wenn Sie eine Aktualisierungsgruppe für automatische Aktualisierungen konfigurieren, müssen Sie

  • Geben Sie ein Aktualisierungsintervall für die Gruppe an
  • Konfigurieren Sie den Server, der die Snapshots verwaltet, mit einem oder mehreren SNP-n-Hintergrundprozessen, um regelmäßig aufzuwachen und alle Snapshots zu aktualisieren, die aktualisiert werden müssen
Automatische Aktualisierungsintervalle

Wenn Sie eine Snapshot-Aktualisierungsgruppe erstellen, können Sie ein automatisches Aktualisierungsintervall für die Gruppe angeben. Beachten Sie beim Festlegen des Aktualisierungsintervalls einer Gruppe die folgenden Verhaltensweisen:

  • Die Datumsangaben oder Datumsausdrücke, die das Aktualisierungsintervall angeben, müssen zu einem zukünftigen Zeitpunkt ausgewertet werden.
  • Das Aktualisierungsintervall muss größer sein als die zum Ausführen einer Aktualisierung erforderliche Zeit.
  • Relative Datumsausdrücke werden zu einem Zeitpunkt ausgewertet, der relativ zum letzten Aktualisierungsdatum ist. Sollte ein Netzwerk- oder Systemfehler eine geplante Gruppenaktualisierung stören, kann sich die Auswertung eines relativen Datumsausdrucks entsprechend ändern.
  • Explizite Datumsausdrücke werden unabhängig vom letzten Aktualisierungsdatum zu einem bestimmten Zeitpunkt ausgewertet.
Aktualisierungstypen

Standardmäßig versucht Oracle, eine schnelle Aktualisierung jedes Snapshots in einer Aktualisierungsgruppe durchzuführen. Wenn Oracle aus irgendeinem Grund keine schnelle Aktualisierung für einen einzelnen Snapshot durchführen kann (z. B. wenn eine Mastertabelle kein Snapshot-Log hat), führt der Server eine vollständige Aktualisierung für den Snapshot durch.

SNP n Hintergrundprozesse

Die automatische Snapshot-Refresh-Funktion von Oracle verwendet Jobwarteschlangen, um die regelmäßige Ausführung interner Systemprozeduren zu planen. Jobwarteschlangen erfordern, dass mindestens ein SNP n-Hintergrundprozess ausgeführt wird. Ein SNPn-Hintergrundprozess wacht regelmäßig auf, überprüft die Jobwarteschlange und führt alle ausstehenden Jobs aus.

Manuelle Snapshot-Aktualisierungen

Geplante, automatische Snapshot-Aktualisierungen sind möglicherweise nicht immer ausreichend. Unmittelbar nach dem Laden von Massendaten in eine Mastertabelle werden beispielsweise abhängige Snapshots nicht mehr die Daten der Mastertabelle darstellen. Anstatt auf die nächsten geplanten automatischen Gruppenaktualisierungen zu warten, möchten Sie möglicherweise abhängige Snapshot-Gruppen manuell aktualisieren, um die neuen Zeilen der Mastertabelle sofort an die zugehörigen Snapshots weiterzugeben.

Andere grundlegende Replikationsoptionen

Oracle unterstützt einige zusätzliche grundlegende Replikationsfunktionen, die in bestimmten Situationen nützlich sein können:

Komplexe Schnappschüsse

Wenn die definierende Abfrage eines Snapshots eine eindeutige oder aggregierte Funktion, eine GROUP BY- oder CONNECT BY-Klausel, einen Join, eingeschränkte Typen von Unterabfragen oder eine Set-Operation enthält, ist der Snapshot ein komplexer Snapshot .

Das folgende Beispiel ist eine komplexe Tabellen-Snapshot-Definition.

Der Hauptnachteil eines komplexen Snapshots besteht darin, dass Oracle keine schnelle Aktualisierung des Snapshots durchführen kann – Oracle kann nur vollständige Aktualisierungen eines komplexen Snapshots durchführen. Folglich kann die Verwendung komplexer Snapshots die Netzwerkleistung während vollständiger Snapshot-Aktualisierungen beeinträchtigen.

ROWID-Schnappschüsse

Primärschlüssel-Snapshots (implizit in früheren Abschnitten dieses Kapitels besprochen) sind die Standardeinstellungen für Oracle. Oracle basiert einen Primärschlüssel-Snapshot auf dem Primärschlüssel seiner Master-Tabelle. Aufgrund dieser Struktur können Sie:

  • die Mastertabellen eines Snapshots reorganisieren, ohne eine vollständige Aktualisierung des Snapshots durchführen zu müssen
  • Erstellen Sie einen Snapshot mit einer definierenden Abfrage, die eine eingeschränkte Art von Unterabfrage enthält

Nur aus Gründen der Abwärtskompatibilität unterstützt Oracle auch ROWID-Snapshots basierend auf den physischen Zeilenkennungen (ROWIDs) von Zeilen in der Mastertabelle. ROWID-Snapshots sollten nur für Snapshots von Mastertabellen in einer Oracle Release 7.3-Datenbank verwendet werden und sollten nicht verwendet werden, wenn neue Snapshots von Mastertabellen in Oracle8-Datenbanken erstellt werden.

Um einen ROWID-Snapshot zu unterstützen, erstellt Oracle einen zusätzlichen Index für die Basistabelle des Snapshots mit dem Namen I_SNAPEfficient Wege zum Lesen von Tabellendaten aus einem großen Feature-Layer? - Geografische Informationssysteme,[nobr][H1toH2]

Wie Azure Databricks diese Herausforderungen angeht

  • Zugriffskontrolle: Umfangreiche Zugriffskontrolle bis hin zur Speicherschicht. Azure Databricks kann sein Cloud-Backbone nutzen, indem es hochmoderne Azure-Sicherheitsdienste direkt in der Plattform nutzt. Aktivieren Sie das Passthrough für Azure Active Directory-Anmeldeinformationen auf Ihren Spark-Clustern, um den Zugriff auf Ihren Data Lake zu steuern.
  • Clusterrichtlinien: Ermöglichen Sie Administratoren, den Zugriff auf Computerressourcen zu steuern.
  • API first: Automatisieren Sie die Bereitstellung und das Berechtigungsmanagement mit der Databricks-REST-API.
  • Audit-Protokollierung: Robuste Audit-Protokolle zu Aktionen und Vorgängen, die im gesamten Arbeitsbereich ausgeführt werden, der an Ihren Data Lake geliefert wird. Azure Databricks kann die Leistungsfähigkeit von Azure nutzen, um Datenzugriffsinformationen für Ihr Bereitstellungskonto und alle anderen von Ihnen konfigurierten Konten bereitzustellen. Sie können diese Informationen dann verwenden, um Warnungen zu aktivieren, die uns auf potenzielles Fehlverhalten hinweisen.

In den folgenden Abschnitten wird veranschaulicht, wie Sie diese Azure Databricks-Features verwenden, um eine Governance-Lösung zu implementieren.


Lake House-Referenzarchitektur auf AWS

Das folgende Diagramm veranschaulicht unsere Lake House-Referenzarchitektur auf AWS.

In den folgenden Abschnitten bieten wir weitere Informationen zu den einzelnen Ebenen.

Datenaufnahmeschicht

Die Aufnahmeschicht in unserer Lake House-Referenzarchitektur besteht aus einer Reihe speziell entwickelter AWS-Services, um die Datenaufnahme aus einer Vielzahl von Quellen in die Lake House-Speicherschicht zu ermöglichen. Die meisten Erfassungsdienste können Daten sowohl direkt an den Data Lake als auch an den Data Warehouse-Speicher liefern. Individuelle zweckgerichtete AWS-Services entsprechen den einzigartigen Anforderungen an Konnektivität, Datenformat, Datenstruktur und Datengeschwindigkeit der folgenden Quellen:

  • Operative Datenbankquellen
  • Software as a Service (SaaS)-Anwendungen
  • Dateifreigaben
  • Streaming-Datenquellen

Operative Datenbankquellen (OLTP, ERP, CRM)

Die AWS Data Migration Service (AWS DMS)-Komponente in der Aufnahmeschicht kann sich mit mehreren operativen RDBMS- und NoSQL-Datenbanken verbinden und deren Daten in Amazon Simple Storage Service (Amazon S3)-Buckets im Data Lake oder direkt in Staging-Tabellen in einem Amazon Redshift aufnehmen in Data-Warehouse. Mit AWS DMS können Sie einen einmaligen Import von Quelldaten durchführen und dann laufende Änderungen in der Quelldatenbank replizieren.

SaaS-Anwendungen

Die Aufnahmeschicht verwendet Amazon AppFlow, um SaaS-Anwendungsdaten einfach in Ihren Data Lake aufzunehmen. Mit wenigen Klicks können Sie serverlose Datenaufnahmeflüsse in Amazon AppFlow einrichten. Ihre Flows können sich mit SaaS-Anwendungen wie Salesforce, Marketo und Google Analytics verbinden, Daten aufnehmen und an die Lake House-Speicherschicht liefern, entweder an S3-Buckets im Data Lake oder direkt an Staging-Tabellen im Amazon Redshift Data Warehouse. Sie können Amazon AppFlow-Datenaufnahme-Flows planen oder durch Ereignisse in der SaaS-Anwendung auslösen. Aufgenommene Daten können validiert, gefiltert, zugeordnet und maskiert werden, bevor sie an den Lake House-Speicher geliefert werden.

Dateifreigaben

Viele Anwendungen speichern strukturierte und unstrukturierte Daten in Dateien, die auf NAS-Arrays (Network Attached Storage) gehostet werden. AWS DataSync kann Hunderte von Terabyte und Millionen von Dateien von NFS- und SMB-fähigen NAS-Geräten in die Data Lake-Landingzone aufnehmen. DataSync übernimmt automatisch die Skripterstellung von Kopieraufträgen, die Planung und Überwachung von Übertragungen, die Überprüfung der Datenintegrität und die Optimierung der Netzwerkauslastung. DataSync kann eine einmalige Übertragung von Dateien durchführen und dann geänderte Dateien überwachen und mit dem Lake House synchronisieren. DataSync wird vollständig verwaltet und kann in wenigen Minuten eingerichtet werden.

Streaming-Datenquellen

Die Aufnahmeschicht verwendet Amazon Kinesis Data Firehose, um Streaming-Daten von internen oder externen Quellen zu empfangen und an die Speicherschicht von Lake House zu liefern. Mit wenigen Klicks können Sie einen Kinesis Data Firehose-API-Endpunkt konfigurieren, an den Quellen Streamingdaten wie Clickstreams, Anwendungs- und Infrastrukturprotokolle und Überwachungsmetriken sowie IoT-Daten wie Gerätetelemetrie und Sensormesswerte senden können. Kinesis Data Firehose führt die folgenden Aktionen aus:

  • Puffert eingehende Streams
  • Stapelt, komprimiert, transformiert, partitioniert und verschlüsselt die Daten
  • Liefert die Daten als S3-Objekte an den Data Lake oder als Zeilen in Staging-Tabellen im Amazon Redshift Data Warehouse

Kinesis Data Firehose ist serverlos, erfordert keine Administration und hat ein Kostenmodell, bei dem Sie nur für das Datenvolumen bezahlen, das Sie über den Dienst übertragen und verarbeiten. Kinesis Data Firehose skaliert automatisch, um sich an das Volumen und den Durchsatz der eingehenden Daten anzupassen. Für den Aufbau von Echtzeit-Streaming-Analysepipelines bietet die Aufnahmeschicht Amazon Kinesis Data Streams.

Lake House Speicherschicht

Amazon Redshift und Amazon S3 bieten eine einheitliche, nativ integrierte Speicherschicht unserer Lake House-Referenzarchitektur. In der Regel speichert Amazon Redshift stark kuratierte, angepasste, vertrauenswürdige Daten, die in dimensionalen Standardschemas strukturiert sind, während Amazon S3 Data Lake-Speicher im Exabyte-Bereich für strukturierte, halbstrukturierte und unstrukturierte Daten bietet. Mit der Unterstützung für halbstrukturierte Daten in Amazon Redshift können Sie auch halbstrukturierte Daten in Ihren Amazon Redshift-Data Warehouses aufnehmen und speichern. Amazon S3 bietet branchenführende Skalierbarkeit, Datenverfügbarkeit, Sicherheit und Leistung. Unternehmen speichern Daten in der Regel in Amazon S3 unter Verwendung offener Dateiformate. Offene Dateiformate ermöglichen die Analyse derselben Amazon S3-Daten unter Verwendung mehrerer Verarbeitungs- und Verbrauchsschichtkomponenten. Die gemeinsame Katalogschicht speichert die Schemata von strukturierten oder halbstrukturierten Datasets in Amazon S3. Komponenten, die das S3-Dataset nutzen, wenden dieses Schema normalerweise auf das Dataset an, während sie es lesen (auch bekannt als Schema-on-Read).

Amazon Redshift Spectrum ist eines der Kernstücke der nativ integrierten Speicherschicht von Lake House. Redshift Spectrum ermöglicht es Amazon Redshift, eine einheitliche SQL-Schnittstelle bereitzustellen, die SQL-Anweisungen akzeptieren und verarbeiten kann, bei denen dieselbe Abfrage auf im Data Lake gehostete Datensätze sowie auf Data Warehouse-Speicher verweisen und diese kombinieren kann. Amazon Redshift kann Petabyte an in Amazon S3 gespeicherten Daten abfragen, indem es eine Schicht von bis zu Tausenden von transienten Redshift Spectrum-Knoten verwendet und die ausgeklügelten Abfrageoptimierungen von Amazon Redshift anwendet. Redshift Spectrum kann partitionierte Daten im S3-Data Lake abfragen. Es kann Daten lesen, die mit Open-Source-Codec komprimiert und in Open-Source-Zeilen- oder Spaltenformaten gespeichert sind, einschließlich JSON, CSV, Avro, Parquet, ORC und Apache Hudi. Weitere Informationen finden Sie unter Erstellen von Datendateien für Abfragen in Amazon Redshift Spectrum.

Während Redshift Spectrum in Amazon S3 gespeicherte Datensätze liest, wendet es das entsprechende Schema aus dem gemeinsamen AWS Lake Formation-Katalog auf die Daten an (Schema-on-Read). Mit Redshift Spectrum können Sie native Amazon Redshift-Pipelines erstellen, die die folgenden Aktionen ausführen:

  • Bewahren Sie große Mengen historischer Daten im Data Lake auf und nehmen Sie mit Redshift Spectrum . einige Monate heiße Daten in das Data Warehouse auf
  • Erstellen Sie angereicherte Datensätze, indem Sie sowohl heiße Daten im angeschlossenen Speicher als auch historische Daten im Data Lake verarbeiten, ohne dass Daten in eine Richtung verschoben werden müssen
  • Fügen Sie Zeilen mit angereicherten Datasets entweder in eine im angeschlossenen Speicher gespeicherte Tabelle oder direkt in die vom Data Lake gehostete externe Tabelle ein
  • Einfaches Auslagern großer, kälterer historischer Daten aus dem Data Warehouse in billigere Data Lake-Speicher und dennoch einfache Abfragen im Rahmen von Amazon Redshift-Abfragen

Hochstrukturierte Daten in Amazon Redshift unterstützen in der Regel interaktive Abfragen und hochgradig vertrauenswürdige, schnelle BI-Dashboards, während strukturierte, unstrukturierte und halbstrukturierte Daten in Amazon S3 typischerweise Anwendungsfälle für ML, Data Science und Big Data-Verarbeitung antreiben.

AWS DMS und Amazon AppFlow in der Aufnahmeschicht können Daten aus strukturierten Quellen direkt entweder an den S3-Data Lake oder das Amazon Redshift-Data Warehouse liefern, um die Anforderungen des Anwendungsfalls zu erfüllen. Bei der Aufnahme von Datendateien überträgt DataSync Daten in Amazon S3. Die Komponenten der Verarbeitungsschicht können über eine einzige einheitliche Schnittstelle wie Amazon Redshift SQL auf Daten in der einheitlichen Lake House-Speicherschicht zugreifen, die Daten, die im Amazon Redshift-Cluster gespeichert sind, mit Daten in Amazon S3 unter Verwendung von Redshift Spectrum kombinieren kann.

Im S3-Data Lake werden sowohl strukturierte als auch unstrukturierte Daten als S3-Objekte gespeichert. S3-Objekte im Data Lake sind in Buckets oder Präfixen organisiert, die Landing-, Raw-, Trusted- und Curated-Zonen darstellen. Bei Pipelines, die Daten im S3-Data Lake speichern, werden die Daten unverändert von der Quelle in die Zielzone aufgenommen. Die Verarbeitungsschicht validiert dann die Landezonendaten und speichert sie im Rohzonen-Bucket oder Präfix zur dauerhaften Speicherung. Dann wendet die Verarbeitungsschicht das Schema, die Partitionierung und andere Transformationen auf die Zonenrohdaten an, um sie in einen konformen Zustand zu bringen, und speichert sie in einer vertrauenswürdigen Zone. Als letzten Schritt kuratiert die Verarbeitungsebene ein Trusted-Zone-Dataset, indem sie es modelliert und mit anderen Datasets verbindet, und speichert es in der kuratierten Ebene. Normalerweise werden Datensätze aus der kuratierten Schicht teilweise oder vollständig in den Amazon Redshift Data Warehouse-Speicher aufgenommen, um Anwendungsfälle zu bedienen, die einen Zugriff mit sehr geringer Latenz erfordern oder komplexe SQL-Abfragen ausführen müssen.

Der Datensatz in jeder Zone ist normalerweise nach einem Schlüssel partitioniert, der einem für die jeweilige Zone spezifischen Verbrauchsmuster entspricht (roh, vertrauenswürdig oder kuratiert). S3-Objekte, die Datensätzen entsprechen, werden unter Verwendung von Open-Source-Codecs wie GZIP, BZIP und Snappy komprimiert, um die Speicherkosten und die Lesezeit für Komponenten in den Verarbeitungs- und Verbrauchsschichten zu reduzieren. Datasets werden in der Regel in Open-Source-Spaltenformaten wie Parquet und ORC gespeichert, um die gelesene Datenmenge weiter zu reduzieren, wenn die Verarbeitungs- und Verbrauchsschichtkomponenten nur eine Teilmenge von Spalten abfragen. Amazon S3 bietet eine Reihe von Speicherklassen, die für verschiedene Anwendungsfälle entwickelt wurden. Die intelligente Speicherklasse Amazon S3 wurde entwickelt, um die Kosten zu optimieren, indem Daten automatisch auf die kostengünstigste Zugriffsebene verschoben werden, ohne dass die Leistung beeinträchtigt oder der Betriebsaufwand beeinträchtigt wird.

Amazon Redshift bietet Data Warehouse-Speicher im Petabyte-Bereich für hochstrukturierte Daten, die normalerweise in dimensionale oder denormalisierte Schemata modelliert werden. Auf Amazon Redshift werden Daten in hochkomprimiertem Spaltenformat gespeichert und verteilt auf einem Cluster von Hochleistungsknoten gespeichert. Jeder Knoten bietet bis zu 64 TB hochleistungsfähigen verwalteten Speicher. Amazon Redshift ermöglicht eine hohe Datenqualität und -konsistenz durch die Durchsetzung von Schema-on-Write, ACID-Transaktionen und Workload-Isolation. Unternehmen speichern in der Regel strukturierte Daten, die hochgradig konforme, harmonisierte, vertrauenswürdige und geregelte Datensätze auf Amazon Redshift sind, um Anwendungsfälle zu bedienen, die einen sehr hohen Durchsatz, eine sehr geringe Latenz und eine hohe Parallelität erfordern. Sie können auch die inkrementell aktualisierten materialisierten Ansichten in Amazon Redshift verwenden, um die Leistung und den Durchsatz komplexer Abfragen, die von BI-Dashboards generiert werden, erheblich zu steigern.

Wenn Sie Ihr Lake House aufbauen, indem Sie Daten aus einer Vielzahl von Quellen aufnehmen, können Sie normalerweise damit beginnen, Hunderte bis Tausende von Datensätzen in Ihrem Data Lake und Data Warehouse zu hosten. Ein zentraler Datenkatalog, um Metadaten für alle Datensätze im Lake House-Speicher (das Data Warehouse sowie Data Lake) an einem einzigen Ort bereitzustellen und leicht durchsuchbar zu machen, ist entscheidend für die Self-Service-Erkennung von Daten in einem Lake House. Darüber hinaus ermöglicht die Trennung von Metadaten aus Data Lake-gehosteten Daten in ein zentrales Schema Schema-on-Read für Verarbeitungs- und Verbrauchsschichtkomponenten sowie Redshift Spectrum.

In unserer Lake House-Referenzarchitektur bietet Lake Formation den zentralen Katalog zum Speichern von Metadaten für alle im Lake House gehosteten Datensätze (ob in Amazon S3 oder Amazon Redshift gespeichert). Unternehmen speichern sowohl technische Metadaten (z. B. versionierte Tabellenschemas, Partitionierungsinformationen, physische Datenspeicherorte und Aktualisierungszeitstempel) als auch Geschäftsattribute (z. B. Dateneigentümer, Datenverwalter, Spaltengeschäftsdefinition und Spalteninformationssensitivität) aller ihrer Datensätze in Lake Formation.

Viele von Data Lakes gehostete Datasets weisen in der Regel ein sich ständig weiterentwickelndes Schema und zunehmende Datenpartitionen auf, während sich Schemata von Data Warehouse-gehosteten Datasets in einer geregelten Weise entwickeln. AWS Glue-Crawler verfolgen sich entwickelnde Schemas und neu hinzugefügte Partitionen von Daten, die in Data Lake-gehosteten Datasets sowie Data Warehouse-gehosteten Datasets gehostet werden, und fügen neue Versionen der entsprechenden Schemas im Lake Formation-Katalog hinzu. Darüber hinaus bietet Lake Formation APIs, um die Registrierung und Verwaltung von Metadaten mithilfe von benutzerdefinierten Skripts und Produkten von Drittanbietern zu ermöglichen.

Lake Formation bietet dem Data Lake-Administrator einen zentralen Ort zum Einrichten granularer Berechtigungen auf Tabellen- und Spaltenebene für Datenbanken und Tabellen, die im Data Lake gehostet werden. Nachdem Sie Lake Formation-Berechtigungen eingerichtet haben, können Benutzer und Gruppen nur über mehrere Verarbeitungs- und Verbrauchsschichtdienste wie AWS Glue, Amazon EMR, Amazon Athena und Redshift Spectrum auf autorisierte Tabellen und Spalten zugreifen.

Datenverarbeitungsschicht

Die Verarbeitungsschicht unserer Lake House-Architektur bietet mehrere speziell entwickelte Komponenten, um eine Vielzahl von Anwendungsfällen für die Datenverarbeitung zu ermöglichen. Um der einzigartigen Struktur (flach tabellarisch, hierarchisch oder unstrukturiert) und Geschwindigkeit (Batch oder Streaming) eines Datensatzes im Lake House zu entsprechen, können wir eine passende, speziell entwickelte Verarbeitungskomponente auswählen. Jede Komponente kann Daten sowohl in Amazon S3 als auch in Amazon Redshift (zusammen Lake House-Speicher) lesen und schreiben.

Wir können Verarbeitungsschichtkomponenten verwenden, um Datenverarbeitungsjobs zu erstellen, die Daten lesen und schreiben können, die sowohl im Data Warehouse als auch im Data Lake-Speicher über die folgenden Schnittstellen gespeichert sind:

  • Amazon Redshift SQL (mit Redshift Spectrum). Weitere Informationen finden Sie unter Amazon Redshift Spectrum erweitert Data Warehousing auf Exabyte – kein Laden erforderlich.
  • Apache Spark-Jobs, die Amazon EMR ausführen. Weitere Informationen finden Sie unter:
    • Spark-Dokumentationseinträge für DataFrameReader und DataFrameWriter auf GitHub

    Sie können Metadaten aus den resultierenden Datensätzen zum zentralen Lake Formation-Katalog hinzufügen, indem Sie AWS Glue-Crawler oder Lake Formation-APIs verwenden.

    Sie können speziell entwickelte Komponenten verwenden, um Datentransformationspipelines zu erstellen, die Folgendes implementieren:

    • SQL-basiertes ELT mit Amazon Redshift (mit Redshift Spectrum)
    • Big-Data-Verarbeitung mit AWS Glue oder Amazon EMR
    • Streaming-Datenverarbeitung nahezu in Echtzeit mit Amazon Kinesis. Weitere Informationen finden Sie unter:

    SQL-basiertes ELT

    Um strukturierte Daten in der Speicherschicht von Lake House zu transformieren, können Sie mithilfe der vertrauten SQL-Semantik leistungsstarke ELT-Pipelines erstellen. Diese ELT-Pipelines können die Massively Parallel Processing (MPP)-Funktion in Amazon Redshift und die Fähigkeit in Redshift Spectrum nutzen, Tausende von transienten Knoten hochzufahren, um die Verarbeitung auf Petabyte an Daten zu skalieren. Dieselben auf gespeicherten Prozeduren basierenden ELT-Pipelines in Amazon Redshift können Folgendes transformieren:

    • Flach strukturierte Daten, die von AWS DMS oder Amazon AppFlow direkt in Amazon Redshift-Staging-Tabellen geliefert werden
    • Im Data Lake gehostete Daten mit Open-Source-Dateiformaten wie JSON, Avro, Parquet und ORC

    Für Datenanreicherungsschritte können diese Pipelines SQL-Anweisungen enthalten, die interne Dimensionstabellen mit großen Faktentabellen verbinden, die im S3-Data Lake (unter Verwendung der Redshift-Spektrum-Schicht) gehostet werden. Als letzten Schritt können Datenverarbeitungs-Pipelines kuratierte, angereicherte und modellierte Daten entweder in eine interne Amazon Redshift-Tabelle oder eine in Amazon S3 gespeicherte externe Tabelle einfügen.

    Big-Data-Verarbeitung

    Für die integrierte Verarbeitung großer Mengen halbstrukturierter, unstrukturierter oder hochstrukturierter Daten, die auf der Lake House-Speicherschicht (Amazon S3 und Amazon Redshift) gehostet werden, können Sie Big-Data-Verarbeitungsjobs mit Apache Spark erstellen und auf AWS Glue oder Amazon ausführen EMR. Diese Jobs können sowohl die nativen als auch die Open-Source-Konnektoren von Spark verwenden, um auf in Amazon Redshift gespeicherte relationale Daten zuzugreifen und diese mit komplexen flachen oder hierarchisch strukturierten Daten, die in Amazon S3 gespeichert sind, zu kombinieren. Dieselben Jobs können verarbeitete Datensätze zurück in den S3-Data Lake, das Amazon Redshift-Data Warehouse oder beides in der Lake House-Speicherschicht speichern.

    AWS Glue bietet serverlose, nutzungsabhängige ETL-Funktionen, um ETL-Pipelines zu ermöglichen, die Dutzende von Terabyte an Daten verarbeiten können, ohne Server oder Cluster verwalten zu müssen. Um die ETL-Entwicklung zu beschleunigen, generiert AWS Glue automatisch ETL-Code und bietet häufig verwendete Datenstrukturen sowie ETL-Transformationen (um Daten zu validieren, zu bereinigen, zu transformieren und zu reduzieren). AWS Glue bietet die integrierte Fähigkeit, in Amazon Redshift gespeicherte Daten sowie einen S3-Data Lake zu verarbeiten. Im gleichen Job kann AWS Glue Amazon Redshift-Daten laden und verarbeiten, die im Flat-Table-Format gespeichert sind, sowie S3-Data-Lake-gehostete Datensätze, die in gängigen Open-Source-Formaten wie CSV, JSON, Parquet und Avro gespeichert sind. AWS Glue ETL-Jobs können auf gehostete Amazon Redshift- und Amazon S3-Tabellen auf einheitliche Weise referenzieren, indem sie über den gemeinsamen Lake Formation-Katalog (den AWS Glue-Crawler durch das Crawlen von Amazon S3 sowie Amazon Redshift füllen) auf sie zugreifen. AWS Glue ETL bietet Funktionen zur inkrementellen Verarbeitung partitionierter Daten. Darüber hinaus bietet AWS Glue Trigger und Workflow-Funktionen, mit denen Sie mehrstufige End-to-End-Datenverarbeitungspipelines erstellen können, die Auftragsabhängigkeiten sowie parallele Schritte umfassen.

    Sie können EMR-Cluster automatisch skalieren, um die unterschiedlichen Ressourcenanforderungen von Big-Data-Verarbeitungspipelines zu erfüllen, die bis zu Petabyte an Daten verarbeiten können. Diese Pipelines können Flotten verschiedener Amazon Elastic Compute Cloud (Amazon EC2) Spot-Instances verwenden, um hochgradig kostenoptimiert zu skalieren. Weitere Informationen zu Instanzen finden Sie unter Unterstützte Instanztypen.

    Spark-basierte Datenverarbeitungspipelines, die auf Amazon EMR ausgeführt werden, können Folgendes verwenden:

    • Die integrierten Reader und Writer von Spark für die Verarbeitung von Data Lake-gehosteten Datensätzen in einer Vielzahl von Open-Source-Formaten
    • Der Open-Source Spark-Amazon Redshift Connector zum direkten Lesen und Schreiben von Daten im Amazon Redshift Data Warehouse

    Um das Schema von Data Lake-gehosteten komplex strukturierten Datasets zu lesen, können Spark-ETL-Jobs auf Amazon EMR eine Verbindung zum Lake Formation-Katalog herstellen. Dies wird mit AWS Glue-Kompatibilität und AWS Identity and Access Management (IAM)-Richtlinien eingerichtet, die den Zugriff auf AWS Glue-Tabellen und zugrunde liegende S3-Objekte separat autorisieren. Dieselben Spark-Jobs können den Spark-Amazon Redshift-Connector verwenden, um sowohl Daten als auch Schemas von von Amazon Redshift gehosteten Datasets zu lesen. Sie können Spark und Apache Hudi verwenden, um hochperformante inkrementelle Datenverarbeitungs-Pipelines Amazon EMR zu erstellen.

    Nahezu-Echtzeit-ETL

    Um mehrere moderne Analytics-Anwendungsfälle zu ermöglichen, müssen Sie die folgenden Aktionen nahezu in Echtzeit ausführen:

    • Nehmen Sie große Mengen an Hochfrequenz- oder Streaming-Daten auf
    • Validieren, bereinigen und bereichern Sie es
    • Stellen Sie es für den Verzehr im Lake House-Lager zur Verfügung

    Sie können Pipelines erstellen, die sich leicht skalieren lassen, um große Datenmengen nahezu in Echtzeit zu verarbeiten, indem Sie eine der folgenden Optionen verwenden:

      für SQL/Flink
  • Spark-Streaming auf AWS Glue oder Amazon EMR
  • Kinesis Data Firehose integriert in AWS Lambda
  • Kinesis Data Analytics, AWS Glue und Kinesis Data Firehose ermöglichen Ihnen den Aufbau von Datenverarbeitungspipelines nahezu in Echtzeit, ohne eine Recheninfrastruktur erstellen oder verwalten zu müssen. Kinesis Data Firehose- und Kinesis Data Analytics-Pipelines skalieren elastisch, um dem Durchsatz der Quelle zu entsprechen, während Amazon EMR- und AWS Glue-basierte Spark-Streaming-Jobs durch einfaches Angeben von Skalierungsparametern innerhalb von Minuten skaliert werden können.

    Kinesis Data Analytics für Flink/SQL-basierte Streaming-Pipelines lesen normalerweise Datensätze aus Amazon Kinesis Data Streams (in der Aufnahmeschicht unserer Lake House-Architektur), wenden Transformationen darauf an und schreiben verarbeitete Daten in Kinesis Data Firehose. Spark-Streaming-Pipelines lesen normalerweise Datensätze aus Kinesis-Datenströmen (in der Aufnahmeschicht unserer Lake House-Architektur), wenden Transformationen darauf an und schreiben verarbeitete Daten in einen anderen Kinesis-Datenstrom, der mit einem Kinesis Data Firehose-Bereitstellungs-Stream verkettet ist. Der Firehose-Bereitstellungsstream kann verarbeitete Daten an Amazon S3 oder Amazon Redshift in der Lake House-Speicherschicht liefern. Um einfachere Echtzeit-Pipelines zu erstellen, die einfache, zustandslose Transformationen erfordern, können Sie Daten direkt in Kinesis Data Firehose aufnehmen und Mikrobatches eingehender Datensätze mithilfe der von Kinesis Data Firehose aufgerufenen Lambda-Funktion transformieren. Kinesis Data Firehose liefert die transformierten Mikrobatches von Datensätzen an Amazon S3 oder Amazon Redshift in der Lake House-Speicherschicht.

    Mit seiner Fähigkeit, Daten sowohl an Amazon S3 als auch an Amazon Redshift zu liefern, bietet Kinesis Data Firehose eine einheitliche Lake House-Speicherschreiberschnittstelle für ETL-Pipelines in nahezu Echtzeit in der Verarbeitungsschicht. Auf Amazon S3 kann Kinesis Data Firehose Daten in effizienten Parquet- oder ORC-Dateien speichern, die mit Open-Source-Codecs wie ZIP, GZIP und Snappy komprimiert sind.


    Konsolidierungsjob

    Der Konsolidierungsjob spielt eine entscheidende Rolle bei der Verbesserung der Leistung des Gesamtlesevorgangs von Hadoop-Daten. Es gibt mehrere Teile, die mit der Konsolidierungstechnik verbunden sind. Standardmäßig handelt es sich bei den in hdfs-Verzeichnissen geschriebenen Dateien um kleine Teildateien, und wenn zu viele Teildateien vorhanden sind, treten Leistungsprobleme beim Lesen der Daten auf. Konsolidierung ist keine besondere Funktion von Hive&mdashit ist eine Technik, mit der kleinere Dateien zu größeren Dateien zusammengeführt werden. Die Konsolidierungstechnik wird nirgendwo online behandelt, daher ist diese spezielle Technik sehr wichtig, insbesondere wenn Batch-Anwendungen die Daten lesen.

    Was ist der Konsolidierungsjob?

    Standardmäßig schreiben Ingestion/Streaming-Jobs in Hive, Verzeichnisse schreiben in kleine Teile von Dateien, und bei Anwendungen mit hohem Volumen werden diese Dateien an einem Tag je nach Volumen mehr als 100.000+ sein. Das eigentliche Problem tritt auf, wenn wir versuchen, die Daten zu lesen. Es dauert viel Zeit, manchmal mehrere Stunden, bis das Ergebnis schließlich zurückgegeben wird, oder der Job kann fehlschlagen. Angenommen, Sie haben ein Tagespartitionsverzeichnis und müssen etwa 1 Million kleine Dateien verarbeiten. Beispiel: Laufanzahl:

    Nach dem Ausführen des Konsolidierungsjobs wird die Anzahl der Dateien jetzt erheblich reduziert. Es führt alle kleinen Teildateien in große Dateien zusammen.

    Hinweis: Cluster-uri variiert von Organisation zu Organisation, es ist eine Hadoop-Cluster-URI, um eine Verbindung zu Ihrem spezifischen Cluster herzustellen.

    Wie Konsolidierungsjob hilft

    Die Konsolidierung von Dateien ist nicht nur aus Gründen der Leistung, sondern auch für die Integrität des Clusters unerlässlich. Gemäß den Richtlinien der Hadoop-Plattform sollten so viele Dateien in den Knoten liegen. Wenn Sie zu viele Dateien haben, werden zu viele Knoten gelesen und einer hohen Latenz zugeschrieben. Denken Sie daran, dass beim Lesen von Hive-Daten alle Datenknoten durchsucht werden. Wenn Sie zu viele Dateien haben, verteilt sich die Lesezeit entsprechend. Daher ist es wichtig, all diese kleinen Dateien zu größeren Dateien zusammenzuführen. Außerdem ist es notwendig, Bereinigungsroutinen zu haben, wenn nach bestimmten Tagen keine Daten benötigt werden.

    So funktioniert die Konsolidierung

    Es gibt mehrere Möglichkeiten, die Konsolidierung von Dateien durchzuführen. Es hängt hauptsächlich davon ab, wo Sie die Daten schreiben. Im Folgenden werde ich verschiedene häufige Anwendungsfälle diskutieren.

    • Schreiben von Daten mit Spark oder Nifi in Hive-Tabellen in den täglichen Partitionsordner
    • Schreiben von Daten mit Spark oder Nifi in das Hadoop-Dateisystem (HDFS)

    Hier würden in diesem Fall riesige Dateien in den Tagesordner geschrieben. Der Entwickler muss alle unten aufgeführten Optionen befolgen.

    Abbildung 3: Konsolidierungslogik

    1. Schreiben Sie ein Skript, um die Konsolidierung durchzuführen. Das Skript nimmt Parameter wie Tag und führt Hive-Auswahldaten aus denselben Partitionsdaten aus und fügt Überschreiben in dieselbe Partition ein. Wenn Hive hier Daten in dieselbe Partition neu schreibt, führt es einen Map-Reduce-Job aus und reduziert die Anzahl der Dateien.
    1. Manchmal kann das Überschreiben derselben Daten im selben Befehl zu unerwartetem Datenverlust führen, wenn der Befehl fehlschlägt. Wählen Sie in diesem Fall die Daten aus der Tagespartition aus und schreiben Sie sie in eine temporäre Partition. Wenn dies erfolgreich ist, verschieben Sie die temporären Partitionsdaten mit dem Ladebefehl in die tatsächliche Partition. Dieser Schritt ist in Abbildung 3 dargestellt.

    Von diesen beiden Optionen ist Option B besser, die für alle Anwendungsfälle geeignet und am effizientesten ist. Option B ist effizient, da kein Datenverlust auftritt, wenn ein Schritt fehlschlägt. Entwickler können ein Steuerelement schreiben und so planen, dass es am nächsten Tag gegen Mitternacht ausgeführt wird, wenn keine aktiven Benutzer Daten lesen.

    Es gibt einen Anwendungsfall, in dem der Entwickler keine Hive-Abfrage schreiben muss. Senden Sie stattdessen einen Spark-Job, wählen Sie dieselbe Partition aus und überschreiben Sie die Daten. Dies wird jedoch nur empfohlen, wenn die Anzahl der Dateien im Partitionsordner nicht sehr groß ist und Spark die Daten immer noch lesen kann, ohne die Ressourcen zu überangeben. Diese Option eignet sich für Anwendungsfälle mit geringem Volumen, und dieser zusätzliche Schritt kann die Leistung beim Lesen der Daten steigern.


    Was ist besser für Ihre Big-Data-Anwendung, SQL oder NoSQL?

    Eine der kritischen Entscheidungen, vor denen Unternehmen bei Big-Data-Projekten stehen, ist die zu verwendende Datenbank, und oft schwankt diese Entscheidung zwischen SQL und NoSQL. SQL hat die beeindruckende Erfolgsbilanz, die große installierte Basis, aber NoSQL macht beeindruckende Gewinne und hat viele Befürworter. Wir haben die Frage Experten in beiden Lagern gestellt.

    CTO von VoltDB sagt, SQL habe sich in großen Organisationen bereits verdient und Big Data sei nur eine weitere Aufgabe, die dieser treue Mitarbeiter übernehmen kann. Debatte ansehen

    Der CEO von Couchbase sagt, dass NoSQL eine praktikable Alternative ist und in der Tat für Big Data in vielerlei Hinsicht vorzuziehen ist, insbesondere wenn es um Skalierbarkeit geht. Debatte ansehen

    SQL hat sich bewährt und floriert immer noch

    Structured Query Language (SQL) ist ein bewährter Gewinner, der seit mehreren Jahrzehnten dominiert und derzeit von Big-Data-Unternehmen und -Organisationen wie Google, Facebook, Cloudera und Apache aggressiv investiert wird.

    Sobald eine Technologie so dominant wie SQL wird, werden die Gründe für ihre Vormachtstellung manchmal vergessen. SQL gewinnt aufgrund einer einzigartigen Kombination von Stärken:

    1. SQL ermöglicht eine verstärkte Interaktion mit Daten und ermöglicht, dass eine breite Palette von Fragen zu einem einzigen Datenbankdesign gestellt wird. Das ist wichtig, da Daten, die nicht interaktiv sind, im Wesentlichen nutzlos sind und vermehrte Interaktionen zu neuen Erkenntnissen, neuen Fragen und sinnvolleren zukünftigen Interaktionen führen.
    2. SQL ist standardisiert, sodass Benutzer ihr Wissen systemübergreifend anwenden können und Unterstützung für Add-Ons und Tools von Drittanbietern bietet.
    3. SQL ist skalierbar, vielseitig und bewährt und löst Probleme, die von schnellen schreiborientierten Transaktionen bis hin zu scanintensiven Tiefenanalysen reichen.
    4. SQL ist orthogonal zur Datendarstellung und -speicherung. Einige SQL-Systeme unterstützen JSON und andere strukturierte Objektformate mit besserer Leistung und mehr Funktionen als NoSQL-Implementierungen.

    Obwohl NoSQL in letzter Zeit für einiges Aufsehen gesorgt hat, gewinnt SQL weiterhin am Markt und verdient weiterhin Investitionen und Akzeptanz im gesamten Big-Data-Problembereich.

    Der Begriff „NoSQL“ ist mehrdeutig, aber für diese Diskussion verwende ich Dr. Rick Cattells NoSQL-Definition, um „Systeme zu meinen, die einfache Operationen wie Schlüssel/Wert-Speicherung oder einfache Datensätze und Indizes bereitstellen und sich auf horizontale Skalierbarkeit für diese einfachen Operationen konzentrieren. ”

    Es ist klar, dass die vielen neuen verfügbaren Datenbanken nicht alle gleich sind – und zu erkennen, wie die DNA dahinter den Problemlösern hilft und sie behindert, ist der Schlüssel zum Erfolg. Die wichtigsten Funktionen von NoSQL machen es für den Einsatz in bestimmten Problemgruppen geeigneter. Graphdatenbanken sind beispielsweise besser für Situationen geeignet, in denen Daten nach Beziehungen statt nach Zeilen oder Dokumenten organisiert sind, und spezialisierte Textsuchsysteme sollten als geeignet angesehen werden, wenn eine Echtzeitsuche bei der Eingabe von Begriffen durch Benutzer erforderlich ist.

    Hier werde ich die wichtigen Vorteile und die Unterscheidung von SQL-Systemen gegenüber einfachen Schlüssel-/Wert- und JSON-Objektspeichern herausarbeiten, die nicht über Speicherformat und Skalierbarkeit hinausgehen.

    * SQL ermöglicht Interaktion. SQL ist eine deklarative Abfragesprache. Die Benutzer geben an, was sie wollen (z. B. zeigen die Geografien der Top-Kunden im Monat März für die letzten fünf Jahre an) und die Datenbank stellt intern einen Algorithmus zusammen und extrahiert die angeforderten Ergebnisse. Im Gegensatz dazu ist die NoSQL-Programmierinnovation MapReduce eine prozedurale Abfragetechnik. MapReduce verlangt, dass der Benutzer nicht nur weiß, was er will, sondern auch, wie die Antwort zu produzieren ist.

    Dies mag nach einem uninteressanten technischen Unterschied klingen, ist aber aus zwei Gründen von entscheidender Bedeutung: Erstens sind deklarative SQL-Abfragen mit grafischen Tools und Point-and-Click-Berichtserstellern viel einfacher zu erstellen. Dies öffnet die Datenbankabfrage für Analysten, Bediener, Manager und andere mit Kernkompetenzen außerhalb der Softwareprogrammierung. Zweitens ermöglicht das Abstrahieren von Was und Wie der Datenbank-Engine, interne Informationen zu verwenden, um den effizientesten Algorithmus auszuwählen. Ändern Sie das physische Layout oder die Indizierung der Datenbank und ein optimaler Algorithmus wird trotzdem berechnet. In einem prozeduralen System muss ein Programmierer das ursprüngliche Wie überdenken und neu programmieren. Das ist teuer und fehleranfällig.

    Der Markt versteht diesen entscheidenden Unterschied. Im Jahr 2010 kündigte Google eine SQL-Implementierung zur Ergänzung von MapReduce an, die von der internen Nachfrage der Benutzer angetrieben wurde. Vor kurzem hat Facebook Presto veröffentlicht, eine SQL-Implementierung, um seine Petabyte-HDFS-Cluster abzufragen. Laut Facebook: „Als unser Lager auf Petabyte-Größe wuchs und sich unsere Anforderungen weiterentwickelten, wurde klar, dass wir ein interaktives System benötigten, das für eine geringe Abfragelatenz optimiert ist.“ Darüber hinaus erstellt Cloudera Impala, eine weitere SQL-Implementierung auf HDFS. All dies sind Fortschritte gegenüber Hive, einer langjährigen und weit verbreiteten SQL-Fassade für Hadoop.

    * SQL ist standardisiert. Obwohl sich Anbieter manchmal spezialisieren und Dialekte in ihre SQL-Schnittstelle einführen, ist der Kern von SQL gut standardisiert und zusätzliche Spezifikationen wie ODBC und JDBC bieten allgemein verfügbare stabile Schnittstellen zu SQL-Speichern. Dies ermöglicht ein Ökosystem von Management- und Operator-Tools, das beim Entwerfen, Überwachen, Prüfen, Erkunden und Erstellen von Anwendungen auf SQL-Systemen hilft.

    SQL-Benutzer und Programmierer können daher ihr API- und UI-Wissen über mehrere Backend-Systeme hinweg wiederverwenden, wodurch die Anwendungsentwicklungszeit verkürzt wird. Die Standardisierung ermöglicht auch deklarative Tools zum Extrahieren, Transformieren, Laden (ETL) von Drittanbietern, die es Unternehmen ermöglichen, Daten zwischen Datenbanken und zwischen Systemen auszutauschen.

    * SQL-Skalen. Es ist absolut falsch anzunehmen, dass SQL geopfert werden muss, um Skalierbarkeit zu erlangen. Wie bereits erwähnt, hat Facebook eine SQL-Schnittstelle erstellt, um Petabyte an Daten abzufragen. SQL ist ebenso effektiv bei der Ausführung blitzschneller ACID-Transaktionen. Die Abstraktion, die SQL von der Speicherung und Indizierung von Daten bietet, ermöglicht eine einheitliche Verwendung über Probleme und Datensatzgrößen hinweg, sodass SQL effizient in geclusterten replizierten Datenspeichern ausgeführt werden kann. Die Verwendung von SQL als Schnittstelle ist unabhängig vom Aufbau eines Cloud-, Skalierungs- oder HA-Systems, und es gibt nichts in SQL, das Fehlertoleranz, Hochverfügbarkeit und Replikation verbietet oder einschränkt. Tatsächlich unterstützen alle modernen SQL-Systeme Cloud-freundliche horizontale Skalierbarkeit, Replikation und Fehlertoleranz.

    * SQL unterstützt JSON. Vor einigen Jahren haben viele SQL-Systeme die Unterstützung von XML-Dokumenten hinzugefügt. Jetzt, da JSON zu einem beliebten Datenaustauschformat wird, fügen SQL-Anbieter auch die Unterstützung des JSON-Typs hinzu. Angesichts der heutigen agilen Programmierprozesse und der Verfügbarkeitsanforderungen einer webexponierten Infrastruktur gibt es gute Argumente für die Unterstützung strukturierter Datentypen. Oracle 12c, PostgreSQL 9.2, VoltDB und andere unterstützen JSON – oft mit Leistungs-Benchmarks, die „nativen“ JSON-NoSQL-Speichern überlegen sind.

    SQL wird weiterhin Marktanteile gewinnen und wird weiterhin neue Investitionen und Implementierungen verzeichnen. NoSQL-Datenbanken, die proprietäre Abfragesprachen oder einfache Key-Value-Semantik ohne tiefere technische Differenzierung bieten, befinden sich in einer schwierigen Position. Moderne SQL-Systeme entsprechen oder übertreffen ihre Skalierbarkeit und unterstützen gleichzeitig eine umfassendere Abfragesemantik, etablierte und geschulte Benutzerbasen, eine breite Ökosystemintegration und eine tiefgreifende Unternehmensakzeptanz.

    Betts ist CTO bei VoltDB und einer der ersten Entwickler des kommerziellen Produkts von VoltDB. VoltDB bietet die schnellste Betriebsdatenbank der Welt und bietet Hochgeschwindigkeits-Datenverarbeitung und Echtzeit-In-Memory-Analysen in einem einzigen Datenbanksystem. VoltDB ist eine relationale Datenbank, die Unternehmen eine beispiellose Möglichkeit bietet, ultraschnelle Anwendungen zu erstellen, die Erkenntnisse aus riesigen Mengen dynamischer Daten gewinnen und eine Entscheidungsfindung in Echtzeit ermöglichen. Unternehmen in Märkten wie Telekommunikation, Finanzdienstleistungen, Netzwerk, Energie und E-Commerce verwenden VoltDB, um den Geschäftswert von Daten bei jeder Interaktion zu maximieren. VoltDB ist ein Privatunternehmen mit Niederlassungen in Bedford, Massachusetts und Santa Clara, Kalifornien.

    NoSQL ist besser für Ihre Big-Data-Anwendungen

    NoSQL wird zunehmend als praktikable Alternative zu relationalen Datenbanken angesehen, insbesondere für Big-Data-Anwendungen, da immer mehr Unternehmen erkennen, dass ein skalierbarer Betrieb auf Clustern von Standard-Commodity-Servern besser zu erreichen ist. Darüber hinaus ist ein schemaloses Datenmodell oft besser für die Vielfalt und Art der heute erfassten und verarbeiteten Daten.

    Wenn wir im NoSQL-Bereich über Big Data sprechen, beziehen wir uns auf Lese- und Schreibvorgänge aus operativen Datenbanken – also auf die Online-Transaktionsverarbeitung, mit der Menschen täglich interagieren und an denen sie täglich teilnehmen (z. B. wenn die Big Data zum Buchen benötigt werden) einen Flug online). Operative Datenbanken sind nicht zu verwechseln mit analytischen Datenbanken, die in der Regel große Datenmengen betrachten und daraus Erkenntnisse gewinnen (z. B. über Big Data, um herauszufinden, wie viele Personen an einem bestimmten Tag einen Flug buchen).

    Während die Big Data operativer Datenbanken möglicherweise nicht so analytisch erscheinen, wenn man an der Oberfläche kratzt, hosten operative Datenbanken im Allgemeinen große Datensätze mit einer sehr großen Anzahl von Benutzern, die ständig auf die Daten zugreifen, um Transaktionen in Echtzeit auszuführen. Der Umfang, in dem Datenbanken betrieben werden müssen, um Big Data zu verwalten, erklärt die kritische Natur von NoSQL und damit, warum NoSQL der Schlüssel für Big Data-Anwendungen ist.

    NoSQL ist entscheidend für die Skalierbarkeit

    Jedes Mal, wenn die Technologiebranche einen grundlegenden Wandel bei der Hardwareentwicklung erlebt, gibt es einen Wendepunkt. Im Datenbankbereich hat die Verschiebung von Scale-up- zu Scale-out-Architekturen die NoSQL-Bewegung angeheizt. Relationale Datenbanken, einschließlich derer der Giganten Oracle und IBM, können skaliert werden. Das heißt, sie sind zentralisierte Technologien, die alles gemeinsam nutzen und nur durch das Hinzufügen teurer Hardware skalieren können.

    Umgekehrt wurden NoSQL-Datenbanken von Grund auf für verteilte Scale-out-Technologien entwickelt. Sie verwenden eine verteilte Gruppe von Knoten, die als Cluster bezeichnet werden, um eine hochelastische Skalierungsfunktion bereitzustellen, mit der Benutzer Knoten hinzufügen können, um die Last im laufenden Betrieb zu verarbeiten.

    Ein verteilter Scale-out-Ansatz ist in der Regel auch billiger als die Scale-up-Alternative. Dies ist eine Folge davon, dass große, komplexe und fehlertolerante Server teuer in Design, Aufbau und Support sind. Auch die Lizenzkosten für kommerzielle relationale Datenbanken können unerschwinglich sein, da der Preis für einen einzelnen Server gedacht ist. NoSQL-Datenbanken hingegen sind im Allgemeinen Open Source, haben einen Preis für den Betrieb auf einem Servercluster und sind relativ kostengünstig.

    NoSQL ist entscheidend für Flexibilität

    Relationale und NoSQL-Datenmodelle sind sehr unterschiedlich. Das relationale Modell nimmt Daten und trennt sie in viele miteinander verbundene Tabellen, die Zeilen und Spalten enthalten. Diese Tabellen referenzieren aufeinander über Fremdschlüssel, die ebenfalls in Spalten gespeichert sind.

    Wenn ein Benutzer eine Abfrage für einen Datensatz ausführen muss, müssen die gewünschten Informationen aus vielen Tabellen – in heutigen Unternehmensanwendungen oft Hunderte – gesammelt und kombiniert werden, bevor sie der Anwendung zur Verfügung gestellt werden können. Ebenso muss beim Schreiben von Daten das Schreiben koordiniert und für viele Tabellen ausgeführt werden. Wenn Daten relativ klein sind und mit geringer Geschwindigkeit in eine Datenbank fließen, ist eine relationale Datenbank normalerweise in der Lage, die Informationen zu erfassen und zu speichern. Heutige Anwendungen basieren jedoch oft auf der Erwartung, dass riesige Datenmengen mit Geschwindigkeiten nahe der Echtzeit geschrieben (und gelesen) werden können.

    NoSQL-Datenbanken haben ein ganz anderes Modell. Im Kern sind NoSQL-Datenbanken wirklich „NoREL“ oder nicht-relational, dh sie verlassen sich nicht auf Tabellen und die Verknüpfungen zwischen Tabellen, um Informationen zu speichern und zu organisieren.Beispielsweise nimmt eine dokumentenorientierte NoSQL-Datenbank die Daten, die Sie speichern möchten, und aggregiert sie im JSON-Format zu Dokumenten. Jedes JSON-Dokument kann als Objekt betrachtet werden, das von Ihrer Anwendung verwendet wird. Ein JSON-Dokument kann alle Daten, die in einer Zeile gespeichert sind, die 25 Tabellen einer relationalen Datenbank umfasst, zu einem einzigen Dokument/Objekt zusammenfassen.

    Das Aggregieren dieser Informationen kann zu einer Duplizierung von Informationen führen, aber da die Speicherung kein Kostenproblem mehr ist, machen die daraus resultierende Flexibilität des Datenmodells, die einfache effiziente Verteilung der resultierenden Dokumente und die Verbesserungen der Lese- und Schreibleistung es zu einem einfachen Kompromiss für Web- basierte Anwendungen.

    NoSQL ist entscheidend für Big-Data-Anwendungen

    Die Erfassung und der Zugriff auf Daten durch Dritte, einschließlich Social-Media-Sites, wird immer einfacher. Persönliche Benutzerinformationen, geografische Standortdaten, benutzergenerierte Inhalte, Maschinenprotokollierungsdaten und sensorgenerierte Daten sind nur einige Beispiele für das ständig wachsende Spektrum, das erfasst wird. Unternehmen verlassen sich auch auf Big Data, um ihre geschäftskritischen Anwendungen voranzutreiben. Auf der ganzen Linie wenden sich Unternehmen NoSQL-Datenbanken zu, weil sie sich auf einzigartige Weise für diese neuen Datenklassen eignen, die heute auftauchen.


    Direktweg-INSERT

    Eine sehr effiziente Methode zum Laden von Daten in eine Tabelle ist Direktweg-INSERT. Anders als bei einem herkömmlichen INSERT werden neue Zeilen nicht Zeile für Zeile in den Datenbankpuffer-Cache übernommen, sondern direkt in neue Datenblöcke am Ende der Tabelle in die Datendateien geschrieben. Da ein Direct-Path-INSERT die Speicherplatzverwaltung umgeht, um freien Speicherplatz in den vorhandenen Blöcken wiederzuverwenden, ist es viel schneller, mehrere Zeilen in eine Zieltabelle einzufügen. Es wird dringend empfohlen, Direct-Path INSERT zum Laden großer Datensätze in eine Data Warehouse-Datenbank zu verwenden.

    Der Nachteil dieser Funktion besteht darin, dass freier Speicherplatz in vorhandenen Tabellenblöcken nicht für die neuen Daten verwendet wird. Wenn beispielsweise vorhandene Zeilen gelöscht wurden (was in einem Data Warehouse normalerweise nicht vorkommt), gehen die freien Teile im Tabellenblock verloren und können nicht für neue Zeilen wiederverwendet werden. Dies gilt auch für den letzten Block eines Direct-Path INSERT. Der freie Platz nach der letzten Zeile wird beim nächsten Direct-Path INSERT nicht mehr verwendet, da dann ein neuer Block geschrieben wird. Für ETL-Jobs, die nur sehr wenige Zeilen gleichzeitig einfügen, ist ein konventionelles INSERT die bessere Wahl. Aber für ETL-Jobs, die viele Zeilen laden, beispielsweise ein tägliches Laden in eine Faktentabelle, ist der Vorteil einer besseren Ladeleistung viel wichtiger als der (geringe) Verlust an Leerraum in den Blöcken.

    Direct-Path INSERT wird in den folgenden Situationen verwendet:

    • Wenn ein anhängen Hinweis wird einer INSERT- oder MERGE-Anweisung hinzugefügt added
    • Wenn ein append_values Hinweis wird einer PL/SQL FORALL-Anweisung hinzugefügt added
    • Wenn eine INSERT-Anweisung mit ausgeführt wird Parallele DML
    • Wenn ein CREATE TABLE AS SELECT ausgeführt wird


    INSERT /*+ anhängen */ INTO fact_sales
    WÄHLEN * von stage_sales

    Bei Direct-Path INSERT gibt es mehrere Einschränkungen, die beachtet werden müssen. Weitere Informationen finden Sie in der SQL Language Reference und im Database Administrator’s Guide der Oracle-Dokumentation.


    Effiziente Möglichkeiten zum Lesen von Tabellendaten aus einem großen Feature-Layer? - Geografisches Informationssystem

    VM-Setups für Heimlabore sind hilfreich, um Technologie zu testen und VM-Managementfähigkeiten aufzubauen. Achten Sie darauf, RAM, CPU, Netzwerkgeschwindigkeiten zu bewerten.

    Mehrstufige Builds helfen Ihnen, die Dockerfile-Größe während der Container-Vermehrung zu verwalten. Holen Sie sich den Prozess mit den notwendigen .

    Verschachtelte VMs erleichtern die Erweiterung der VM-Kapazität ohne zusätzliche Hardware. Sehen Sie sich den Prozess an, um größere Probleme zu vermeiden.

    Sie kennen Ihren Neptun nicht von Ihrer Haustür aus? Prüfen Sie, wie AWS, Microsoft und Google ihre unzähligen Cloud-Dienste nennen. Und ja, .

    Sehen Sie sich fünf beliebte Entwurfsmuster für die Entwicklung von Cloudanwendungen an und wie sie eine Reihe häufiger Herausforderungen lösen, die die IT .

    HPE ist seinem Ziel, bis 2022 hauptsächlich ein Software-as-a-Services-Unternehmen zu sein, mit neuen Services für GreenLake einen weiteren Schritt näher gekommen.

    Ein gutes Datenbankdesign ist ein Muss, um die Verarbeitungsanforderungen in SQL Server-Systemen zu erfüllen. In einem Webinar bot Berater Koen Verbeeck an.

    SQL Server-Datenbanken können auf verschiedene Weise in die Azure-Cloud verschoben werden. Hier ist, was Sie von jeder der Optionen erhalten .

    In diesem Buchauszug lernen Sie die Techniken LEFT OUTER JOIN vs. RIGHT OUTER JOIN kennen und finden verschiedene Beispiele für die Erstellung von SQL .

    Microsoft 365 bietet verschiedene Lizenzierungspläne für alle Arten von Unternehmen. Erfahren Sie mehr über die verschiedenen Abonnementpläne, die .

    Wenn eine Organisation ihre E-Mail-Server und -Profile zu Microsoft 365 migriert, kann sie mehrere verschiedene Prozesse verwenden. Sortieren.

    Das neueste Chrome-Update ändert die Art und Weise, wie der Browser mit Tabs umgeht, um den CPU- und Stromverbrauch zu reduzieren. Chrome 91 lässt auch Menschen zu.

    Azure Virtual Desktop ermöglicht es Benutzern, sich mit ihren Azure Active Directory-Anmeldeinformationen bei jedem Gerät anzumelden. Microsoft plant mehr.

    WVD bringt mit einigen Einschränkungen deutliche Vorteile. Finden Sie heraus, wie WVD im Vergleich zum Markt abschneidet.

    Unternehmen, die WVD und Azure bereitstellen möchten, sollten über die Preisschätzungen von Microsoft hinausgehen und die Gesamtkosten von .


    Keras: Feature-Extraktion bei großen Datasets mit Deep Learning

    2020-06-04 Aktualisierung: Dieser Blogbeitrag ist jetzt TensorFlow 2+ kompatibel!

    Im ersten Teil dieses Tutorials besprechen wir kurz das Konzept der Behandlung von Netzwerken als Feature-Extraktoren (das im Tutorial der letzten Woche ausführlicher behandelt wurde).

    Von dort aus untersuchen wir das Szenario, in dem Ihr extrahiertes Feature-Dataset zu groß ist, um in den Arbeitsspeicher zu passen — in diesen Situationen müssen wir anwenden inkrementelles Lernen zu unserem Datensatz.

    Als Nächstes implementieren wir Python-Quellcode, der verwendet werden kann für:

    Netzwerke als Feature Extractor

    Abbildung 1: Links: Die ursprüngliche VGG16-Netzwerkarchitektur, die Wahrscheinlichkeiten für jedes der 1.000 ImageNet-Klassenlabels ausgibt. Richtig: Entfernen der FC-Schichten aus VGG16 und stattdessen Rückgabe der letzten POOL-Schicht. Diese Ausgabe dient als unsere extrahierten Funktionen.

    Beim Aufführen Extraktion von Deep-Learning-Features, behandeln wir das vortrainierte Netzwerk als einen willkürlichen Merkmalsextrahierer, der es dem Eingabebild ermöglicht, sich vorwärts auszubreiten, an einer vordefinierten Ebene zu stoppen und die Ausgänge dieser Schicht als unsere Features.

    Dabei können wir immer noch die robusten, diskriminierenden Merkmale nutzen, die das CNN gelernt hat. Wir können sie auch verwenden, um Klassen zu erkennen, für die das CNN nie trainiert wurde!

    Ein Beispiel für die Merkmalsextraktion über Deep Learning finden Sie in Abbildung 1 oben in diesem Abschnitt.

    Hier nehmen wir das VGG16-Netzwerk, lassen ein Bild sich zur letzten Max-Pooling-Schicht (vor den vollständig verbundenen Schichten) ausbreiten und extrahieren die Aktivierungen auf dieser Schicht.

    Die Ausgabe der Max-Pooling-Schicht hat eine Volumenform von 7 x 7 x 512 Zoll die wir zu einem Merkmalsvektor von abflachen 21.055-dim.

    Bei einem Datensatz von n Bilder können wir den Vorgang der Merkmalsextraktion für alle Bilder im Datensatz wiederholen, sodass wir insgesamt N x 21.055-dim Merkmalsvektoren.

    Angesichts dieser Funktionen können wir ein „Standard“-Modell für maschinelles Lernen (wie Logistische Regression oder Lineare SVM) auf diesen Funktionen trainieren.

    Notiz: Feature-Extraktion über Deep Learning wurde behandelt in viel mehr Details im Beitrag von letzter Woche — lesen Sie nach, wenn Sie Fragen zur Funktionsweise der Feature-Extraktion haben.

    Was ist, wenn Ihre extrahierten Features zu groß sind, um in den Speicher zu passen?

    Feature-Extraktion über Deep Learning ist in Ordnung und gut…

    …aber was passiert, wenn Ihre extrahierten Features zu groß sind, um in den Speicher zu passen?

    Denken Sie daran, dass (die meisten Implementierungen von, einschließlich scikit-learn) logistische Regression und SVMs erfordern, dass Ihr gesamter Datensatz zugänglich ist alles auf einmal für das Training (d. h. der gesamte Datensatz muss in den RAM passen).

    Das ist großartig, aber wenn Sie 50 GB, 100 GB oder sogar 1 TB extrahierter Funktionen haben, was werden Sie tun?

    Die meisten Leute haben keinen Zugriff auf Maschinen mit so viel Speicher.

    Lösung: Inkrementelles Lernen (d. h. „Online-Lernen“)

    Figur 2: Der Prozess des inkrementellen Lernens spielt eine Rolle bei der Extraktion von Deep-Learning-Features bei großen Datensätzen.

    Wenn Ihr gesamter Datensatz nicht in den Speicher passt, müssen Sie Folgendes ausführen: inkrementelles Lernen (manchmal auch „Online-Lernen“ genannt).

    Inkrementelles Lernen ermöglicht es Ihnen, Ihr Modell zu trainieren kleine Teilmengen der Daten namens Chargen.

    Durch inkrementelles Lernen wird der Trainingsprozess:

    1. Laden Sie eine kleine Menge von Daten aus dem Datensatz
    2. Trainieren Sie das Modell auf der Charge
    3. Wiederholen Sie das Durchlaufen des Datensatzes in Stapeln und trainieren Sie dabei, bis wir Konvergenz erreichen

    Aber warte — kommt Ihnen dieser Vorgang nicht bekannt vor?

    Es ist exakt wie wir neuronale Netze trainieren.

    Neuronale Netze sind ausgezeichnete Beispiele für inkrementelle Lerner.

    Und tatsächlich, wenn Sie sich die scikit-learn-Dokumentation ansehen, werden Sie feststellen, dass die Klassifikationsmodelle für inkrementelles Lernen entweder NNs selbst sind oder direkt mit NNs verbunden sind (d. h. Perceptron und SGDClassifier ).

    Anstatt die inkrementellen Lernmodelle von scikit-learn zu verwenden, wir werden unser eigenes neuronales Netzwerk mit Keras implementieren.

    Dieses NN wird zusätzlich zu unseren extrahierten Merkmalen aus dem CNN trainiert.

    Unser Trainingsprozess wird jetzt:

    1. Extrahieren Sie alle Merkmale aus unserem Bilddatensatz mit einem CNN.
    2. Zug a einfach, Feedforward neuronales Netz über den extrahierten Merkmalen.

    Konfigurieren Ihrer Entwicklungsumgebung

    Um Ihr System für dieses Tutorial zu konfigurieren, empfehle ich zunächst, eines dieser Tutorials zu befolgen:

    Beide Tutorials helfen Ihnen, Ihr System mit der gesamten erforderlichen Software für diesen Blogbeitrag in einer praktischen virtuellen Python-Umgebung zu konfigurieren.

    Der Food-5K-Datensatz

    Figur 3: Für dieses Beispiel der Deep-Learning-Feature-Extraktion mit Keras wird der Foods-5K-Datensatz verwendet.

    Dieser Datensatz besteht aus 5.000 Bildern, die jeweils einer von zwei Klassen angehören:

    Unser Ziel ist heute:

    1. Verwenden Sie Keras-Feature-Extraktion, um Features aus dem Food-5K-Datensatz mit ResNet-50 zu extrahieren, das auf ImageNet vortrainiert wurde.
    2. Trainieren Sie ein einfaches neuronales Netzwerk zusätzlich zu diesen Funktionen, um Klassen zu erkennen, die das CNN war nie trainiert zu erkennen.

    Es ist erwähnenswert, dass der gesamte Food-5K-Datensatz nach der Merkmalsextraktion nur

    2 GB RAM, wenn alles auf einmal geladen wird — das ist nicht der Punkt.

    Der heutige Beitrag soll Ihnen zeigen, wie Sie mithilfe des inkrementellen Lernens ein Modell an den extrahierten Features trainieren.

    Auf diese Weise, unabhängig davon, ob Sie mit 1 GB von Daten oder 100 GB von Daten kennen Sie die genaue Schritte um ein Modell zusätzlich zu über Deep Learning extrahierten Funktionen zu trainieren.

    Herunterladen des Food-5K-Datensatzes

    Stellen Sie zunächst sicher, dass Sie den Quellcode für das heutige Tutorial mit dem “Downloads”Abschnitt des Blogbeitrags.

    Nachdem Sie den Quellcode heruntergeladen haben, ändern Sie das Verzeichnis in transfer-learning-keras :

    Durch meine Erfahrung, Ich habe festgestellt, dass das Herunterladen des Food-5K-Datensatzes etwas unzuverlässig ist.

    Daher habe ich dieses Tutorial mit einem Link zum herunterladbaren Food-5K-Datensatz aktualisiert, der von mir gehostet wird. Verwenden Sie den folgenden Link, um den Datensatz zuverlässig herunterzuladen:

    Nachdem der Datensatz heruntergeladen wurde, entpacken Sie ihn in den Projektordner:

    Projektstruktur

    Gehen Sie weiter und navigieren Sie zurück zum Stammverzeichnis:

    Von dort aus können wir unsere Projektstruktur mit dem Baumbefehl analysieren:

    Die Datei config.py enthält unsere Konfigurationseinstellungen in Python-Form. Unsere anderen Python-Skripte nutzen die config.

    Mit unserem build_dataset.py-Skript organisieren wir den Inhalt des Food-5K/-Verzeichnisses und geben ihn in den Datensatzordner aus.

    Von dort aus verwendet das Skript Extract_features.py Transfer Learning über die Merkmalsextraktion, um Merkmalsvektoren für jedes Bild zu berechnen. Diese Funktionen werden in eine CSV-Datei ausgegeben.

    Sowohl build_dataset.py als auch Extract_features.py wurden letzte Woche im Detail überprüft, wir werden sie heute jedoch noch einmal kurz durchgehen.

    Schließlich werden wir train.py überprüfen. In diesem Python-Skript verwenden wir inkrementelles Lernen, um ein einfaches neuronales Netzwerk an den extrahierten Funktionen zu trainieren. Dieses Skript unterscheidet sich vom Tutorial der letzten Woche und wir werden unsere Energie hier konzentrieren.

    Unsere Konfigurationsdatei

    Beginnen wir mit der Überprüfung unserer Datei config.py, in der wir unsere Konfigurationen speichern, nämlich die Pfade zu unserem Eingabe-Dataset von Bildern zusammen mit unseren Ausgabepfaden der extrahierten Features.

    Öffnen Sie die Datei config.py und fügen Sie den folgenden Code ein:

    Nehmen Sie sich die Zeit, das Skript config.py durchzulesen und achten Sie dabei auf die Kommentare.

    Die meisten Einstellungen beziehen sich auf Verzeichnis- und Dateipfade, die in den restlichen Skripten verwendet werden.

    Eine vollständige Überprüfung der Konfiguration finden Sie im Beitrag von letzter Woche.

    Aufbau des Bilddatensatzes

    Immer wenn ich maschinelles Lernen mit einem Datensatz durchführe (und insbesondere Keras/Deep Learning), bevorzuge ich meinen Datensatz im Format von:

    Durch die Beibehaltung dieser Verzeichnisstruktur wird nicht nur unser Datensatz auf der Festplatte organisiert aber Auch ermöglicht es uns, die flow_from_directory-Funktion von Keras zu verwenden, wenn wir später in dieser Reihe von Tutorials zur Feinabstimmung kommen.

    Seit dem Food-5K-Datensatz bietet vorgefertigte Datensplits unsere endgültige Verzeichnisstruktur hat die Form:

    Auch dieser Schritt ist nicht immer notwendig, aber er ist eine bewährte Methode (meiner Meinung nach) und eine, die ich Ihnen vorschlage.

    Zumindest wird es Ihnen Erfahrung beim Schreiben von Python-Code geben, um Bilder auf der Festplatte zu organisieren.

    Lassen Sie uns jetzt die Datei build_dataset.py verwenden, um unsere Verzeichnisstruktur zu erstellen:

    Nach dem Importieren unserer Pakete auf Linien 2-5, fahren wir mit der Schleife über die Trainings-, Test- und Validierungsaufteilungen (Linie 8).

    Wir erstellen unsere Split + Class Label-Verzeichnisstruktur (siehe oben) und füllen dann die Verzeichnisse mit den Food-5K-Bildern. Das Ergebnis sind organisierte Daten, die wir zum Extrahieren von Merkmalen verwenden können.

    Lassen Sie uns das Skript ausführen und unsere Verzeichnisstruktur noch einmal überprüfen.

    Du kannst den ... benutzen “Downloads” Abschnitt dieses Tutorials, um den Quellcode von dort herunterzuladen —, öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus:

    Danach stoßen Sie auf die folgende Verzeichnisstruktur:

    Beachten Sie, dass unser dataset/-Verzeichnis jetzt gefüllt ist. Jedes Unterverzeichnis hat dann folgendes Format:

    Mit unseren organisierten Daten sind wir bereit, mit der Feature-Extraktion überzugehen.

    Verwenden von Keras für die Extraktion von Deep-Learning-Features

    Nachdem wir nun unsere Dataset-Verzeichnisstruktur für das Projekt erstellt haben, können wir:

    1. Verwenden Sie Keras, um Features über Deep Learning aus jedem Bild im Dataset zu extrahieren.
    2. Schreiben Sie die Klassenlabels + extrahierten Features im CSV-Format auf die Festplatte.

    Um diese Aufgaben zu erfüllen, müssen wir die Datei extract_features.py implementieren.

    Diese Datei wurde im Beitrag der letzten Woche ausführlich behandelt, daher werden wir das Skript hier nur der Vollständigkeit halber kurz überprüfen:

    Auf Linie 16, ResNet wird geladen, während der Kopf ausgeschlossen wird. Vortrainierte ImageNet-Gewichte werden ebenfalls in das Netzwerk geladen. Mit diesem vortrainierten, Headless-Netzwerk ist jetzt die Merkmalsextraktion über Transfer-Learning möglich.

    Von dort aus fahren wir mit der Schleife über die Datenaufteilungen fort Linie 20.

    Im Inneren greifen wir alle imagePaths für den jeweiligen Split und passen unseren Label-Encoder (Linien 23-34).

    Eine CSV-Datei wird zum Schreiben geöffnet (Linien 37-39), damit wir unsere Klassenlabels und extrahierten Features auf die Festplatte schreiben können.

    Nachdem unsere Initialisierungen nun alle eingestellt sind, können wir damit beginnen, Bilder in Stapeln zu durchlaufen:

    Jedes Bild im Stapel wird geladen und vorverarbeitet. Von dort wird es an batchImages angehängt.

    Wir senden jetzt den Batch über ResNet, um Funktionen zu extrahieren:

    Die Merkmalsextraktion für den Stapel erfolgt am Linie 72. Mit ResNet hat unsere Ausgabeschicht eine Volume-Größe von 7 x 7 x 2.048. Wir behandeln die Ausgabe als Merkmalsvektor und reduzieren sie einfach in eine Liste von 7 x 7 x 2.048 = 100.352-dim (Linie 73).

    Der Stapel von Merkmalsvektoren wird dann in eine CSV-Datei ausgegeben, wobei der erste Eintrag jeder Zeile die Klassenbezeichnung ist und die restlichen Werte das Merkmal vec bilden.

    Wir wiederholen diesen Vorgang für alle Stapel in jedem Split, bis wir fertig sind. Schließlich wird unser Label-Encoder auf die Festplatte gedumpt.

    Eine ausführlichere, zeilenweise Überprüfung finden Sie im Tutorial von letzter Woche.

    Um Funktionen aus unserem Datensatz zu extrahieren, stellen Sie sicher, dass Sie die “Downloads” Abschnitt des Handbuchs, um den Quellcode für diesen Beitrag herunterzuladen.

    Öffnen Sie dort ein Terminal und führen Sie den folgenden Befehl aus:

    Auf einer NVIDIA K80 GPU dauerte der gesamte Feature-Extraktionsprozess 5m11s.

    Sie können Extract_features.py auch auf einer CPU ausführen, aber es dauert viel länger.

    Nachdem die Feature-Extraktion abgeschlossen ist, sollten Sie drei CSV-Dateien in Ihrem Ausgabeverzeichnis haben, jeweils eine für jede unserer Datenaufteilungen:

    Implementieren des Trainingsskripts für inkrementelles Lernen

    Endlich sind wir jetzt einsatzbereit inkrementelles Lernen Transfer Learning mittels Merkmalsextraktion auf große Datensätze anzuwenden.

    Das Python-Skript, das wir in diesem Abschnitt implementieren, ist verantwortlich für:

    1. Konstruieren der einfachen Feedforward-NN-Architektur.
    2. Implementieren eines CSV-Datengenerators, der verwendet wird, um Stapel von Labels + Feature-Vektoren an das NN zu liefern.
    3. Trainieren des einfachen NN mit dem Datengenerator.
    4. Evaluierung des Feature Extractors.

    Öffnen Sie das train.py-Skript und legen wir los:

    Auf Linien 2-10 importieren Sie unsere benötigten Pakete. Unser bemerkenswertester Import ist die sequenzielle API von TensorFlow/Keras, die wir verwenden werden, um ein einfaches neuronales Feedforward-Netzwerk zu erstellen.

    Vor einigen Monaten habe ich ein Tutorial über die Implementierung benutzerdefinierter Keras-Datengeneratoren geschrieben, und genauer gesagt, Daten aus einer CSV-Datei zu erhalten, um ein neuronales Netzwerk mit Keras zu trainieren.

    Damals stellte ich fest, dass die Leser in Bezug auf praktische Anwendungen, bei denen Sie einen solchen Generator verwenden würden, etwas verwirrt waren — heute ist ein großartiges Beispiel für eine solche praktische Anwendung.

    Denken Sie auch hier daran, dass wir davon ausgehen, dass die gesamte CSV-Datei der extrahierten Funktionen dies tut nicht ins Gedächtnis passen. Daher benötigen wir einen benutzerdefinierten Keras-Generator, um Stapel von Etiketten + Daten an das Netzwerk zu liefern, damit es trainiert werden kann.

    Implementieren wir jetzt den Generator:

    Unser csv_feature_generator akzeptiert vier Parameter:

    • inputPath : Der Pfad zu unserer CSV-Eingabedatei, die die extrahierten Features enthält.
    • bs : Die Batchgröße (oder Länge) jedes Datenblocks.
    • numClasses : Ein ganzzahliger Wert, der die Anzahl der Klassen in unseren Daten darstellt.
    • Modus : Ob wir trainieren oder evaluieren/testen.

    Auf Linie 14, öffnen wir unsere CSV-Datei zum Lesen.

    Beginnend am Linie 17, durchlaufen wir eine Endlosschleife, beginnend mit der Initialisierung unserer Daten und Labels. (Linien 19 und 20).

    Von dort aus machen wir eine Schleife, bis die Längendaten der Batchgröße entsprechen, beginnend am Linie 23.

    Wir fahren fort, indem wir eine Zeile aus der CSV-Datei (Linie 25). Sobald wir die Zeile haben, werden wir fortfahren und sie verarbeiten:

    Wenn die Zeile leer ist, werden wir am Anfang der Datei neu starten (Linien 29-32). Und wenn wir uns im Evaluierungsmodus befinden, unterbrechen wir unsere Schleife und stellen sicher, dass wir den Stapel nicht vom Anfang der Datei an füllen (Linien 38 und 39).

    Angenommen, wir machen weiter, das Label und die Features werden aus der Zeile extrahiert (Linien 42-45).

    Anschließend hängen wir den Merkmalsvektor ( features ) und das Label an die Daten- bzw. Labellisten an, bis die Listen die angegebene Batchgröße (Linien 48 und 49).

    Wenn die Charge fertig ist, Linie 52 liefert die Daten und Labels als Tupel. Pythons Schlüsselwort Yield ist entscheidend, damit unsere Funktion als Generator funktioniert.

    Lassen Sie uns fortfahren — wir haben noch ein paar Schritte, bevor wir das Modell trainieren:

    Unser Label-Encoder wird von Diskette geladen Linie 54. Anschließend leiten wir die Pfade zu den Trainings-, Validierungs- und Test-CSV-Dateien ab (Linien 58-63).

    Linien 67 und 68 behandelt das Zählen der Anzahl der Bilder, die sich in den Trainings- und Validierungssätzen befinden. Mit diesen Informationen können wir der Funktion .fit_generator mitteilen, wie viele batch_size-Schritte in jeder Epoche vorhanden sind.

    Lassen Sie uns einen Generator für jede Datenaufteilung erstellen:

    Linien 76-81 initialisieren Sie unsere CSV-Funktionsgeneratoren.

    Wir sind jetzt bereit, ein einfaches neuronales Netzwerk aufzubauen:

    Im Gegensatz zum Tutorial von letzter Woche, in dem wir ein maschinelles Lernmodell der logistischen Regression verwendet haben, werden wir heute ein einfaches neuronales Netzwerk für die Klassifizierung erstellen.

    Linien 84-87 Definieren Sie eine einfache 100352-256-16-2-Feedforward-Neuralnetzwerkarchitektur mit Keras.

    Wie komme ich auf die Werte von 256 und 16 für die beiden versteckten Schichten?

    Eine gute Faustregel ist, die Quadratwurzel der vorherigen Anzahl von Knoten in der Schicht zu ziehen und dann die nächste Potenz von 2 zu finden.

    In diesem Fall ist die nächste Potenz von 2 zu 100352 256 . Die Quadratwurzel von 256 ist dann 16 , was uns unsere Architekturdefinition gibt.

    Lassen Sie uns weitermachen und unser Modell kompilieren:

    Wir kompilieren unser Modell unter Verwendung des stochastischen Gradientenabstiegs (SGD) mit einer anfänglichen Lernrate von 1e-3 (die über 25 Epochen abklingt).

    Wir verwenden hier "binary_crossentropy" für unsere Verlustfunktion da wir nur zwei klassen haben. Wenn Sie mehr als 2 Klassen haben, sollten Sie "categorical_crossentropy" verwenden.

    Nachdem unser Modell erstellt wurde, können wir jetzt trainieren und evaluieren:

    2020-06-04 Aktualisierung: Früher erforderte TensorFlow/Keras die Verwendung einer Methode namens .fit_generator, um eine Datenerweiterung durchzuführen. Jetzt kann die .fit-Methode auch Datenerweiterungen verarbeiten, was zu einem konsistenteren Code führt. Dies gilt auch für die Migration von .predict_generator nach .predict . Lesen Sie unbedingt meine Artikel über fit und fit_generator sowie Datenerweiterung.

    Linien 96-101 Passen Sie unser Modell mit unseren Trainings- und Validierungsgeneratoren ( trainGen und valGen ) an. Die Verwendung von Generatoren mit unserem Modell ermöglicht inkrementelles Lernen.

    Durch inkrementelles Lernen müssen wir nicht mehr alle unsere Daten gleichzeitig in den Speicher laden. Stattdessen fließen Datenmengen durch unser Netzwerk, was die Arbeit mit riesigen Datensätzen erleichtert.

    Natürlich sind CSV-Daten nicht gerade eine effiziente Raumnutzung und auch nicht schnell. Innen Deep Learning für Computer Vision mit Python, unterrichte ich, wie man HDF5 für die Speicherung effizienter nutzt.

    Die Evaluierung des Modells erfolgt am Linien 107-109, wobei testGen unsere Feature-Vektoren in Batches generiert. Im Terminal wird dann ein Klassifizierungsbericht gedruckt (Linien 110 und 111).

    Ergebnisse der Keras-Feature-Extraktion

    Endlich sind wir bereit, unser einfaches NN mit den extrahierten Funktionen von ResNet zu trainieren!

    Stellen Sie sicher, dass Sie die “Downloads” Abschnitt dieses Tutorials, um den Quellcode herunterzuladen.

    Öffnen Sie dort ein Terminal und führen Sie den folgenden Befehl aus:

    Das Training auf einer NVIDIA K80 dauerte ungefähr

    30m. Sie könnten auch auf einer CPU trainieren, aber es dauert erheblich länger.

    Und wie unsere Ergebnisse zeigen, sind wir in der Lage,

    99% Genauigkeit auf dem Food-5K-Datensatz, obwohl ResNet-50 noch nie auf Food/Non-Food-Kurse geschult!

    Wie Sie sehen, ist das Transferlernen eine sehr leistungsfähige Technik, die es Ihnen ermöglicht, die aus CNNs extrahierten Merkmale zu verwenden und Klassen zu erkennen, für die sie nicht trainiert wurden.

    Später in dieser Reihe von Tutorials zum Transferlernen mit Keras und Deep Learning zeige ich Ihnen, wie Sie die Feinabstimmung durchführen, eine weitere Methode des Transferlernens.

    Möchten Sie mehr über Online-/Inkrementelles Lernen erfahren?

    Figur 4: Creme ist eine speziell auf inkrementelles Lernen zugeschnittene Bibliothek. Die API ähnelt der von scikit-learn, wodurch Sie sich wie zu Hause fühlen werden, während Sie sie an großen Datensätzen einsetzen, in denen sie vorhanden sindcrementales Lernen ist erforderlich.

    Neuronale Netze und Deep Learning sind eine Form des inkrementellen Lernens – wir können solche Netze stichproben- oder stapelweise trainieren.

    Jedoch, nur weil wir es können Anwenden von neuronalen Netzen auf ein Problem heißt nicht, dass wir.

    Stattdessen müssen wir das richtige Werkzeug für die Arbeit mitbringen. Nur weil Sie einen Hammer in der Hand haben, heißt das nicht, dass Sie damit eine Schraube einschlagen würden.

    Inkrementelle Lernalgorithmen umfassen eine Reihe von Techniken, die verwendet werden, um Modelle inkrementell zu trainieren.

    Wir verwenden oft inkrementelles Lernen, wenn ein Datensatz zu groß ist, um in den Speicher zu passen.

    Die scikit-learn-Bibliothek enthält jedoch eine kleine Handvoll Online-Lernalgorithmen:

    1. Es behandelt inkrementelles Lernen nicht als Bürger erster Klasse.
    2. Die Implementierungen sind umständlich zu verwenden.

    Geben Sie die Creme-Bibliothek - eine Bibliothek ausschließlich gewidmet In creme ntales Lernen mit Python.

    Ich habe meine erste Erfahrung mit Creme wirklich genossen und die von Scikit-Learn inspirierte API gefunden sehr Einfach zu verwenden.

    Was kommt als nächstes? Ich empfehle die PyImageSearch-Universität.

    Ich glaube fest daran, dass du es schaffen könntest, wenn du den richtigen Lehrer hättest Meister Computervision und Deep Learning.

    Glauben Sie, dass das Erlernen von Computer Vision und Deep Learning zeitaufwändig, überwältigend und kompliziert sein muss? Oder muss es komplexe Mathematik und Gleichungen beinhalten? Oder erfordert ein Studium der Informatik?

    Alles, was Sie brauchen, um Computer Vision und Deep Learning zu beherrschen, ist, dass Ihnen jemand die Dinge erklärt in einfach, intuitiv Bedingungen. Und genau das tue ich. Meine Mission ist es, die Bildung zu verändern und wie komplexe Themen der Künstlichen Intelligenz gelehrt werden.

    Wenn Sie es ernst meinen mit dem Erlernen von Computer Vision, sollte Ihre nächste Station die PyImageSearch University sein, der derzeit umfassendste Online-Kurs für Computer Vision, Deep Learning und OpenCV. Hier erfährst du, wie es geht erfolgreich und selbstbewusst wenden Sie Computer Vision auf Ihre Arbeit, Forschung und Projekte an. Begleiten Sie mich in der Beherrschung der Computer Vision.

    In der PyImageSearch University finden Sie:

    • &prüfen 23 Kurse zu wesentlichen Themen zu Computer Vision, Deep Learning und OpenCV
    • & 23 Abschlusszertifikate prüfen
    • &prüfen 35h 14m On-Demand-Video
    • &prüfen Brandneue Kurse veröffentlicht jeden Monat, um sicherzustellen, dass Sie mit den neuesten Techniken Schritt halten können
    • &prüfen Vorkonfigurierte Jupyter-Notebooks in Google Colab
    • &check Alle Codebeispiele in Ihrem Webbrowser ausführen — funktioniert unter Windows, macOS und Linux (keine Konfiguration der Entwicklungsumgebung erforderlich!)
    • &Zugriff auf . prüfen zentralisierte Code-Repos für alle 400+ Tutorials auf PyImageSearch
    • &prüfen Einfache Ein-Klick-Downloads für Code, Datensätze, vortrainierte Modelle usw.
    • &überprüfen Sie Zugriff auf Mobilgeräten, Laptops, Desktops usw.

    Ressourcen

    Bilder © Murray Robertson 1999-2011
    Text © The Royal Society of Chemistry 1999-2011

    Willkommen bei "Eine visuelle Interpretation der Tabelle der Elemente", der auffälligsten Version des Periodensystems im Internet. Diese Site wurde sorgfältig für Ihren Besuch vorbereitet, und wir bitten Sie, bei der Nutzung dieser Site die folgenden Bedingungen einzuhalten und ihnen zuzustimmen.

    Urheberrecht und Eigentum an den Bildern liegen bei Murray Robertson. Dem RSC wurde das alleinige und ausschließliche Recht und die Lizenz zur Herstellung, Veröffentlichung und weiteren Lizenzierung der Bilder gewährt.

    Der RSC unterhält diese Site zu Ihrer Information, Bildung, Kommunikation und persönlichen Unterhaltung. Sie können eine Kopie des auf der Site angezeigten Materials für Ihren persönlichen, nicht kommerziellen, nicht öffentlichen Gebrauch durchsuchen, herunterladen oder ausdrucken, aber Sie müssen alle Urheberrechts- und anderen Eigentumshinweise in den Materialien beibehalten. Sie dürfen die Materialien dieser Site ohne vorherige schriftliche Zustimmung des RSC nicht weiter kopieren, ändern, verteilen oder anderweitig verwenden. Die Bilder dürfen nicht auf einer Website veröffentlicht, in einer Disc-Bibliothek, einem Bildspeichermechanismus, einem Netzwerksystem oder einer ähnlichen Anordnung geteilt werden. Eine pornografische, diffamierende, verleumderische, skandalöse, betrügerische, sittenwidrige, verletzende oder anderweitig rechtswidrige Nutzung der Bilder ist selbstverständlich untersagt.

    Wenn Sie die Bilder in einer von diesen Bedingungen nicht erlaubten Weise verwenden möchten, wenden Sie sich bitte per E-Mail an die Abteilung Verlagsservice. Im Zweifelsfall fragen Sie bitte nach.

    Die kommerzielle Nutzung der Bilder wird nach der jeweiligen Nutzung berechnet, Preise auf Anfrage. In solchen Fällen bitten wir Sie, eine Visual Elements-Lizenzvereinbarung zu unterzeichnen, die auf die von Ihnen vorgeschlagene spezifische Verwendung zugeschnitten ist.

    Der RSC gibt keinerlei Zusicherungen über die Eignung der in den auf dieser Site veröffentlichten Dokumenten und zugehörigen Grafiken enthaltenen Informationen für irgendeinen Zweck ab. Alle diese Dokumente und zugehörigen Grafiken werden "wie besehen" ohne jegliche Zusicherung oder Bestätigung und Gewährleistung jeglicher Art bereitgestellt, sei es ausdrücklich oder stillschweigend, einschließlich, aber nicht beschränkt auf die stillschweigende Gewährleistung der Eignung für einen bestimmten Zweck, Nichtverletzung, Kompatibilität Sicherheit und Genauigkeit.

    In keinem Fall haftet der RSC für Schäden, einschließlich, aber nicht beschränkt auf indirekte oder Folgeschäden oder Schäden jeglicher Art, die aus der Nutzung oder dem Verlust von Nutzung, Daten oder Gewinnen resultieren, sei es aus Vertrag, Fahrlässigkeit oder anderen unerlaubten Handlungen aus oder in Verbindung mit der Nutzung des auf dieser Site verfügbaren Materials. Der RSC haftet in keinem Fall für Schäden an Ihrer Computerausrüstung oder Software, die aufgrund Ihres Zugriffs auf oder Ihrer Nutzung der Site oder Ihres Herunterladens von Materialien, Daten, Texten, Software oder Bildern von der Site entstehen können , egal ob durch einen Virus, Bug oder anderweitig verursacht.

    Wir hoffen, dass Ihnen Ihr Besuch auf dieser Site gefällt. Wir freuen uns über Ihr Feedback.


    Schau das Video: Læs hurtigere