Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Парсер больших xml-файлов / 25 сообщений из 35, страница 1 из 2
21.07.2017, 08:17:44
    #39492752
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Знаю, что тема поднималась, но всё ж спрошу.
Есть адресный классификатор ФИАС в xml-формате. Файл с информацией о домах весит 20 гигов. Писец. Чем его реально парсить с приемлемой скоростью?
Попробовал NativeXML. Всё грустно.
Или уже не париться и взять dbf-версию ФИАС?
...
Рейтинг: 0 / 0
21.07.2017, 08:45:14
    #39492757
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
ExterisЗнаю, что тема поднималась, но всё ж спрошу.
Есть адресный классификатор ФИАС в xml-формате. Файл с информацией о домах весит 20 гигов. Писец. Чем его реально парсить с приемлемой скоростью?
Попробовал NativeXML. Всё грустно.
Или уже не париться и взять dbf-версию ФИАС?
Любым SAX-парсером, по идее, DOM не годится для таких объёмов.
...
Рейтинг: 0 / 0
21.07.2017, 09:01:32
    #39492767
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
+1. Он же очень регулярный. Тут проще всего TStreamReader использовать.
...
Рейтинг: 0 / 0
21.07.2017, 09:20:48
    #39492779
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
В ветке mssql есть целая ветка посвященная этой теме, я как раз ФИАС в mssql грузил через xmlbulkload. За пару часов фиас полностью обновляется.
...
Рейтинг: 0 / 0
21.07.2017, 09:22:15
    #39492780
Сюзанна
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
есть стандартный SAX парсер XmlLite, во всех Windows
А еще лучше взять dbf версию, в ней хоть ошибок меньше
...
Рейтинг: 0 / 0
21.07.2017, 09:27:58
    #39492787
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
СюзаннаА еще лучше взять dbf версию, в ней хоть ошибок меньше
ЕМНИП, на офсайте налоговой заявлено, что в скором времени от дбф должны отойти. Так что, это отсрочка решения проблемы.

А вот SAX for Pascal кто-нибудь юзал? Увы, его прекратили развивать в 2003г, последняя заявленная поддержка для Д7. Зато внутри архива демки и дока
...
Рейтинг: 0 / 0
21.07.2017, 09:36:01
    #39492790
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Exteris,

