Мы разрабатываем программу, которая работает с данными, расположенными в общей памяти. Программа требует задержек и обрабатывает огромное количество данных.
В случае сбоя программы мы должны вернуться к последнему рабочему состоянию БЫСТРО.
Одним из способов является чтение и обработка данных из журнала транзакций, который содержит транзакции с начала дня. Но это совсем не быстро, учитывая размер журнала транзакций (сотни гигабайт).
Сейчас мы ищем способ создания снимков данных, которые можно записывать на диск и читать очень быстро в случае сбоя программы. Но создание снимка не должно блокировать выполнение программы, и данные в этом снимке должны быть согласованными.
Если бы мы использовали локальную память для хранения данных вместо общей памяти, решение будет простым:
- вилка ()
- запись данных на диск
Из-за копирования при записи в Linux будут копироваться только измененные данные, поэтому это очень быстро.
Но мы используем общую память posix.
Есть ли способ сделать это с учетом скорости и последовательности?