У меня есть встроенное устройство, в котором хранится список внутренних таблиц. Я хотел бы, чтобы он синхронизировал состояние этой таблицы с какой-либо внешней базой данных для целей отладки. То есть всякий раз, когда я добавляю элемент в определенный массив структур, я хочу, чтобы устройство выдавало команду «INSERT INTO ...».
Однако я отправляю данные по последовательному кабелю RS232, что делает недопустимыми накладные расходы на отправку явного SQL.
Поскольку я часто использую только 3 типа команд SQL, я могу сериализовать только эти несколько. А именно _1 _, _ 2_ и 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 определяется как однобайтовое целое число.
Есть ли какой-нибудь известный протокол / реализация в этом духе?
Есть ли у кого-нибудь идеи получше?