2012-04-08 3 views
3

У меня есть запрос, который возвращает ~ 1 миллион строк в следующем формате:pytables - как ускорить поиск данных в списке

data = [[i['field1'], i['field2']] for i in tbl.where(conditions)] 

и принимает более 5 минут.

Когда я попробовал tbl.where(conditions) сам по себе, запрос занял менее секунды, поэтому большую часть времени, похоже, тратится на повторение строк в понимании списка.

Есть ли более быстрый способ извлечения поля1/field2 из запроса? (У меня есть достаточный объем оперативной памяти для хранения результатов в памяти)

ответ

0

Я ничего о своем «ТПС» не знаю, но вот некоторые вещи, которые я хотел бы посмотреть на:

  1. Ваш стол, используя сжатие? print tbl.filters.complevel
  2. Предполагая, что ваши «условия» зависят от полей таблицы, вы создали индекс для этих полей? print tbl.indexedcolpathnames
  3. Что делать, если вы используете idx = tbl.get_where_list(conditions), tbl[:]['field1'][idx]
  4. Если у вас достаточно оперативной памяти, попробуйте открыть файл в памяти:
    h5file = tables.open_file('myfile.h5', driver="H5FD_CORE")
    tbl = h5file.root.tbl и посмотреть, если это помогает.
Смежные вопросы