2013-04-02 4 views
3

У меня есть записи (~ 88 миллионов людей) в следующем формате:быстрого поиска в питоне

userid age test value 
111 33 SODIUM 140 
111 34 POTASSIUM 4.1 
333 65.4 CHLORIDE 107 
444 24 BICARBONATE 24 

мне нужно создать быстрый поиск для value в последнем столбце приведен первый три пункта (т.е. . userid, age, test).

Каков наилучший способ повторного поиска в этих данных? Я думаю, что это создать словарь, в котором keys являются кортежем (userid, age, test) и значениями являются value. В прошлом я использовал подобный метод, и этот метод был очень медленным на гораздо меньших данных.

+9

вы используете базу данных. НЕ загружайте 88 миллионов записей в память в python. это безумие/смехотворно. –

+0

LOL ... Возможно http://docs.python.org/2/library/string.html#string.split – ASPiRE

+1

Словари основаны на хеш-таблицах, которые примерно так же быстро, как и Python. Если это было слишком медленно для вас, вам нужен другой подход. Как говорит @MarcB, база данных более подходит для этого объема данных, но она будет еще медленнее. –

ответ

0

Wo, wo, wo there. 88 миллионов? Как и в, 88 000 000?

Вы должны использовать базу данных. Попробуйте redis для очень легкой, быстрой альтернативы. Вы можете использовать первые три значения для ключа.

redis даже даст вам отличные операции над данными, вы можете сэкономить себе путешествие.

+0

Euh no, вы ошибаетесь миллионы с миллиардами. Он составляет 88.000.000 (только :-)) –

+0

Ха-ха! Действительно! Хорошо используйте «dict»: P – slezica

3

Если вы не заботитесь об использовании памяти: включите в dict. Обратите внимание, что вышеупомянутое, вероятно, будет использовать всю вашу память, если у вас нет лота. Сделайте это пополам и посмотрите, сколько вы можете загрузить. Быстрый тест показывает, что вам нужна не менее 16 ГБ встроенной памяти.

В противном случае: используйте базу данных. SQLite включен, PostgreSQL хорош для профессионального использования, но есть нагрузки и множество альтернатив, включая NoSQL, такие как Redis и т. Д., Которые могут быть хорошими здесь.

5

Вы должны использовать базу данных, у вас слишком много записей. Работа базы данных - это поиск и индексы по большому количеству данных.

+7

Через 5 лет кто-то прочитает этот ответ и скажет: «База данных? Для менее 100 миллионов записей? Смешно». :) – Matthias

+0

Если такие вещи, как 'LINQ' в' C#', интегрированы в другие языки для фильтрации и фильтрации через наши коллекции ... тогда да, это может устареть в будущем ... Хотя это все равно будет напоминать более или менее Язык SQL. –

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