У меня есть встроенное устройство, которое хранит список внутренних таблиц. Я бы хотел, чтобы он синхронизировал состояние этой таблицы с некоторой внешней базой данных для целей отладки. Это когда я добавляю элемент в определенный массив структуры, я хочу, чтобы устройство выдало команду «INSERT INTO ...».Сериализация и десериализация SQL-запроса
Однако я отправляю данные по последовательному кабелю RS232, что делает накладные расходы на отправку явного SQL недопустимым.
Поскольку существует только 3 типа команд 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]
Поскольку id определяется как однобайтовое целое число.
Есть ли какой-либо известный протокол/реализация в этом духе?
У кого-нибудь есть идея?
Спасибо за ввод! 1) Всегда количество строк, я всегда отправляю все значения для терпения протокола. 2) Я хочу обновлять/удалять ТОЛЬКО на основе уникального идентификатора, и если так, то только ИЛИ имеет смысл. Я предполагаю, что вы не знаете какой-либо аналогичной существующей реализации/протокола. Спасибо –