Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#1

Gibt es ein DBMS mit einer Art Pointer-Typ?

  Alt 17. Okt 2017, 02:44
Datenbank: Gesucht • Version: egal • Zugriff über: bevorzugt UniDAC
Hallo DP!

Ich hatte heute eine etwas "wilde" Idee, wie ich die Write-Performance unserer HMI-Client-Server Suite verbessern könnte. Aktuell steckt hier eine MariaDB/MySQL hinter, und je nach (projektspezifischem) Aufbau der Daten in der SPS landen diese aus diversen Quellen (ich definiere hier mal "eine Quelle" als eine am Stück übertragbare Menge an Daten von der SPS) in diversen Tabellen. Mit quasi beliebigem Datentyp. Theoretisch kreuz und quer, und diese Flexibilität möchte ich uns auch erhalten. (Bzw. muss, da viele alte Steuerungen noch nicht diesbzgl optimiert strukturiert wurden.)

Es wäre, sowohl beim Lesen aus der SPS als auch beim Schreiben in die DB, viel performanter, wenn ich jeweils ein paar hundert Bytes am Stück verarbeiten könnte. Quasi ein Binärabbild der Speicherbereiche in der SPS in ein Blob-Feld in die DB werfen. (*) Dazu hätte ich gerne eine Kreuztabelle, die mir für jeden tatsächlichen Wert angibt in welcher Tabelle, in welchem Feld (Blob), ab welchem Byte und mit welchem Datentyp mein gewünschter Wert liegt.
Dazu möchte ich aber ungerne immer den gesamten Blob aus der DB fischen und in meinem Programm zerstückeln, sondern am liebsten mein Interface zur DB weitgehend gleich behalten. Ich möchte quasi SELECT ist_wert FROM analogwerte WHERE feldname = 'DRUCK_1.0' schreiben können (nicht zwangsweise diese Form, aber mit diesen Parametern), es gibt aber gar keine Tabelle "analogwerte". Sondern stattdessen eine Tabelle, in der steht: Nimm dieses aus der Tabelle "datenbasis" aus der Spalte "raw_data" (der Blob) mit der id N, und zwar ab Byte 78, und gib das als 2-Byte Integer ohne Vorzeichen zurück.

Dann könnte ich nämlich einfach die Datenbausteine aus der SPS komplett in die DB werfen, und zwar auch deutlich öfter als nur jede Sekunde ein Mal, und habe mit dem Zerpflücken in logisch korrekte Strukturen in meinem Programm nicht mehr zu viel am Hut.

Lohnt es sich überhaupt in diese Richtung weiterzudenken, oder gibt es kein DBMS welches sowas auch nur im Ansatz könnte? (Ich möchte ungerne Plugins für ein DBMS schreiben dafür. Es sollte alles via SQL und Ab-Werk-Funktionen gehen.)

Kennt ihr ein DBMS, das sowas in der Art liefern könnte?
Vielen Dank schon mal!

*) Beim Lesen aus der SPS mache ich das schon, zerstückel dann aber die Daten anhand der vorgegebenen Struktur in der SPS und trage dann alle Werte einen nach dem anderen in die DB ein. Das wird bei ein paar hunderten irgendwann recht langsam, selbst wenn ich mittlerweile pro Tabelle sogar mit nur einem INSERT auskomme. Da dort aber heftige WHERE-IN-() und CASE Konstrukte enthalten sind (da nicht jedes mal immer alle Zeilen und/oder die gleichen Spalten einer Tabelle in einem Durchgang beschrieben werden), ist das in entsprechender Menge ebenfalls bremsend. Besonders wenn zudem auch noch repliziert wird!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (17. Okt 2017 um 02:51 Uhr)
  Mit Zitat antworten Zitat