$m1t
Июль 17, 2009 01:09:21
Есть набор файлов f_1,…f_N, N~10^6, в каждом из которых есть набор id-шек. id- это некоторое целое число от 1 до 10^6–10^7. В каждом файле относительно мало id-шек, не меньше 5 штук, в среднем около 100, максимум 10^4.
Так вот, теперь вопрос – как построить словарь в котором по каждой id-шке будут храниться номера файлов, в которых она содержится?
Наивный подход – считать все в словарь и циклом строить новый, дико тормозит, хотя бы потому, что этот словарь не лезет в оперативку.
Что в этом случае можно сделать?
PooH
Июль 17, 2009 07:36:01
можно попробывать использовать встроенный модуль anydbm, интерфейс практически такой же как и у словаря, но данные хранит в файле на диске
Ed
Июль 17, 2009 13:44:01
Поместится ли в память результат? Если да, то просто читайте из файлов последовательно по одному файлу за раз и заполняйте словарь-результат. Если не лезет, то используйте какую-нить СУБД. Алгоритм тот же, только вместо словаря пишите результат в базу. Если читать по одному файлу за раз медленно, то читайте по несколько параллельно.