Начало » Использование СУБД » Firebird, HQbird, InterBase » Версии записей. ("Про архитектуру".)
Версии записей. [сообщение #1672] |
Wed, 22 February 2023 15:34 |
Сообщений: 198 Зарегистрирован: September 2022
|
Senior Member |
|
|
Плоский (без подуровней) каталог, с файлами (например).
Много Клиентов, все они в режиме RO. И один клиент-Писатель, который иногда меняет данные. Все версии записей данных должны оставаться в системе, физически их не удаляем.
1. Клиент 1 запускается, в момент X коннектится, читает список файлов (имя и, например, размер файла), потом по мере надобности загружает файлы, содержимое которых соответствует моменту X (т.е. когда этот каталог был прочитан). Коннект к БД физически не сохраняется, список файлов хранится в памяти клиента, пока клиент жив. Клиент по мере надобности снова физически коннектится к БД считывает нужные ему файлы (актуальные на момент X).
2. Потом Писатель (возможно, во время работы клиента 1) дополняет/изменяет/удаляет список и содержимое (тело) файлов. А клиент 1 всё так же работает со своей версией данных, актуальной на момент Х.
3. Клиент 2 запускается, в момент Y коннектится, читает НОВЫЙ (измененный в п.2) список и т.д., см. п.1.
3. Потом Писатель опять меняет данные. А клиенты 1 и 2 продолжают работать со своими версиями, актуальными на моменты X и Y соответственно.
... После перезапуска клиенты видят самую последнюю (самую новую) версию данных, и работает уже с ней.
-------------
Что-то когда-то такое обсуждалось, но я уже забыл.
А напомните, пожалуйста. Если помнит кто.
|
|
|
Re: Версии записей. [сообщение #1673 является ответом на сообщение #1672] |
Wed, 22 February 2023 15:46 |
Сообщений: 198 Зарегистрирован: September 2022
|
Senior Member |
|
|
Кажется, вот так: две таблички: Файл и Состояние. В первой хранится имя файла. Во второй хранятся атрибуты (дата и длина, признак "удалён") и содержимое файла , ну и, естественно, также указатель на запись в первой табличке. В первой табличке также хранится указатель на последнюю версию записи Состояния. Меняем данные, просто записывая новые элементы в таблицу Состояние, при этом в таблице Файлы меняем указатель на новый элемент Состояния. Массовое изменение проводится в одной общей транзакции. Получение списка файлов проводится в одной (Snapshot) транзакции.
Если я что-то не забыл ещё...
[Обновления: Wed, 22 February 2023 15:47] Известить модератора
|
|
|
|
|
Переход к форуму:
Текущее время: Sun Dec 22 12:32:01 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00862 секунд
|