MySQL Tabelle splitten aber wie eine abfragen?

Thallius

Top Contributor
Hi,

ich brauche sowas ähnliches wie einen Join aber es ist kein Join. Ich habe keine Ahnung ob es das überhaupt gibt aber wenn wüßte ich nicht nach welchem Stichwort ich suchen sollte deshalb hier meine Frage:

Ich habe eine Tabelle, welche von meheren Applikationen genutzt wird. Diese Tabelle enthält datumbezogene Daten und jeden Tag kommen ein paar hundert neue dazu.
Da dieses Applikationen nun schon ein paar Jahre alt sind sind die Tabellen mitlerweile recht groß und damit auch langsam geworden.

Da für die eigentliche Main Applikation aber eigentlich nur die Einträge von Heute in die Zukunft interessant sind und die alten Einträge nur für speizielle Statistik-Applikationen gebraucht werden, wäre es jetzt natürlich super wenn ich die Tabelle einfach in zwei Tabellen aufteilen könnte. Also quasi eine mit den einträgen von vor 2017 und eine mit denen danach.

Allerdings möchte ich jetzt nicht bei den Abfragen in der Statistik-Applikation jedesmal aus zwei Tabellen lesen sondern einfach nur einen Query machen. Ein FULL Join würde hier zwar funktionieren aber dann hätte ich ja die doppelte Spaltenanzahl und müßte nachsehen welche Spalten befüllt waren und welche NULL sind. Keine richtig schöne Lösung.

Gibt es da etwas einfaches?

Gruß

Claus
 

Tobse

Top Contributor
Kannst du die Namen der Tabellen ändern, die die anderen Applikationen benutzen?

Meines Wissens nach geht das, was du da vorhast, nicht. Fürs lesen kannst du eine View benutzen, welche die alte und die neue Tabelle mit UNION zusammenpabbt. Wenn du das machst können die Legacy-Applikationen aber keine Daten mehr schreiben weil diese View nicht schreibbar ist.

Ich denke ein bisschen drüber nach... aber aktuell komme ich immer zum selben Ergebnis: mehrere Applikationen die selbe DB nutzen zu lassen war der urpsprüngliche, schwerwiegende Fehler. Wenn du eine Schnittstelle vorne dran hättest wäre das kein großes Problem...

Dabei fällt mir ein: mit vieeeeel getrickse bekommst du das schon hin. Mehrere Schemata im DB-Server und Trigger auf INSERT- und UPDATE. Noch führe ich das aber mal nicht näher aus, denn das ist möglicherweise eine noch schlechtere Idee als mehrere Applikationen die gleiche DB nutzen zu lassen...
 

Thallius

Top Contributor
Kannst du die Namen der Tabellen ändern, die die anderen Applikationen benutzen?

Ich denke ein bisschen drüber nach... aber aktuell komme ich immer zum selben Ergebnis: mehrere Applikationen die selbe DB nutzen zu lassen war der urpsprüngliche, schwerwiegende Fehler. Wenn du eine Schnittstelle vorne dran hättest wäre das kein großes Problem...

Natürlich greifen die Apps nicht direkt auf die DB zu sondern ich habe einen PHP REST Webservice dazwischen. Das ändert aber nichts an der Sachlage. Und wie stellst du dir vor hätte ich die Datenbank trennen sollen für die verschiedenen Applikationen? Dann müßte ja die eine Applikation immer zwei Datenbanken beschreiben wenn sich was ändert damit beide Applikationen immer die aktuellen Daten haben. Das wäre sicher noch viel weniger performant. Also das halte ich definitiv nicht für einen Fehler. Ich lege ja auch nicht zwei Kundendatenbanken in einer Firma an weil ich zwei Applikationen habe die diese Benutzen oder?

Gruß

Claus
 

Tobse

Top Contributor
Ja wenn du einen Service dazwischen hast, hast du ja alles richtig gemacht ;) Ich dachte jetzt, dass die verschiedenen Applikationen sich direkt mit der DB verbinden und queries abfeuern :O

Das wäre mein Lösungsansatz in der REST Schnittstelle:

Mach dir zwei Tabellen: einmal für alles bis heute, eine für alles weitere. Inserts gehen immer in die neue. Für die lesenden Zugriffe benutzt du eine View, welche beide verbindet:

SQL:
CREATE VIEW historical_data_readonly AS
SELECT * FROM historical_data_archive
UNION
SELECT * FROM historical_data

Das wirst du einem O/RM aber nicht so einfach beibringen können, weshalb du da auf CQRS wechseln musst.
 

