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