内部テーブルのリストを保持する組み込みデバイスがあります。デバッグの目的で、このテーブルの状態を外部データベースと同期させたいと思います。つまり、特定の構造体配列に要素を追加するときはいつでも、デバイスに「INSERTINTO...」コマンドを発行させたいのです。
ただし、RS232シリアルケーブルを介してデータを送信しているため、明示的なSQLを送信するオーバーヘッドは許容できません。
私がよく使うSQLコマンドは3種類しかないので、シリアル化できるのはこれらのいくつかだけです。つまりINSERT INTO
、、、DELETE FROM
およびUPDATE
。
私が念頭に置いていた一般的な考え方は、「圧縮/シリアル化可能な」SQLプロトコルを使用してデータを送信することです。コマンドをSQLサーバーに直接送信するのではなく、カスタムのシリアル化されたSQLサーバーに送信します。
- データベースを変更する単純なアクション(つまり、INSERT、DELETE、UPDATE)ごとに番号を割り当てます。使用可能なシリアル化可能なSQLコマンドは、、のみ
INSERT INTO x ()
ですDELETE FROM x WHERE id=y
。変更できるのはx
とy
。 - 最初に、サーバー上に必要なすべてのテーブルを一度作成します。各テーブルを数値にマップするハッシュテーブルをサーバー上に保持します。これは1回だけ実行されるため、プレーンSQLで実行できます。
- 次に、各テーブルに番号を割り当て、サーバーがこの番号を認識していることを確認します
- 最後に、SQLコマンドを実行する場合は常に、コマンド番号、テーブル番号、データ長、データの順に送信します。サーバーは、テーブルの説明によって実際のデータのレイアウトを把握します。
例えば
INSERT INTO temperature(temperature,location)
VALUES ((108,"chille"),(120,"usa"))
に翻訳されます
[INSERT INTO id][2 data to send]
[byte of 108][6 bytes string "chille"]
[byte of 120][3 bytes "usa"]
と
DELETE FROM people (id,"bob") WHERE id=1 or id=2
に翻訳されます
[DELETE id][2 data to send][byte of 1][byte 2]
idは1バイト整数として定義されているため。
この精神で既知のプロトコル/実装はありますか?
誰かもっと良いアイデアがありますか?