Dukel

Top Contributor
Nein das ist nicht das was ich suche. Es geht ja nicht darum die Daten physikalisch getrennt zu speichern. Das würde ja die Geschwindigkeit nicht erhöhen sondern im Gegenteil eher verringern.

Gruß

Claus

Natürlich erhöht es die Geschwindigkeit, wenn Daten parallel gelesen werden können oder nur die Daten gelesen werden, die einen interresieren.
Das was du als erstes wolltest (Partition je Daten pro Jahr) ist das selbe wie eine Partitionierung, nur das du das manuell machen wolltest.
https://www.chrismoos.com/2010/01/31/mysql-partitioning-tables-with-millions-of-rows
http://mysql.rjweb.org/doc.php/ricksrots
PARTITIONing splits up one table into several smaller tables. But table size is rarely a performance issue. Instead, I/O time and indexes are the issues.

Perhaps the most common use case where PARTITIONing shines is the the dataset where "old" data is deleted from the table. RANGE PARTITIONing by day (or other unit of time) lets you do a nearly instantaneous DROP PARTITION plus REORGANIZE PARTITION instead of a much slower DELETE.
 

looparda

Top Contributor
Ich würde auch auf jeden Fall Views verwenden. Du kannst die View-Erzeugung mit einem Trigger verbinden. Entweder erstellst du den View bspw. täglich:
SQL:
CREATE EVENT event1
  ON SCHEDULE EVERY '1' DAY
  STARTS '2017-01-01 00:00:00'
