2012-06-05 1 views
9

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

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

ответ

9

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

Shelve - это скорее «игрушка», чем полезная в производственном коде.

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

Подобно тому, как дополнительная нота this показывает провалы производительности в полке против sqlite3

+0

Привет, Я видел перед ссылкой, которую вы предлагаете, проблема в том, что она проверяет только написание - не чтение, которое является моей самой большой заботой. Что касается нормировки, то обе формы, которые я предлагаю выше, уже находятся в нормальной форме, я просто задаюсь вопросом, какая из двух будет наиболее эффективной для чтения. Думаю, я смогу выполнить некоторые тесты на этом. В любом случае, спасибо за ответ :) – dkar

3

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

+0

Привет, это действительно интересная альтернатива, я лучше посмотрю на это. Спасибо за предложение :) – dkar

Смежные вопросы