светлое будущее
Mike Potanin potan
Previous Entry Share Next Entry
Вложенные транзакции
Понял я как поддержать аппаратно вложенные транзакции.
Транзакции по вложенности образуют дерево. Есть такое кодирование деревьев (слегка избыточное) - узел кодируется отрезком, ребра дерева от наиболее облегающего отрезка в наибольшим подотрезкам.
Таким образом идентификатор транзакции, который добавляется к каждой строке кеш-памяти, состоит из трех чисел - начала, конца и длины (для оптимизации) отрезка. При поиске ячейки выбираются все с заданным адресом в основной памяти, началом отрезка меньше начала у текущей транзакции и с большим, чем у текущей, концом (тоже отрезка). Строки, попадающие под такое условие выставляют на шину специального компаратора свою длину (можно ее сразу вычислить, но не держать же сумматор на каждую ячейку), а он возвращает самую маленькую величину (устройство сложное, но не запредельно). А потом ячейка сравнивает минимальную длину с длиной своего идентификационного отрезка.
Осталось все это закодировать на Clash...

ТЫ имеешь в виду Nested Set model Joe Celco?

По-моему будет засада с назначением транзакции момента конца.
Мы же в этот момент не знаем сколько она будет продолжаться и когда закончится. Либо надо в момент открытия новой субтранзакции идти вверх по стеку и менять конец (и пересчитывать длину) у всех объемлющих транзакций, либо как не назначай конец, все равно не хватит.

Спасибо, буду знать как это называется. Я это не сам придумал, мне эту идею очень давно рассказал коллега по "Интернет-агентству .DOT" Андрей Маркевич.

Да, такая проблема есть, и с началом в том числе. Когда транзакция с нулевой длинной отрезка хочет создать подтранзакцию, придется пересчитывать границы. Я думаю, что позволительно делать программно. От кеш-памяти потребуются команды обновить такой-то конец (или начало) на такой-то. Этом можно расчистить место.

Видимо этот коллега читал книгу Joe Celco "SQL for smarties". Книг "for dummies" на разные околокомпьютерные темы полно, а "for smarties" - одна-единственная.

?

Log in