Структура данных дерева B+ в Erlang

есть ли какая-либо известная реализация B+ Tree структура данных в Erlang ?

3 ответов


Я бы определенно рекомендовал заглянуть в eleveldb приложение, если вам действительно нужно дерево B+. Дело в том, что вы хотите хранить данные в листьях дерева, в автономном режиме на диске, так как это где B+-деревья обычно являются опцией. Существует также вариант в чистом Эрланге LevelDB под названием hanoidb что также довольно приятно, написано Крестеном крабом Торупом. Та же область применения.

Если вам нужно хранение в памяти, вы должны смотреть на ETS или Mnesia (последнее для распределение.) В Erlang это, как правило, самые быстрые решения, так как у вас есть преимущество никогда не попадать на диск. Это особенно верно, если вы можете выполнять стандартный поиск ключей / значений в своих данных без необходимости запускать внутри транзакционного контекста в Mnesia (делать грязные чтения). Типичная скорость поиска составляет 5-10 наносекунд.


просто альтернатива, если вы не хотите взломать системы баз данных с открытым исходным кодом:

Крис Окасаки Чисто Функциональные Структуры Данных может дать вам некоторое представление о ее осуществлении самостоятельно. Само дерево B+ не так сложно из моего опыта.

Я бы рекомендовал использовать gb_trees если вы хотите как в памяти, так и на более низком уровне (в некотором смысле), чем ets и mnesia.


насколько мне известно, нет отдельной библиотеки. Однако исходный код CouchDB очень читабельно и хорошо реализовано.