У меня есть встроенное устройство, которое хранит список внутренних таблиц. Я хотел бы синхронизировать состояние этой таблицы с некоторой внешней базой данных для целей отладки. То есть всякий раз, когда я добавляю элемент к определенному массиву struct, я хочу, чтобы устройство выдало команду «INSERT INTO ...».
Однако я отправляю данные по последовательному кабелю RS232, что делает неприемлемыми дополнительные затраты на отправку явного SQL.
Поскольку я часто использую только три типа команд SQL, я могу сериализовать только эти несколько. А именно INSERT INTO
, DELETE FROM
и UPDATE
.
Основная идея, которую я имел в виду, - отправлять данные с помощью «сжатого / сериализуемого» протокола SQL. Мы не будем отправлять команды непосредственно на сервер SQL, а на пользовательский сервер сериализованного SQL, я напишу:
- Мы назначим номер каждому изменяющему базу данных простому действию (например, INSERT, DELETE, UPDATE). Единственные доступные команды serializable-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]
Поскольку идентификатор определяется как одно байтовое целое число.
Существует ли какой-либо известный протокол / реализация в этом духе?
У кого-нибудь есть идея получше?