vc wrote:That's the main problem, yes. Informally, I was convinced when I read Mohan's stuff some years ago that key range locking does what it claims to do. I'd like to see a formal proof. Until I see one, I imagine it's more correct to say that key range locking sometimes produces the same results as straight predicate locking would. It's incorrect to say that key range locking is an implementation of some useful predicate locking functionality subset until there is a formal proof of this statement. I'd also be happy with a proof that key range locking (without any refernce to predicate locking) ensures only serializable schedules. So far I have not seen one.
Вот обещанные ссылки на работы по формализму применяемому для многоуровневых транзакций (где атомарные действия на одном уровне являются на самом деле многошаговой суб-тразнакцией на следующем):
1. A theoretical foundation of multi-level concurrency control by Gerhard Weikum - June 1985 - Proceedings of the fifth ACM SIGACT-SIGMOD symposium on Principles of database systems.
2. A model for concurrency in nested transactions systems - Catriel Beeri, Philip A. Bernstein, Nathan Goodman - April 1989 - Journal of the ACM (JACM), Volume 36 Issue 2.
Работу Papadimitriou я пока не нашёл, но попробую ещё поискать. Также Вам может быть интересно найти вот такую статью с глубокомысленным названием:
Bernstein, P.A., N. Goodman, and M.Y. Lai, "Laying Phantoms to Rest (by Understanding the Interactions Between Schedulers and Translators in a Database System)," Proc. 1981 IEEE COMPSAC Conf., Oct. 1981.
I've just taken a look at Bernstein's online book and could not find any discussion of PL or key-range locking (unless I missed something which very well may be the case).
Если речь идёт о Concurrency Control and Recovery in Database Systems - то я думаю, что требовать слишком многого от университеского учебника (пусть даже и одного из самых лучших) не стоит. Тем не менее, предикатные блокировки там обсуждаются, а также и реализация их частного случая посредством индексных (не диапазонных) блокировок.
My interest, although strong, is purely theoretical since I cannot get too excited with key-range locking that appears to be the sate-of-the-art even today, 20 years after it was conceived. It's a clever idea, no doubt, but its dependency on having indexes diminishes its practicality in too many cases.
Стакан наполовину пустой или наполовину полный? Использование индексов для предикатных блокировок - один из замечательных примеров инженерного минимализма, когда одна и та же концепция работает для двух хоть и связанных, но совершенно разных целей - ускорение извлечения данных и изоляция транзакций. Учитывая практическую неприменимость сколько нибудь полезных баз данных без индексации, я думаю в практических же целях можно спокойно проигнорировать "неудобства" от небоходимости наличия тех же индексов ещё и для целей изоляции транзакций.
Let me also apologize for the usual detour our conversation took. When you posted the original two SQLs, I'd realized that that they cannot be handled as stated by a vanilla Strict 2PL scheduler and I had been trying, several times, to re-state them so that they produced conflicting operations in order to be amenable to Strict 2PL. Now, I do not think it was a correct approach to the problem. As I said before, a correct response should have been that the statements cannot be analyzed within the confines of the traditional serializability theory.
Давайте всё же попробуем эти примеры ещё раз препарировать: vanilla Strict 2PL scheduler прекрасно позволяет провести анализ любых сценариев. Именно это я пытался сделать, подразумевая по умолчанию, что мы друг друга понимаем. Единственное уточнение - как я уже говорил - замените все упоминания data item/object на data set defined by a predicate во всех операциях (read, write, lock), обобщите понятие конфликта на наличие пересечения data sets defined by predicates, сведите SQL insert/delete/update к data set write / data set state change - больше ничего делать не нужно. Проблема аккуратного учёта фатномов волшебным образом испарится. Формальная часть с доказательствами корректности алгоритмов 2PL без циклов абсолютно не менятся при этой замене.