powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / read - write - commit
11 сообщений из 11, страница 1 из 1
read - write - commit
    #32789183
мы, дятлы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть файл, в котором нужно хранить структуры, для определенности пусть фиксированной длины. К нему должны иметь одновременный доступ несколько процессов на чтение - запись. Как организовать такой режим, чтобы часть процессов работала в режиме dirty read, а другая в режиме read committed? Пойму код на сях / паскале, под виндовс или под унихи. Можно использовать специфику API осей.
...
Рейтинг: 0 / 0
read - write - commit
    #32789839
Shultze
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай MemoryMapped файл, опиши таблицу блокировок, которую будут расшаривать все твои процессы, когда процесс хочет писать в область памяти (MappedFile) он запрашивает у таблицы залокна ли эта запись, если нет то залокать, типа TryLockRecord(RecNum):Boolean; и пишет себе преспокойненько, при этом TryLockRecord держит копию заблокированной записи.
UnLockRecord делает Flush на диск, отпускает запись, и освобождает удерживаемую копию.
функция GetRecord проверяет по таблице блокировок свободна ли запись, если свободна - возвращает, если занята - возвращает ее из удерживаемой копии.

Если надо наваять такой менеджер, пиши - договоримся
...
Рейтинг: 0 / 0
read - write - commit
    #32789875
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мы, дятлыКак организовать такой режим, чтобы часть процессов работала в режиме dirty read, а другая в режиме read committed?
Хм. У такого файла скорее всего будет некая управляющая структура - что-то типа списка записей. Тогда достаточно сделать update информации как "insert новой версии". В таблице структур хранить два указателя - на "старую" и "новую" версии. По commit-у, соответственно, старая версия переходит в свободные блоки, а указатель на новую копируется в указатель на старую.

Читатель, соответственно, выбирает между тем и другим указателем для dirty/commited чтения.

P.S. Но вообще-то хорошо делать это при обмене только через файл - имхо, задолбаешься.
...
Рейтинг: 0 / 0
read - write - commit
    #32790023
q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q
Гость
нужно просто поставить OS/400, и будет тибе щастье.
...
Рейтинг: 0 / 0
read - write - commit
    #32790031
q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q
Гость
виндовс и йюнегз недарасли эщо
...
Рейтинг: 0 / 0
read - write - commit
    #32790146
Shultzeпри этом TryLockRecord держит копию заблокированной записи
Тут, видимо, стоит использовать режим маппинга WRITECOPY? Это имелось ввиду?
Тогда не совсем понятно вот что: если процесс пишет что-то в режиме WRITECOPY, то как процессы в режиме dirty read смогут прочесть что он туда пишет?
...
Рейтинг: 0 / 0
read - write - commit
    #32790254
Shultze
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDN
If you share the mapping between multiple processes using DuplicateHandle or OpenFileMapping and one process writes to a view, the modification is not propagated to the other process. The original file does not change.



Т.е. другие процессы будут видеть в "окне" устаревшие данные. Все равно без менеджера не обойтись, иначе при компа программы непонятки начнуться, незавршенные транзакции. если записи у вас различной длины, то надо делить файл на страницы и писать соответственно кусками
...
Рейтинг: 0 / 0
read - write - commit
    #32790853
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предлагаю человеку, скрывающемуся за ником "мы дятлы" ответить самому себе на следующие вопросы:

1) Сможешь ли ты масштабировать этот проект? Как в него добавить еще десяток таблиц (если вдруг это потребует заказчик), и организовать версионное чтение, еще и гарантировать восстановление после сбоя?
2) Насколько удобно с точки зрения ОС использовать блокировки на уровне файлов? Не лучше-ли использовать другие средства?
3) Какова гранулярность этих блокировок?
4) Насколько ЭФФЕКТИВНО windows работает с БОЛШИМ количеством блокировок?
5) Каково максимально количество блокировок которые Windows может контролировать в рамках одного открытого файла и одного процесса?
6) Как использовать индексный поиск? Сможешь ли ты организовать эффективные алгоритмы и показать что они работают лучше штатных средств?

Взвесив все за и против, стоит подумать о целесообразности такого решения. Я не предлагаю использовать СУБД. Но стоит ли в тысячный раз изобретать очередной никому не нужный велосипед? Стоит ли наступать на грабли, по которым ходили разработчики пару десятков лет назад?

Отвечать на эти вопросы в данном в сабже - необязательно.
...
Рейтинг: 0 / 0
read - write - commit
    #32791109
2 mayton
Но стоит ли в тысячный раз изобретать очередной никому не нужный велосипед? Стоит ли наступать на грабли, по которым ходили разработчики пару десятков лет назад?

Да, мне это интересно. Я тоже хочу побродить по этим же граблям. Сам хочу разобраться.
...
Рейтинг: 0 / 0
read - write - commit
    #32791175
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Дятлы
Молодец! Докладывай о результатах периодически. Буду навещать этот топик.
...
Рейтинг: 0 / 0
read - write - commit
    #32791666
Да нет проблем. Я скачал сорсы Firebird, пошел читать что пишут. Может пойму.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / read - write - commit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]