我有一個嵌入式設備,它保留了內部表的列表。我希望它將此表的狀態與某些外部數據庫同步用於調試目的。這就是每當我添加一個元素到某個結構數組時,我希望設備發出一個「INSERT INTO ...」命令。序列化和反序列化SQL查詢
但是,我通過RS232串行電纜發送數據,這使得發送顯式SQL的開銷不可接受。
由於我只使用了3種類型的SQL命令,因此我只能序列化這幾個。即INSERT INTO
,DELETE FROM
和UPDATE
。
我想到的一般想法是用「壓縮/可序列化」SQL協議發送數據。我們不會發送命令直接到SQL服務器,而是一個自定義的序列化,SQL服務器,我會寫:
- 我們將電話號碼指定給每個數據庫,改變簡單的動作(即INSERT,DELETE,UPDATE) 。唯一可用的可串行化SQL命令是
INSERT INTO x()
,DELETE FROM x WHERE id=y
。我們只能在那裏改變x
和y
。 - 首先在服務器上創建所有必要的表格一次。在將每個表映射到一個數字的服務器上保留一個散列表。這可以在普通的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)總是行數,我總是發送所有值的協議的簡潔。 2)我想根據唯一ID更新/刪除,如果是這樣,只有OR有意義。 我假設你不知道任何類似的現有實現/協議。謝謝 – 2009-04-22 12:55:08