Чистый постоянный ключ Python и контейнер на основе значений (хеш-подобный интерфейс) с поддержкой большой файловой системы? - PullRequest
3 голосов
/ 09 октября 2009

Я ищу (возможно) чисто библиотеку Python для постоянной хеш-таблицы (btree или b + tree), которая обеспечивала бы следующие функции

  1. Поддержка больших файлов (возможно, в терабайтах)
  2. Достаточно быстрый и малый объем памяти (в поисках баланса между скоростью и памятью)
  3. Низкая стоимость управления
  4. Надежность, т.е. не повреждает файл, когда содержимое записывается через файловую систему
  5. Наконец, чистая реализация Python. Я в порядке, если в нем есть библиотека C, но я ищу кроссплатформенное решение

Я изучал такие решения, как redis, shelve, токийский кабинет. Кабинет Токио впечатляет и имеет привязку Python в http://code.google.com/p/python-tokyocabinet/,, но его порт Windows находится в стадии разработки.

Спасибо за хорошие предложения. В настоящее время я изучаю SQLite3 с Python. У меня есть предложения по использованию движка базы данных, но я более склонен к реализации бережливых и устойчивых b + деревьев

Ответы [ 3 ]

2 голосов
/ 09 октября 2009

Использовать реляционную базу данных.

  • Действительно быстро при получении данных на основе ключа, если вы добавили индекс в ключ.
  • Хорошее масштабирование
  • Не легко испортится
  • Инструменты уже доступны для:
    • Резервные
    • Тиражирование
    • Кластеризация
  • Кроссплатформенность
  • Работает по сети
  • Разрешить действительно быстрые JOIN с, группирование, агрегирование и другие сложные запросы, если они вам нужны

Вы можете легко создать класс, который работает как dict или хеш-таблица, но использует базу данных в качестве хранилища. Вы можете кэшировать в памяти столько, сколько хотите.

2 голосов
/ 09 октября 2009

ZODB
http://pypi.python.org/pypi/ZODB3

Как говорит Леннарт, конечно, используйте последнюю версию

1 голос
/ 09 октября 2009

ZODB действительно мощный инструмент, но, может быть, он излишний.

Вы можете взломать свое собственное решение в нескольких строках Python: просто закодируйте словарь, подобный объекту, в качестве адаптера базы данных. Попробуйте использовать этот фрагмент , заменив SQLite-вызов MySql, и все готово.

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