Возникла проблема - файл заметно увеличился за последние годы и теперь парсить его стало гораздо сложнее. Суть такова - есть некоторый самодельный скрипт на питоне, для парсинга используется xml.sax, но во время разбора скрипт начал падать от нехватки памяти. Вопрос - может кто-то подобным уже занимался и наталкивался на грабли с разбором гигантских файлов?
Или может просто я изобретаю велосипед и есть более подходящее решение для загрузки в постгрес минимальных данных для роутинга? по сути нужны только часть данных из ways, nodes и relations в некотором своём представлении.
Кстати, была мысль пытаться читать файл блоками, но всё равно все результаты придётся хранить в памяти, чтобы потом обработать и сложить в выходной файл должным образом, боюсь, что памяти не хватит, или я не прав?
Работаю вот с такой железякой на FreeBSD:
CPU: Intel(R) Xeon(R) CPU E5606 @ 2.13GHz (2141.95-MHz K8-class CPU)
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
real memory = 51543801856 (49156 MB)
local.osm сконвертируйте osmconvert’ом в local.o5m, отфильтруйте osmfilter’ом дороги, сконвертируйте обратно в .osm.
А как строится роутинг в постгресе? Используйтся pgRouting или чтото другое/свое?
Если pgRouting, то не изобретайте велосипед, а используйте osm2pgrouting.
Похоже, что у меня именно такой случай, запилено примерно так:
from xml.sax import make_parser as XMLParser
from xml.sax.handler import ContentHandler
parser = XMLParser()
parser.setContentHandler( self )
try:
parser.parse( self.filename )
except Exception, e:
print 'parser.parse error'
падает как раз на этом моменте, может попадался какой-нибудь кошерный сакс, который более эффективно работает?
dudka используется пока своё, pgRouting как раз рассматриваю как возможную альтернативу. Сейчас собственная простейшая реализация поиска кратчайшего пути на питоне в постгресе