DO
DROP VIEW today;
CREATE VIEW today AS...
Oder du koppelst die Erzeugung an die CREATE/UPDATE Events. Ob das sinnvoll ist hängt wohl von der Anwendung ab.
Von partitioning habe ich in mysql noch nie etwas gehört. Aber das sieht auch spannend aus!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Ich möchte dass ich nachdem man den Kommentar geschrieben hat den Kommentar in den Tabelle Bestellübersicht geschbeichert wird klappt nicht bei mir Datenbankprogrammierung 2
D Tabelle an Persistenzeinheit binden Datenbankprogrammierung 1
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
S gesamte Tabelle löschen Datenbankprogrammierung 2
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
Kirby.exe Eine Tabelle updaten Datenbankprogrammierung 16
L SQL Tabelle Datenbankprogrammierung 11
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
P Derby/JavaDB Datenbanktabelle erweitern, ohne Tabelle zu ändern Datenbankprogrammierung 6
B Datenmodell für Regeln + Bedingungen & Referenz auf andere Tabelle Datenbankprogrammierung 12
S FilterSearch Tabelle Datenbankprogrammierung 4
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
B Tabelle für "wiederkehrende Rechnungen" Datenbankprogrammierung 12
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
RowdyN SQLite Einfache Abfrage mit temporäre Tabelle, die nur innerhalb der Abfrage gültig ist Datenbankprogrammierung 0
N Dynamische Tabelle Datenbankprogrammierung 84
T Zeitraum aus SQL-Tabelle Datenbankprogrammierung 3
V SQLite 2 Tabelle vergleichen und alle unterschiede rausgeben Datenbankprogrammierung 1
D UCanAccess / MS Access - Tabelle / Spalte vorhanden Datenbankprogrammierung 3
M MySQL wie Listen oder arras in Tabelle(n) schreiben Datenbankprogrammierung 10
Paul15 Tabelle vergleichen Datenbankprogrammierung 15
J Tabelle synchronisieren mit Datenbank Datenbankprogrammierung 7
E Wie kann man bestimmte Zeilen der Tabelle rot markieren? Datenbankprogrammierung 1
L Tabelle mit Inhalt füllen Datenbankprogrammierung 2
J Optimierung von Querys/ ausgegebene Tabelle mit in neue Anfrage einbinden Datenbankprogrammierung 2
M Derby/JavaDB Kleine DB mit Tabelle erweitern - Integrität - Alter-Table - Netbeans ... Datenbankprogrammierung 5
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
A MySQL Tabelle ID abfragen und Spalte ausgeben Datenbankprogrammierung 4
S Update Tabelle aus Textfeld Datenbankprogrammierung 2
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
E Nur der letzte Datensatz wird in Tabelle geschrieben Datenbankprogrammierung 4
B Nur 99% der Datensätze werden in Tabelle geschrieben Datenbankprogrammierung 2
Joew0815 Datenmerge große Tabelle Datenbankprogrammierung 16
R MySQL Blob aus DB auslesen und einer Tabelle ausgeben Datenbankprogrammierung 7
P Neue Tabelle dazugekommen Datenbankprogrammierung 1
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
J Normalisierung - Aufspaltung der Tabelle Datenbankprogrammierung 4
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
S Wie muss meine SQL Tabelle aufgebaut sein, um unendliche Attribute zu vermeiden Datenbankprogrammierung 2
R HSQLDB Tabelle in JTable übertragen Datenbankprogrammierung 3
S MySQL Einfügen in Tabelle nur von Programm zulassen Datenbankprogrammierung 7
S Oracle Database 11g , eclipse , Tabelle erstellen Datenbankprogrammierung 2
L MySQL Uhrzeit-Format innerhalb einer Tabelle Datenbankprogrammierung 8
E Abfrage nach existierender SQL-Tabelle Datenbankprogrammierung 7
M Designfrage zu Rows die sich auf einen Datensatz derselben Tabelle beziehen Datenbankprogrammierung 7
N Temporäre tabelle MySQL Datenbankprogrammierung 2
X MySQL Hibernate: Massenupdate auf unbekannte Tabelle Datenbankprogrammierung 4
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Rudolf MySQL MySQL Tabelle mit Fremdschlüsseln in JTable darstellen Datenbankprogrammierung 5
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
D JPA (Hibernate) : Tabelle zweimal joinen Datenbankprogrammierung 4
G Oracle Hibernate M:N-Beziehung mit nur einer vorhandenen Tabelle Datenbankprogrammierung 5
N [XLS]Strings in Excel-Tabelle schreiben (poi) Datenbankprogrammierung 2
M DB View in Tabelle konvertieren in DB2? Datenbankprogrammierung 2
N Einzelne Spalte in MySQL-DB-Tabelle schreiben Datenbankprogrammierung 7
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
H MySQL Tabelle "Table" programmieren Datenbankprogrammierung 2
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
I Tabelle mit "|" getrennten Werten -> einzelnen Wert davon abfragen Datenbankprogrammierung 15
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
A Wie Tabelle auf bestimmten Inhalt überprüfen? Datenbankprogrammierung 7
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
Y Tabelle (elegant) importieren Datenbankprogrammierung 4
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
T Update an SQL Tabelle ?! Datenbankprogrammierung 10
F Baumstruktur erstellen und Art Tabelle festhalten!? Datenbankprogrammierung 13
S JPA: Objekt in Tabelle mit Composite Keys mappen (Embeddable Annotation) Datenbankprogrammierung 2
A Tabelle aktuell halten Datenbankprogrammierung 5
trash SQL, ganze Tabelle abfragen Datenbankprogrammierung 3
F HSQLDB HSQLDB lässt mich nicht auf erstellte Tabelle zugreifen Datenbankprogrammierung 12
Airwolf89 Spaltennamen einer Tabelle zurückgeben lassen Datenbankprogrammierung 9
J Ausgewählte Datensätze in DB-Tabelle schreiben Datenbankprogrammierung 13
J zufällige Auswahl aus einer Tabelle Datenbankprogrammierung 4
O eine Tabelle hat mehrere PrimKey mit dem selben Wert Datenbankprogrammierung 9
M Ausgabe in Tabelle der MySQL-Datenbank mit Java Datenbankprogrammierung 4
J Tabelle auslesen- knifflig Datenbankprogrammierung 7
Z [ORACLE] Ausgabe Tabelle im GUI Datenbankprogrammierung 4
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
R Tabelle Updaten aber auch Speichern Datenbankprogrammierung 2
D MySql Tabelle mit MySQLAdministrator (Anfänger) Datenbankprogrammierung 5
M Spaltennamen einer MS Access Tabelle ermitteln Datenbankprogrammierung 3
B Suche Query um genau einen Wert einer def. Gruppe aus einer Tabelle zu erhalten. Datenbankprogrammierung 2
C Prüfen, ob eine MySQL-Tabelle bereits existiert Datenbankprogrammierung 7
M Tabelle in Access Datei mit JDBC generieren Datenbankprogrammierung 3
G Tabelle für Zeitraum sperren Datenbankprogrammierung 4
G DB Modellierung mit variablen Attributen in der Tabelle Datenbankprogrammierung 4
S Datenbank-Tabelle in SWING/AWT ausgeben Datenbankprogrammierung 28
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
B Doppelte Zeilen einer Doppelten Spalte aus einer Tabelle entfernen. Datenbankprogrammierung 2
V Delete From Tabelle, ohne vorher die Tabelle zu kennen Datenbankprogrammierung 5
MQue größte id in einer Tabelle abfragen Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben