Подтвердить что ты не робот

Есть ли база данных B-Tree или фреймворк в Python?

Я слышал, что базы данных B-Tree быстрее, чем таблицы Hash, поэтому я подумал об использовании базы данных B-Tree для моего проекта. Существует ли какая-либо существующая структура в python, которая позволяет нам использовать такую ​​структуру данных, или мне придется писать с нуля?

4b9b3361

Ответ 1

Единственная причина выбора B-Tree над хэш-таблицей, будь то в памяти или с блочным хранилищем (как в базе данных), - это поддерживать запросы, отличные от равных. B-дерево позволяет выполнять запросы диапазона с хорошей производительностью. Многие хранилища с ключевыми значениями (например, berkley db) не делают это внешне видимым, хотя, поскольку они все еще содержат хэширование ключей, но это все же позволяет быстро и стабильно перебирать весь набор данных (итераторы остаются в силе, даже если есть добавление или удаляет, или дерево должно быть перебалансировано).

Если вам не нужны запросы диапазона, и вам не нужна параллельная итерация, вам не нужны b-деревья, используйте хеш-таблицу, она будет быстрее в любом масштабе.

Изменить: У меня был случай для вышеупомянутого на самом деле быть правдой; для этого пакет blist представляется наиболее полной реализацией сортированной библиотеки контейнеров.

Ответ 2

Запрограммируйте то, что вы пытаетесь сделать сначала, затем оптимизируйте, если необходимо. Период.

EDIT:

http://pypi.python.org/pypi/blist

Снимите замену встроенного в python списка.

Ответ 4

SQLite3 использует B + Trees внутренне, но похоже, что вам может понадобиться хранилище ключей. Попробуйте Berkeley DB для этого. Если вам не нужны транзакции, попробуйте HDF5. Если вы хотите иметь распределенное хранилище ключей, то есть http://scalien.com/keyspace/, но это система типа клиент-сервер, которая откроет все сортирует хранилища ключей NoSQL.

Все эти системы будут O (log (n)) для вставки и извлечения, поэтому они, вероятно, будут медленнее, чем используемые хэш-таблицы.

Kyoto Cabinet предлагает хеш-дерево, так что это может быть больше того, что вы смотрите, так как это должно быть O (1) для вставки и извлечения, но вы не можете совершать обход в порядке, если вам это нужно ( хотя, поскольку вы в настоящее время используете хэш-деревья, это не должно быть проблемой).

http://fallabs.com/kyotocabinet/

Если вы ищете производительность, вам понадобятся критические элементы скорости, реализованные на скомпилированном языке, а затем API-интерфейс оболочки в Python.

Ответ 5

Возможно, вам стоит взглянуть на mxBeeBase, который является частью базового дистрибутива eGenix mx. Он включает в себя быструю реализацию B + Tree на диске и предоставляет классы хранения, которые позволяют создавать словари или базы данных на диске в Python.