Использование двух баз данных для иллюстрации этого примера: CouchDB и Cassandra .
CouchDB
CouchDB использует дерево B + для индексов документов (используя умное изменение для работы в их среде только для добавления) - более конкретно, при изменении документов (вставка / обновление / удаление) они добавляются к запущенный файл базы данных, а также полный путь Leaf -> Node из дерева B + всех узлов, на которые повлияла обновленная ревизия, сразу после документа.
Эти пересчитанные по частям ревизии индекса встроены рядом с модификациями, так что полный индекс представляет собой объединение самых последних модификаций индекса, добавленных в конце файла, вместе с дополнительными фрагментами, находящимися далее в файле данных, которые все еще актуальны и еще не были изменены.
Поиск по дереву B + - это O (logn).
Cassandra
Кассандра хранит ключи записей, отсортированные в памяти, в таблицах (давайте подумаем о них как о массивах для этого вопроса) и время от времени записывает их как отдельные (отсортированные) таблицы с отсортированными строками .
Мы можем рассматривать коллекцию всех этих таблиц как «индекс» (насколько я понимаю).
Кассандре требуется время от времени компактировать / комбинировать эти таблицы отсортированных строк , создавая более полное представление файла индекса.
Поиск отсортированный массив - это O (logn).
Вопрос
Предполагая схожий уровень сложности между поддержанием частичных кусков дерева B + в CouchDB и частичных индексов отсортированных строк в Cassandra и с учетом того, что оба обеспечивают время поиска O (logn), которое, по вашему мнению, улучшило бы представление базы данных Индекс и почему?
Мне особенно любопытно, есть ли подробности реализации одного над другим, что делает его особенно привлекательным, или если они оба вымываются, и вы просто выбираете любую структуру данных, с которой предпочитаете работать / делает больше смысла для разработчика.
Спасибо за мысли.