Ich habe ein eingebettetes Gerät, das eine Liste der inneren Tabellen hält. Ich möchte, dass es den Zustand dieser Tabelle mit einer externen Datenbank für Debugging-Zwecke synchronisiert. Das ist jedes Mal wenn ich ein Element zu einem bestimmten struct Array hinzufüge, möchte ich, dass das Gerät einen "INSERT INTO ..." Befehl ausgibt.serialisieren und deserialisieren SQL-Abfrage
Allerdings sende ich die Daten über ein serielles RS232-Kabel, was den Overhead des Sendens expliziten SQL inakzeptabel macht.
Da es nur 3 Arten von SQL-Befehlen gibt, die ich oft verwende, kann ich nur diese wenigen serialisieren. Nämlich INSERT INTO
, DELETE FROM
und UPDATE
.
Die allgemeine Idee, die ich im Sinn hatte, ist, Daten mit einem "komprimierten/serialisierbaren" SQL-Protokoll zu senden. Wir werden keine Befehle direkt an SQL Server senden, sondern auf einen benutzerdefinierten serialisiert-SQL-Server werde ich schreiben:
- Wir werden eine Anzahl an jede Datenbank verändernde einfache Aktion zuweisen (dh INSERT, DELETE, UPDATE) . Die einzigen verfügbaren serializable-SQL-Befehle sind
INSERT INTO x()
,DELETE FROM x WHERE id=y
. Wo können wir nurx
undy
ändern. - Zunächst einmal alle notwendigen Tabellen auf dem Server erstellen. Halten Sie eine Hash-Tabelle auf dem Server, die jede Tabelle einer Nummer zuordnet. Dies kann in SQL erfolgen, da dies nur einmal durchgeführt wird.
- Dann vergeben Sie eine Nummer zu jeder Tabelle, stellen Sie sicher, dass der Server über diese Nummer
- Endlich, wann immer wir einen SQL-Befehl ausführen möchten, senden wir Befehlsnummer, gefolgt von Tabellennummer, gefolgt von Datenlänge gefolgt von Daten. Der Server würde das Layout der tatsächlichen Daten nach der Beschreibung der Tabelle herausfinden.
Zum Beispiel
INSERT INTO temperature(temperature,location)
VALUES ((108,"chille"),(120,"usa"))
Würde zu
[INSERT INTO id][2 data to send]
[byte of 108][6 bytes string "chille"]
[byte of 120][3 bytes "usa"]
und
DELETE FROM people (id,"bob") WHERE id=1 or id=2
übersetzt wäre
übersetzt werdenDa id als eine ganze Zahl von einem Byte definiert ist.
Gibt es ein bekanntes Protokoll/Implementierung in diesem Sinne?
Hat jemand eine bessere Idee?
Danke für die Eingabe! 1) Immer Anzahl der Zeilen, ich sende immer alle Werte für die Kürze des Protokolls. 2) Ich möchte NUR auf der Grundlage eindeutiger ID aktualisieren/löschen, und wenn dies nur ODER sinnvoll ist. Ich nehme an, dass Sie keine ähnliche existierende Implementierung/Protokoll kennen. Danke –