Выбор между shelve и sqlite для действительно большого словаря (Python)

У меня есть большой словарь Python векторов (150k векторов, 10k измерений каждый) чисел float, которые не могут быть загружены в память, поэтому я должен использовать один из двух методов для хранения этого на диске и извлечения определенных векторов, когда это необходимо. Векторы будут созданы и сохранены один раз, но могут быть прочитаны много (тысяч) раз, поэтому очень важно иметь эффективное чтение. После некоторых тестов с модулем shelve я склонен полагать, что sqlite будет лучшим вариантом для такая задача, но прежде чем я начну писать код, я хотел бы услышать еще несколько мнений по этому поводу... Например, есть ли другие варианты, кроме тех двух, о которых я не знаю?

теперь, предполагая, что мы согласны с тем, что лучшим вариантом является sqlite, другой вопрос касается точной формы таблицы. Я думаю об использовании мелкозернистой структуры со строками формы vector_key, element_no, value чтобы помочь эффективной разбивке на страницы, вместо хранения всех 10k элементов вектора в одной записи. Я буду очень признателен за любые предложения по этому вопросу.

2 ответов


вы хотите sqlite3, то если вы используете ORM, как sqlalchemy затем вы можете легко расти, чтобы расширить и использовать другие базы данных.

Shelve больше "игрушки", чем на самом деле полезно в производственном коде.

другой момент, о котором вы говорите называется нормализацией и я лично никогда не был силен в этой должен объяснить это для вас.

просто как дополнительная заметка этой показывает эффективность сбои в shelve vs sqlite3


поскольку вы имеете дело с числовыми векторами, вы можете найти PyTables интересная альтернатива.