我有一个嵌入式设备,它保留了内部表的列表。我希望它将此表的状态与某些外部数据库同步用于调试目的。这就是每当我添加一个元素到某个结构数组时,我希望设备发出一个“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