Введение

В информатике, танцующее дерево — это структура данных дерева, аналогичная B+ деревьям. Оно было изобретено Хансом Райзером для использования в файловой системе Reiser4. В отличие от самобалансирующихся двоичных деревьев поиска, которые стремятся поддерживать баланс своих узлов постоянно, танцующие деревья балансируют свои узлы только при сбросе данных на диск (либо из-за ограничений памяти, либо после завершения транзакции). Эта идея направлена на ускорение операций файловой системы за счет отсрочки оптимизации дерева и записи на диск только при необходимости, поскольку запись на диск в тысячи раз медленнее, чем запись в память. Кроме того, поскольку эта оптимизация выполняется реже, чем в других структурах данных дерева, она может быть более масштабной. В определенном смысле, это можно рассматривать как самобалансирующееся двоичное дерево поиска, оптимизированное для хранения на медленной среде, в том смысле, что его форма на диске всегда будет сбалансированной, но не будет получать промежуточные записи транзакций; это упрощает задачу добавления и удаления узлов во время транзакции. Вместо этого эти медленные операции перебалансировки выполняются одновременно с гораздо более медленной записью на носитель. Однако, негативный побочный эффект этого поведения проявляется в случаях неожиданного отключения питания, неполных записей данных и других ситуациях, которые могут помешать завершению финальной сбалансированной транзакции. В целом, танцующие деревья представляют большую сложность, чем традиционные деревья, при восстановлении данных из незавершенных транзакций, хотя эту проблему можно решить путем более тщательного учета транзакционных данных.