Как оптимально кэшировать таблицу? - PullRequest
1 голос
/ 25 января 2020

Скажем, у меня в файле базы данных sqlite есть таблица с именем luluTable. Также у меня есть два отдельных процесса source_process и sink_process, которые имеют открытые соединения с этой базой данных.

проблема:

source_process редактирует строку luluTable, а затем указывает его с sink_process по ipc. Затем sink_process получает сообщение ipc, затем читает измененную строку в luluTable (с помощью содержимого ipc) и затем проверяет измененную строку. Если измененная строка действительна, sink_process отправить и ACK на source_process, в противном случае она отправляет NACK через ipc.

Если source_process получает NACK, как можно он изменяет обратно измененную строку luluTable на свои начальные значения?!

мое самое первое решение:

использовать две таблицы вместо одной: luluTable и luluTableCache. luluTableCache является модифицированной версией luluTable. source_process сначала меняется только luluTableCache. Затем sink_process просто читает luluTableCache и запускает процедуру проверки. Если source_process получает ACK, то фиксирует luluTableCache в luluTable; в противном случае он удаляет luluTableCache и освобождает luluTable нетронутым.

мой вопрос:

Есть ли более оптимальное решение, чем мое ?? !! Мое решение удваивает размер моей базы данных, а также производительность процессора, потому что ему нужно читать / записывать две таблицы вместо одной. Есть ли в sqlite3 API для предложенных вами операций?!

...