Kurs
Ganz gleich, ob du kundenorientierte Anwendungen entwickelst oder komplexe Analysepipelines betreibst, eines ist klar: Die Art und Weise, wie du Daten speicherst und darauf zugreifst, kann über die Leistung entscheiden.
Ich habe aus erster Hand erfahren, wie viel reibungsloser Systeme laufen, wenn Daten durchdacht strukturiert sind, und genau hier kommt die Datenpartitionierung ins Spiel. Es ist eine dieser Techniken, die die Abfragegeschwindigkeit, Speichereffizienz und Skalierbarkeit drastisch verbessern kann.
In diesem Beitrag erkläre ich die Datenpartitionierung, die verschiedenen Arten und die besten Praktiken, die ich auf diesem Weg gelernt habe.
Was ist Datenpartitionierung?
Die Datenpartitionierung ist eine Technik zur Aufteilung großer Datenmengen in kleinere, überschaubare Teile, die Partitionen genannt werden. Jede Partition enthält eine Teilmenge von Daten und ist auf mehrere Knoten oder Server verteilt. Diese Partitionen können als einzelne Tabellen gespeichert, abgefragt und verwaltet werden, obwohl sie logisch zum selben Datensatz gehören.
Die Datenpartitionierung verbessert die Leistung und Skalierbarkeit der Datenbank. Die Suche nach einem Datenpunkt in der gesamten Tabelle dauert zum Beispiel länger und verbraucht mehr Ressourcen als die Suche in einer bestimmten Partition. Deshalb werden die Daten in Partitionen gespeichert.
Arten der Datenpartitionierung
Es gibt verschiedene Arten der Datenpartitionierung, jede mit einer eigenen Strategie und Vorteilen. In diesem Abschnitt gehe ich auf die gängigsten Arten ein.
Horizontale Unterteilung
Anstatt alle Daten in einer einzigen Tabelle zu speichern, werden bei der horizontalen Partitionierung die Daten in Zeilen aufgeteiltd.h. verschiedene Sätze von Zeilen werden als Partitionen gespeichert.
Alle Partitionen der horizontalen Partitionierung enthalten den gleichen Satz von Spalten, aber unterschiedliche Gruppen von Zeilen.
- Beispiel: Angenommen, du hast einen Wetterdatensatz für mehrere Staaten in drei verschiedenen Ländern. Du kannst diese Tabelle in drei Tabellen aufteilen, indem dug die Zeilen nach Ländern aufteilst.
|
Temperatur |
Staat |
Land |
Saison |
|
-30° F |
Alaska |
USA |
Winter |
|
48.2° F |
Queensland |
Australien |
Sommer |
|
100° F |
Andhra Pradesh |
Indien |
Sommer |
|
35° F |
Kalifornien |
USA |
Winter |
|
96° F |
Texas |
USA |
Sommer |
|
62° F |
Tasmanien |
Australien |
Winter |
Horizontale Unterteilung nach Ländern:
|
Temperatur |
Staat |
Land |
Saison |
|
-30° F |
Alaska |
USA |
Winter |
|
35° F |
Kalifornien |
USA |
Winter |
|
35° F |
Kalifornien |
USA |
Winter |
|
Temperatur |
Staat |
Land |
Saison |
|
48.2° F |
Queensland |
Australien |
Sommer |
|
62° F |
Tasmanien |
Australien |
Winter |
|
Temperatur |
Staat |
Land |
Saison |
|
100° F |
Andhra Pradesh |
Indien |
Sommer |
Vertikale Unterteilung
Vertikale Partitionierung teilt die Daten nach Spalten aufSo enthält jede Partition die gleiche Anzahl von Zeilen, aber weniger Spalten.
Der Partitionsschlüssel oder die Primärspalte wird in jeder Partition vorhanden sein, so dass die logische Beziehung erhalten bleibt.
Die vertikale Partitionierung ist beliebt, wenn sensible Informationen getrennt von regulären Daten gespeichert werden sollen. So können sensible Spalten in einer Partition und Standarddaten in einer anderen gespeichert werden.
Ein weiterer häufiger Anwendungsfall ist die Gruppierung von Spalten, die häufig aktualisiert werden, in einer Partition und die übrigen in einer separaten Partition.
- Beispiel: Wenn die Spalten "Telefonnummer" und "Gehalt" in der folgenden Tabelle vertraulich sind, sollten wir die Tabelleentsprechend partitionieren.
|
Emp_id |
Emp_name |
Benennung |
Emp_email |
Emp_phone |
Emp_salary |
|
z0yu9h |
Alex |
Datenwissenschaftler/in |
alex@yoho.com |
+101 890 456 |
250K |
|
f8o5pj |
Adam |
Dateningenieur |
adam@prodgy.com |
+630 789 365 |
230K |
|
z006yu |
Matt |
Datenanalytiker/in |
matt@oltk.com |
+857 342 937 |
166K |
|
a6u895 |
Elina |
Ops Ingenieur |
elina@wal.com |
+892 494 782 |
190K |
|
g68w90 |
Joseph |
Software Ingenieur |
joseph@yoho.com |
+852 603 389 |
210K |
Emp_id ist der eindeutige Bezeichner in der obigen Tabelle, also haben alle Partitionen ihn.
Teilung 1:
|
Emp_id |
Emp_name |
Benennung |
Emp_email |
|
z0yu9h |
Alex |
Datenwissenschaftler/in |
alex@yoho.com |
|
f8o5pj |
Adam |
Dateningenieur |
adam@prodgy.com |
|
z006yu |
Matt |
Datenanalytiker/in |
matt@oltk.com |
|
a6u895 |
Elina |
Ops Ingenieur |
elina@wal.com |
|
g68w90 |
Joseph |
Software Ingenieur |
joseph@yoho.com |
Teilung 2:
|
Emp_id |
Emp_phone |
Emp_salary |
|
z0yu9h |
+101 890 456 |
250K |
|
f8o5pj |
+630 789 365 |
230K |
|
z006yu |
+857 342 937 |
166K |
|
a6u895 |
+892 494 782 |
190K |
|
g68w90 |
+852 603 389 |
210K |
Bereichsaufteilung
Bei der Bereichspartitionierung werden Daten basierend auf einem Wertebereich für eine bestimmte Spalte aufgeteilt.
Normalerweise hat jede Partition eine untere und obere Grenze für die Schlüsselspalte, und ein Datensatz, der in diesen Bereich fällt, wird dieser Partition zugewiesen.
- Beispiel: Nehmen wir an, die Verkaufsdaten sind von 2021 bis 2023 verfügbar. Wir können dies nach Jahren unterteilen, so dass die Verkäufe von 2021 bis 2022 in eine Unterteilung fallen und von 2022 bis 2023 in eine andere.
|
Produkt_id |
Datum |
Gewinn |
|
z0yu9h |
2021-03-17 |
$100K |
|
f8o5pj |
2022-04-04 |
$234K |
|
z006yu |
2022-09-13 |
$789K |
|
a6u895 |
2021-07-23 |
$237K |
|
g68w90 |
2022-02-26 |
$2345K |
Teilung 1:
|
product_id |
Datum |
Gewinn |
|
z0yu9h |
2021-03-17 |
$100K |
|
a6u895 |
2021-07-23 |
$237K |
Teilung 2:
|
product_id |
Datum |
Gewinn |
|
f8o5pj |
2022-04-04 |
$234K |
|
z006yu |
2022-09-13 |
$789K |
Hash-Partitionierung
Eine Hash-Funktion wird auf den Partitionsschlüssel angewendet und die Ausgabe bestimmt, welcher Datensatz in welcher Partition gespeichert werden soll. Bei dieser Technik wird die Anzahl der Partitionen im Voraus festgelegt.
Der Rest, der sich aus der Division des Hash-Werts durch die Anzahl der Partitionen ergibt, bestimmt, in welcher Partition dieser bestimmte Datensatz gespeichert werden soll. Lass uns das an einem Beispiel sehen:
- Beispiel: Angenommen, für das Produkt mit der ID
z0yu9h,hash(‘z0yu9h’) = 101und der Anzahl der Partitionen = 4, dann ist 101%4 = 1. Dieser Datensatz wird also in der ersten Partition gespeichert.
Auf diese Weise werden Hash-Werte für die Spalte des Partitionsschlüssels geteilt durch die Anzahl der Partitionen berechnet, und das Ergebnis bestimmt die endgültige Partition.
Listenaufteilung
Das Verfahren ähnelt der Bereichspartitionierung, aber anstatt die Daten durch einen Wertebereich zu unterteilen, werden die Daten bei der Listenpartitionierung auf der Grundlage einer vordefinierten Gruppe von Werten unterteilt.
Nimm wieder die Tabelle mit den Temperaturen als Beispiel.
|
Temperatur |
Staat |
Land |
Saison |
|
30° F |
Alaska |
USA |
Winter |
|
48.2° F |
Queensland |
Australien |
Sommer |
|
100° F |
Andhra Pradesh |
Indien |
Sommer |
|
35° F |
Kalifornien |
USA |
Winter |
|
96° F |
Texas |
USA |
Sommer |
|
62° F |
Tasmanien |
Australien |
Winter |
In den obigen Daten enthält die Spalte "Saison" eine Liste von Werten [‘winter’, ‘summer’]. Die Listenaufteilung für die Saison sieht also folgendermaßen aus:
Teilung 1:
|
Temperatur |
Staat |
Land |
Saison |
|
30° F |
Alaska |
USA |
Winter |
|
35° F |
Kalifornien |
USA |
Winter |
|
62° F |
Tasmanien |
Australien |
Winter |
Teilung 2:
|
Temperatur |
Staat |
Land |
Saison |
|
48.2° F |
Queensland |
Australien |
Sommer |
|
100° F |
Andhra Pradesh |
Indien |
Sommer |
|
96° F |
Texas |
USA |
Sommer |
Zusammengesetzte Partitionierung
Eine zusammengesetzte Partition ist eine Kombination aus zwei Partitionierungstechniken. Eine Tabelle wird zunächst mit einer Strategie aufgeteilt, und jede Partition wird mit einer anderen Technik weiter aufgeteilt.
Partitionierungsstrategien werden häufig in technischen Vorstellungsgesprächen erörtert - siehe die wichtigsten DBA-Vorstellungsfragen für 2025.
Anwendungsfälle für die Datenpartitionierung
Nachdem wir nun die verschiedenen Arten von Partitionierungsstrategien bewertet haben, wollen wir untersuchen, wann eine Datenpartitionierung sinnvoll ist.
Verteilte Datenbanken
Verteilte Systeme sind Ansammlungen von Knotenpunkten, die sich physisch auf verschiedenen Servern befinden, aber über ein Netzwerk miteinander verbunden sind. Beispiele sind Apache Cassandra, Amazon DynamoDB und Google Bigtable.
Diese Systeme nutzen intern die Datenpartitionierung, um Daten zu organisieren und auf die Knotenpunkte zu verteilen.
OLAP-Operationen
OLAP stellt mehrdimensionale Daten als Würfel dar und ermöglicht es den Nutzern, Daten aus verschiedenen Blickwinkeln zu untersuchen. Obwohl diese Würfel voraggregierte Daten darstellen, sind die zugrundeliegenden Daten immer noch riesig, so dass die Abfragen durch Datenpartitionierung weiter optimiert werden müssen.
Durch die Anwendung von Cube Partitioning (eine Datenpartitionierungstechnik) werden die Daten zum Beispiel anhand bestimmter Kriterien in kleinere Würfel unterteilt. Wenn du die Daten abfragst, wird die Suche in einem bestimmten Würfel durchgeführt, indem irrelevante Würfel übersprungen werden, was die E/A-Operationen reduziert.
In ähnlicher Weise kann die Dimensionsaufteilung angewendet werden, um die Daten nach Ebene, Hierarchie oder Spalte aufzuteilen.
Log Management
Logs enthalten Informationen über die Ereignisse, Transaktionen und Vorgänge in einem System. Sie werden verwendet, um Fehler, Bugs, Edge Cases und sogar Erfolgsmeldungen zu verfolgen.
Die Log-Partitionierung beschleunigt den Debugging-Prozess und liefert dir schneller die benötigten Informationen. Wenn du zum Beispiel die Protokolle nach Zeiträumen unterteilt hast, kannst du sie leicht nach Datum, Woche, Monat oder Jahr abrufen.
Pipelines für maschinelles Lernen
In Anwendungsfällen des maschinellen Lernens werden die Daten in Trainings-, Validierungs- und Testmengen unterteilt. Dieser Ansatz stellt sicher, dass die Erkenntnisse aus der Testmenge während des Trainings nicht an das Modell weitergegeben werden, um eine Überanpassung zu vermeiden.
Und wenn die Trainingsdaten riesig sind, kann eine einzelne Maschine nicht alle Daten verarbeiten und in ein Modell einspeisen. Die Daten werden also in Stücke unterteilt und durch Datenpartitionierung in das Modell eingegeben.
Tools für die Datenpartitionierung
Die Datenpartitionierung kann sowohl in SQL- als auch in NoSQL-Datenbanken umgesetzt werden. Wir wollen sie in diesem Abschnitt besprechen.
SQL-Datenbanken
PostgreSQL
PostgreSQL bietet integrierte Unterstützung für Range-, List- und Hash-Partitionierung. Die folgende Abfrage erstellt zum Beispiel eine Partition für jedes Jahr, um effizient auf den Verkaufsgewinn und den Gesamtumsatz für jedes Geschäftsjahr zuzugreifen.
CREATE TABLE sales(
city_id int not null,
sales_year date not null,
total_sales int,
sales_profits int
) PARTITION BY RANGE (sales_year);
MySQL
MySQL unterstützt verschiedene Arten der horizontalen Partitionierung, z. B. Bereichs-, Listen-, Hash- und Schlüsselpartitionierung. Zurzeit (Version 8.4) unterstützt es keine vertikale Partitionierung.
Die folgende MySQL-Abfrage teilt die Daten der Angestellten nach ihrem Beitrittsdatum in drei Gruppen auf: p1, p2 und p3. Alle Beschäftigten, die vor dem Jahr 2000 eingetreten sind, fallen in den Bereich p1. Beschäftigte, die zwischen 2000 und 2010 eingetreten sind, fallen unter p2, und Beschäftigte, die zwischen 2010 und 2020 eingetreten sind, fallen unter p3.
CREATE TABLE employee(
firstname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
salary INT,
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020)
);
Microsoft SQL Server
SQL Server bietet Partitionierungsfunktionen durch Partitionsfunktionen und Partitionsschemata. Eine Partitionsfunktion legt fest, wie die Daten aufgeteilt werden, während das Partitionsschema die Dateigruppe bestimmt, in der die Partition gespeichert wird.
In den folgenden Abfragen:
- Funktionsname:
sales_by_year - Name der Regelung:
sales_filegroup - Dateigruppen-Namen:
fg01,fg02,fg03,fg04
Teilungsfunktion:
create partition function sales_by_year (date)
as range right for values
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);
Partitionsschema:
CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);
Hier speichern die Dateien Daten wie folgt:
fg01- Daten vor dem "2024-01-01",fg02- 2024-01-01" bis "2024-01-31fg03- 2024-02-01" bis "2024-02-29fg04- 2024-03-01' bis '2024-03-31'
Da wir range right in der Abfrage erwähnt haben, wird jedes Grenzdatum in die nächste Partition aufgenommen.
Wenn duSQL Server verwendest, führt dich dieses SQL Server-Tutorial durch die wichtigsten Konzepte und Werkzeuge für die Verwaltung partitionierter Daten. Für einen strukturierten Lernpfad führt der SQL Server Fundamentals-Track in die Kernfunktionen ein, die für den Aufbau leistungsfähigerSQL-Datenbanken benötigt werden.
NoSQL-Datenbanken
Amazon DynamoDB
DynamoDB verwaltet die Partitionierung automatisch intern. Wenn du ein Element in eine DynamoDB-Tabelle schreibst, durchläuft es einen Anfrage-Router. Der Router parst den Partitionsschlüssel und wendet eine Hash-Funktion an. Die Ausgabe der Hash-Funktion bestimmt die spezifische Partition, in der der Datensatz gespeichert werden soll.
Dieser gesamte Prozess ist in DynamoDB automatisiert, sodass sich der Nutzer nicht um die Hash-Funktion oder die Verwaltung der Partitionen kümmern muss.
Mongodb
MongoDB verteilt die Daten durch das Konzept des Sharding auf mehrere Server. Die Daten werden anhand eines Splitterschlüssels partitioniert, der sorgfältig ausgewählt werden sollte, um eine ungleichmäßige Verteilung zu vermeiden.
Normalerweise sollte der Shard-Schlüssel eine hohe Kardinalität haben und die am häufigsten verwendete Spalte in Abfragen sein. Diese MongoDB-Interviewfragen decken fast allewichtigen Themen ab, auch das Sharding.
Apache Cassandra
Cassandra Partitioner ist ein Hashing-Algorithmus, der bestimmt, welcher Knoten in einem Cluster eine bestimmte Partition speichern soll. Der Partitionsschlüssel wird durch den Algorithmus geparst, um ein Token zu erzeugen. Dieser Token wird dann mit den Token-Werten verglichen, die den Knotenpunkten zugewiesen wurden. Schließlich werden die Daten in dem Knoten gespeichert, der dem Token entspricht.
Gängige Verteilungsalgorithmen sind Murmur3Partitioner, RandomPartitioner und ByteOrderedPartitioner.
Wie wird die Datenpartitionierung umgesetzt?
Jetzt wollen wir die notwendigen Schritte besprechen, um die Datenpartitionierung richtig umzusetzen.
Schritt 1: Verstehen von Daten und Zugriffsmustern
Prüfe gründlich, wie deine Anwendung die Datenbank abfragt, auf welche Daten häufig zugegriffen wird, wie groß die Daten sind und welche Leistungsengpässe es gibt. Diese Erkenntnisse helfen dir dabei, klare Ziele für die Partitionierung zu definieren und Schlüsselspalten zu identifizieren, die häufig bei Datenoperationen verwendet werden.
Schritt 2: Wähle eine Partitionierungstechnik
Wir haben bereits über gängige Techniken berichtet, und hier erfährst du, wie du dich zwischen ihnen entscheiden kannst:
- Horizontale Unterteilung: Wenn du Millionen und Milliarden von Zeilen hast, die in einer einzigen Tabelle gespeichert werden und zu Speicherproblemen führen würden, solltest du die horizontale Partitionierung wählen. Sie speichert unterschiedliche Zeilen in verschiedenen Tabellen.
- Vertikale Unterteilung: Wenn auf eine Gruppe von Spalten häufig zugegriffen wird und andere nur gelegentlich abgefragt werden, kannst du eine vertikale Partitionierung implementieren, um die Spalten je nach Zugriffsmuster getrennt zu speichern.
- Hybrider Ansatz: Wenn du größere Datensätze hast, bei denen du die Anzahl der Zeilen reduzieren und gleichzeitig die Abfragen für eine Teilmenge von Spalten optimieren musst, solltest du einen hybriden Ansatz wählen. Sie kombiniert die Vorteile der horizontalen und vertikalen Aufteilung.
Schritt 3: Partitionen erstellen
Im Folgenden findest du eine Beispiel-SQL-Abfrage, um Partitionen mit Hash-Partitionierung zu erstellen.
CREATE TABLE employees (
emp_id INT NOT NULL,
name VARCHAR(30),
hired DATE NOT NULL DEFAULT '2024-01-01',
job_id INT,
location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;
Im obigen Code wird die Spalte "location_id" an die Hash-Funktion übergeben, und die Ausgabe bestimmt die Partition, der der Datensatz zugeordnet werden soll. Die Codezeile partitions 4 gibt die Gesamtzahl der Partitionen an, die erstellt werden sollen.
Setze ein Lesezeichen für dieses praktische SQL-Grundlagen-Spickzettelchen, damit dubei der Implementierung von Partitionen auf die grundlegende SQL-Syntax zurückgreifen kannst.
Schritt 4: Partitionen überwachen und optimieren
- Überwache deine Datenoperationen kontinuierlich und stelle sicher, dass die Partitionen aktuell und gültig sind.
- Wenn die Anwendung skaliert, musst du vielleicht weitere Partitionen hinzufügen oder einen anderen Ansatz wählen, wie z. B. eine hybride Partition, um den sich ändernden Anforderungen gerecht zu werden.
- Stelle sicher, dass die Partitionsgröße und -strategie den häufigen Operationen in der Datenbank entspricht.
- Achte darauf, dass die Daten gleichmäßig auf die Partitionen verteilt sind; andernfalls musst du sie möglicherweise neu ausbalancieren.
Herausforderungen und Überlegungen zur Datenpartitionierung
Optimierungen sind mit Kompromissen und Herausforderungen verbunden, wie alles in der Software-Welt. Hier sind die, die du in Betracht ziehen solltest:
- Schieflage der Partition: Partitionsverzerrung bedeutet, dass einige wenige Partitionen mehr Daten und Verarbeitungsarbeit erhalten, während andere oft untätig bleiben. Um dies zu vermeiden, wähle den richtigen Partitionsschlüssel und eine Strategie, die die Daten gleichmäßig auf alle Partitionen verteilt.
- Gemeinkosten für die Wartung: Wenn die Daten wachsen, musst du die bestehenden Partitionierungsstrategien neu bewerten und sicherstellen, dass sie für die aktuellen Daten relevant sind. Wenn nicht, musst du die Partitionen neu partitionieren oder zusammenführen.
- Datenmigrationen: Wenn du deine Daten auf eine neue Architektur migrierst, musst du besonders sorgfältig darauf achten, dass die Partitionen mit der neuen Umgebung kompatibel sind. Außerdem ist das Verschieben von Daten zwischen Partitionen mit komplexen Aufgaben verbunden, wie z. B. der Verwaltung der Datenkonsistenz über mehrere Shards hinweg.
- Steile Lernkurve: Die Datenpartitionierung erhöht die Komplexität eines Systems oder einer Cloud-Architektur. Sie sind nicht einfach abzufragen, zu migrieren oder zu analysieren, was zu einer steilen Lernkurve für Anfänger führt.
Best Practices für die Datenpartitionierung
Wie du siehst, wird die Datenpartitionierung komplex, wenn das Datenvolumen wächst. Die Umsetzung dieser Praktiken stellt jedoch sicher, dass die Partitionierung die Effizienz verbessert und die Leistung nicht beeinträchtigt.
- Richte Partitionen an Abfragemustern aus: Die Wahl der richtigen Partitionsstrategie und des richtigen Partitionsschlüssels kann die Leistung der Datenbank erheblich verbessern. Verstehe die häufigsten Datenoperationen und Abfragemuster in deiner Datenbank und wähle einen Partitionsschlüssel, der häufig in Abfragen vorkommt und gleichzeitig eine gleichmäßige Datenverteilung gewährleistet.
- Regelmäßig überwachen: Heutzutage sind die Anwendungen dynamisch und entwickeln sich mit den wechselnden Trends und Anforderungen ständig weiter. Deshalb ist es wichtig, dass du deine Partitionen regelmäßig überprüfst, um sie an die aktuellen Zugriffsmuster anzupassen und sie bei Bedarf neu zu partitionieren.
- Minimiere den Overhead: Die manuelle Verwaltung von Partitionen in großem Maßstab ist komplex. NoSQL-Datenbanken wie Apache Cassandra und Amazon DynamoDB automatisieren diesen Prozess jedoch, ohne dass dafür viel zusätzliche Arbeit nötig ist. Darüber hinaus passen einige Automatisierungswerkzeuge die Partitionen an, wenn die Daten skaliert werden, und ermöglichen so eine Neupartitionierung oder eine Zusammenführung der Partitionen je nach deinen Bedürfnissen.
Fazit
Eine effektive Datenpartitionierung ist entscheidend für die Aufrechterhaltung der Leistung und Skalierbarkeit, wenn deine Daten wachsen. Mit der richtigen Strategie kannst du die Abfragelatenz verringern, die Speicherung optimieren und die Wartung vereinfachen. Das ist ein praktischer Schritt mit einer messbaren Wirkung.
Wie die Partitionierung verteilte Systeme skalierbar macht, erfährst du in diesem Leitfaden zu Kafka-Partitionen. Um zu verstehen, wie relationale Strukturen Partitionierungsentscheidungen beeinflussen, beginne mit diesem Kurs über relationale Datenbanken.
Werde Dateningenieur
Srujana ist freiberufliche Tech-Autorin und hat einen vierjährigen Abschluss in Informatik. Das Schreiben über verschiedene Themen wie Data Science, Cloud Computing, Entwicklung, Programmierung, Sicherheit und viele andere ist für sie selbstverständlich. Sie liebt klassische Literatur und erkundet gerne neue Reiseziele.

