У меня есть очень большой набор данных - миллионы записей, которые я хочу хранить в Python.Возможно, я работаю на 32-битных машинах, поэтому я хочу, чтобы набор данных находился в диапазоне сотен мегабайт, а не раздувалась намного больше этого значения.
Эти записи - представляют отношение M: M - дваИдентификаторы (foo и bar) и некоторые простые метаданные, такие как метки времени (baz).
В некоторых foo есть слишком почти все столбцы, а в некоторых есть почти все foo.Но есть много баров, которые почти не имеют foos, и много foos, которые почти не имеют баров.
Если бы это была реляционная база данных, отношение M: M было бы смоделировано как таблица с составным ключом.Конечно, вы можете удобно искать по любому ключу компонента по отдельности.
Если вы храните строки в хеш-таблице, вам необходимо поддерживать три хеш-таблицы, так как составной ключ хэшируется, и вы не можете искать в компоненте.ключи с ним.
Если у вас есть какой-то отсортированный индекс, вы можете использовать лексическую сортировку для итерации первого ключа в составном ключе, и вам нужен второй индекс для другого ключа;но для меня менее очевидно, к какой фактической структуре данных в стандартных коллекциях Python это равняется.
Я рассматриваю диктат foo, в котором каждое значение автоматически перемещается из кортежа (одной строки) в список (изкортежи строк), чтобы диктовать в зависимости от некоторых пороговых значений, и другой диктант бара, где каждый является отдельным foo или списком foo.
Существуют ли более эффективные - по скорости и в пространстве - способы сделать это? Любой тип для индексов или что-то в этом роде?
(Я хочу сохранить их на Python, потому что у меня проблемы с производительностью баз данных - как SQL, так иРазновидности NoSQL. В конечном итоге вы становитесь связанными с IPC memcpy и serialization. Это другая история, однако ключевой момент заключается в том, что я хочу переместить данные в приложение, а не получить рекомендации по их удалению из приложения;))