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

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

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


person dkar    schedule 05.06.2012    source источник


Ответы (2)


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

Shelve больше похож на «игрушку», чем на самом деле полезен в рабочем коде.

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

В качестве дополнительного примечания это показывает сбои производительности. на полке против sqlite3

person Jakob Bowyer    schedule 05.06.2012
comment
Привет, я видел перед ссылкой, которую вы предлагаете, проблема в том, что она проверяет только запись, а не чтение, что меня больше всего беспокоит. Что касается нормализации, обе формы, которые я предложил выше, уже находятся в нормальной форме, мне просто интересно, какая из двух будет наиболее эффективной для чтения - я думаю, что могу провести некоторые тесты на этом. В любом случае спасибо за ответ :) - person dkar; 05.06.2012

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

person Janne Karila    schedule 05.06.2012
comment
Привет, это действительно интересная альтернатива, я посмотрю на нее получше. Спасибо за предложение :) - person dkar; 05.06.2012