DBF распарсится быстрее
...
Рейтинг: 0 / 0
21.07.2017, 09:36:35
    #39492792
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Прикладываю счемы для импорта, адаптируете под себя
...
Рейтинг: 0 / 0
21.07.2017, 09:37:08
    #39492793
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
USE [fias]
GO
/****** Object:  StoredProcedure [dbo].[spXMLBulkLoad]    Script Date: 21.06.2016 10:36:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spXMLBulkLoad] (
	 @@File		SysName
	,@@Schema	SysName
	,@@DataBase	SysName	= '<DefaultDataBase>'
) AS BEGIN -- EXEC dbo.spXMLBulkLoad 'Z:\Path\Data.xml','Z:\Path\Schema.xsd'
	-- EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;
	DECLARE	 @ErrCode	Int
		,@OLEXMLBulk	Int
		,@ErrMethod	SysName
		,@ErrSource	SysName
		,@ErrDescript	NVarChar(4000)
	SET @ErrSource = 'c:\fias\XMLBulkError.xml'	--  файл ошибки (OPENROWSET требует константу)
	EXEC @ErrCode = master.sys.sp_OACreate 'SQLXMLBulkLoad.SQLXMLBulkload' ,@OLEXMLBulk OUT
	IF (@ErrCode = 0) BEGIN
		SET	@@DataBase	= 'Provider=SQLOLEDB;Data Source=.;DataBase=' + @@DataBase + ';Integrated Security=SSPI'
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'ConnectionString'	,@@DataBase		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ConnectionString'	GOTO Error END
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'ErrorLogFile'	,@ErrSource		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ErrorLogFile'	GOTO Error END
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'SchemaGen'	,1		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'SchemaGen'	GOTO Error END		
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'SGDropTables'	,1		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'SGDropTables'	GOTO Error END				
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'CheckConstraints'	,1			IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'CheckConstraints'	GOTO Error END
		EXEC @ErrCode = master.sys.sp_OAMethod		@OLEXMLBulk ,'Execute', NULL	,@@Schema, @@File
		IF (@ErrCode != 0) BEGIN
			SET @ErrMethod = 'Execute'
			DECLARE	 @Exist	Int
				,@Error	XML
			EXEC	master.dbo.xp_FileExist	@ErrSource, @Exist OUT
			IF (@Exist = 1) BEGIN
				SELECT	 @Error		= E.Error
							-- Обход глюка
							+ CASE	WHEN Right(E.Error,1) != '>'	THEN 'lt>'
								ELSE ''				END
				FROM	OPENROWSET(BULK 'c:\fias\XMLBulkError.xml',SINGLE_NCLOB)E(Error) -- Из @ErrSource файла
				SELECT	@ErrDescript	= IsNull(@ErrDescript	,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('/Result/Error')E(Error)
				SELECT	@ErrDescript	= IsNull(@ErrDescript	,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('/Error/Record')E(Error)
			END ELSE
				GOTO Error
		END
		GOTO Destroy
	Error:	EXEC @ErrCode = master.sys.sp_OAGetErrorInfo	@OLEXMLBulk ,@ErrSource OUT ,@ErrDescript OUT
	Destroy:EXEC @ErrCode = master.sys.sp_OADestroy	@OLEXMLBulk
	END ELSE
		SELECT	 @ErrMethod	= 'SQLXMLBulkLoad.SQLXMLBulkload'
			,@ErrSource	= 'sp_OACreate'
			,@ErrDescript	= 'Ошибка создания OLE объекта'
	-- Вывод ошибок
	IF (@ErrMethod IS NOT NULL) BEGIN
		RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s',18,1,@ErrMethod,@ErrSource,@ErrDescript)
		RETURN	@@Error
	END
END
...
Рейтинг: 0 / 0
21.07.2017, 09:38:56
    #39492795
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Сразу предупреждаю что никаких заливок сразу в рабочие таблицы, сначала в промежуточные, а уже из них переносишь в рабочие. меня минут 20 переносилось кажется.
...
Рейтинг: 0 / 0
21.07.2017, 09:53:24
    #39492800
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
А, да, в этом году мы отказались от использования своего ФИАС, используем сервис https://dadata.ru/
Работает хорошо, и больше никакой головной боли об адресах и обновлении фиас у себя
...
Рейтинг: 0 / 0
21.07.2017, 10:03:06
    #39492808
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
SOFT FOR YOUExteris,

DBF распарсится быстрее
Я вот тоже так думаю.
...
Рейтинг: 0 / 0
21.07.2017, 10:11:07
    #39492819
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
СюзаннаА еще лучше взять dbf версию, в ней хоть ошибок меньше
Они разве не идентичны?
...
Рейтинг: 0 / 0
21.07.2017, 13:21:30
    #39492950
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Сюзаннаесть стандартный SAX парсер XmlLite, во всех Windows

XmlLite - не SAX-парсер, а pull-парсер.

Он тоже "лёгкий", но у него совсем противоположная логика работы.

SAX-парсер входит в состав MSXML6, наряду с DOM-парсером

Оба MSXML6 и XMLLite появились то ль в XP SP3 то ли даже в XP SP2

Есть так же сторонняя реализация XMlLite под Линукс, но насколько быстрая и надежная - хз, в глаза ее не видел
...
Рейтинг: 0 / 0
21.07.2017, 14:03:27
    #39492961
Bali
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
ДокЕМНИП, на офсайте налоговой заявлено, что в скором времени от дбф должны отойти. Так что, это отсрочка решения проблемы.
А где вы такое прочитали?, я что то не нашел. Отказ от KLADR v4 - да, а что ФИАСа не будет в DBF? не нашел.
...
Рейтинг: 0 / 0
21.07.2017, 17:45:52
    #39493100
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
В относительно новой библиотеке от гуру xml -- oxml -- есть куча различных парсеров/интерфейсов к ним, в т.ч. и поточные (SAX).
...
Рейтинг: 0 / 0
21.07.2017, 20:21:19
    #39493151
Парсер больших xml-файлов
Распарсивал как-то xml от ФИАС, там были иногда неверные длины полей, плюнул, скачал dbf версию
И быстрее и проще извлекать
...
Рейтинг: 0 / 0
21.07.2017, 21:00:27
    #39493163
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
А какой профит от пул-парсеров?
...
Рейтинг: 0 / 0
22.07.2017, 01:40:50
    #39493230
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
BaliОтказ от KLADR v4 - да, а что ФИАСа не будет в DBF? не нашел
сорьки, это я что-то недопонял, когда бегло читал. Действительно, ДБФки останутся
...
Рейтинг: 0 / 0
22.07.2017, 12:44:40
    #39493289
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
А теперь расскажите сколько у Вас эти dbf-ки в БД заливаются, особенно если не через bc
...
Рейтинг: 0 / 0
22.07.2017, 13:46:47
    #39493296
eeeу
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Внезапно dbf это БД
...
Рейтинг: 0 / 0
22.07.2017, 14:41:54
    #39493304
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
eeeу,

Так они всёравно не индексированные
...
Рейтинг: 0 / 0
22.07.2017, 16:49:01
    #39493336
eeeу
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
SOFT FOR YOU, а xml индексирован, угу.
Файл 20 гигов, а dbf для 1 области примерно 0,2 гига, т.е. в 100 раз меньше
и что проще индексировать?
xml не для хранения информации предназначен, по любому нужно распарсивать и хранить в БД.
а dbf уже в формате БД, не нравится формат легко конвертируется в другой.
И сравните размеры файлов xml и dbf
...
Рейтинг: 0 / 0
22.07.2017, 17:01:37
    #39493342
Bali
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
эндиА теперь расскажите сколько у Вас эти dbf-ки в БД заливаются, особенно если не через bc
А зачем их целиком закачивать? Там по каждому объекту вся история изменений, с момента попадания объекта в ФИАС, а реально нужны только актуальные данные. Да и в структуре записи полно ненужной информации одних GUIDов 5 штук.
В MSSql Express ее и не запихнешь. Закачивают кому что нужно.
...
Рейтинг: 0 / 0
22.07.2017, 17:09:31
    #39493344
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсер больших xml-файлов
Вот на моменте легко конвертируется, остановимся поподробнее. Представим себе абстрактного программера которому надо написать конвертилку в MSSQL. Он садится и пишет построчное копирование через insert в таблицы sql сервера. Сколько часов у него будет происходить это порно? Сам dbf для хранения тоже не ахти как удобен, хранимку не написать, план запроса с оптимизацией не посмотреть и только на секундочку представим что ФИАС посути древовидная бд. И то что я сделаю обычным запросом в любом адекватном sql сервере, на базе dbf превратится в банальное извращение. imho что фиас в dbf, что в xml сделан исключительно для трансфера информации и никак не для использования именно в этих форматах.
Да и какой больной человек будет таскать с собой для локальной аппликухи базу весом в несколько сотен мегабайт для решения задачи хранения адреса? Если у вас локальное приложение дергайте веб-сервис, хотите свой, хотите чужой, не суть. Суть в том что за этим вебсервисом будет не dbf, а нормальный sql сервер. А если у вас клиент/сервер то тем более весь этот фиас будет в нем.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Парсер больших xml-файлов / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]