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