Архитектуры ООСУБД. Анализ реализаций

Ответ на комментарии раздела «Модель параллельности»


По-видимому, в Objectivity и Versant имеется возможность ослаблять свойства ACID, а в ObjectStore такой возможности нет. Так что я признаю ошибку. Но в любом случае это замечание Мариотта непонятно с учетом того, что в следующем предложении я говорю, что мое обсуждение фокусируется на правильном ACID-поведении. Процитированное предложение «обновления всегда приводят к выполнению операций координации блокировок и согласования кэшей.» приведено Мариоттом вне контекста.

Очевидно, что в моем контексте это означало, что для ТРАНЗАКЦИИ, демонстрирующей свойства ACID и выполняющей ОБНОВЛЕНИЯ, потребуются операции координации блокировок и согласования кэшей. Если мы говорим об индивидуальных операциях внутри транзакции, то имеется множество возможностей. В связи с этим я не понимаю замечания Мариотта о потребности блокировки миллионов объектов и влиянии этого на поведение систем с архитектурой, основанной на объектах. В практической реализации в этих случаях использовался бы паттерн блокировок GateKeeper. Например, если доступ к тысячам атомов, образующим сложную структуру, производится только через эту структуру, то потребуется блокировать структуру, а не атомы. Я вспоминаю ранние дни реляционных баз данных, когда разные поставщики приводили аналогичные аргументы по поводу гранулярности блокировок, а теперь, десять лет спустя все основные поставщики реализуют блокировки на уровне записей. Я не считаю, что эта тема завершена моим примером или примером Мариотта. Однако, вопреки утверждению Мариотта, я не «опускаю» информацию, касающуюся семантики блокировок приложения. Транзакционные блокировки требуются даже для транзакций с оптимистическими блокировками, чтобы они могли получить логически согласованный мгновенный снимок базы данных. Для рассмотрения всех возможностей потребовалась бы целая книга.

Далее автор говорит: «Грин также не упоминает о том, что в системах с архитектурой, основанной на страницах, при наличии реальной потребности в блокировке на уровне объекта можно просто поместить объект на отдельную страницу.». В таком случае я полагаю, что забыл сказать и о бесполезных затратах памяти при хранении 20-байтного объекта в странице размером в 4096 байт, а также о потерях виртуальной памяти при трансляции адресов и потерях пропускной способности сети при передаче почти пустых страниц... А вообще-то, конечно, можно иметь гранулированные блокировки и в архитектуре, основанной на страницах. Я предлагаю читателям самим решить, чем различаются практика и теория.



Содержание раздела