2010-04-11 3 views
2

Кто-нибудь знает, использует ли модуль Python shelve память с отображением IO?Использует ли модуль полки Python модуль ввода-вывода с памятью?

Возможно, этот вопрос немного вводит в заблуждение. Я понимаю, что shelve использует базовый модуль стиля dbm для выполнения своей грязной работы. Каковы шансы, что базовый модуль использует mmap?

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

ответ

4

Существующие версии dbm в стандартной библиотеке Python используют «нормальный» ввод-вывод, а не отображение памяти. Вам нужно будет ввести код dbm ish с привязкой к памяти и интегрировать его с shelve (напрямую или, более продуктивно, через anydbm).

+1

Я уверен, что BerkeleyDB использует 'mmap()', хотя бы так, что он может сломаться в неожиданных местах :) Я также видел реализации dbm, которые используют mmap. –

3

Я не уверен, что вы пытаетесь узнать, задав этот вопрос, так как вы уже знаете ответ: это зависит от используемого хранилища dbm. Некоторые из них будут использовать mmap - я ожидаю, что все, кроме dumbdbm, будут использовать mmap - но что? Накладные расходы в полке почти наверняка не находятся в варианте mmap-versus-fileIO, а в операции травления. Вы не можете умереть в dbm-файле самостоятельно в любом случае, поскольку модуль dbm может иметь свою собственную причудливую блокировку (и это может быть не один файл в любом случае, например, когда он использует bsddb.)

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