powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как распараллелить загрузку XML?
122 сообщений из 122, показаны все 5 страниц
Как распараллелить загрузку XML?
    #39374580
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот скажем нужно загрузить xml размером 1GB.
Можно ли каким-то образом организовать прием и парсинг XML несколькими процессами одновременно?

PS: Идейка вот такая появилась.
При формировании big xml добавлять в них некие служебные nodes, которые как-бы подсказывают ридеру XML, что части xml между
служебными nodes можно парсить параллельно.
Т.е. как-бы логически разбиваем xml на n частей, каждую из которых можно парсить параллельно.
Ну и конечно потом каждое из полученных деревьев линкуем к main three.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374581
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012... парсинг XML несколькими процессами одновременно?Пардон.
Правильно где-то так:
"... парсинг XML несколькими thread одновременно?"
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374583
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парсинг XML - это легкая операция. Думаю что скорость вычитвания тегов
будет близка к чтению дискового I/O. Поэтому вряд-ли вы что-то выиграете
нагружая I/O систему. Можете даже проиграть.

Возможно вам параллелить нужно не парсинг XML а процессинг. Тоесть те операции
которые стоят выше парсинга.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374587
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПарсинг XML - это легкая операция.Имеются свои "заморочки" ...

maytonДумаю что скорость вычитвания тегов
будет близка к чтению дискового I/O.Дисковые операции всегда были на порядки медленнее работы в памяти.
Прочитать за раз 1CB /например если нам нужен DOM/ это один из подходов.
А вот если читаем 100MB и стартуем thread, который парсит эту часть xml, ... - будет наверняка быстрее.
Во-первых не ждем загрузки всего xml.
И что самое главное не один thread парсит xml, а несколько одновременно.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374589
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам наверное надо все-таки дать больше инфы о самой задаче т.к. по моему
скромному мнению не существует генерализованного подхода к ршению
вашей специфичной задаче.

Возможно вам подойдет конвейер из 1 процесса XML-парсера, быстрой очереди
типа disruptor, и пула рабочик worker-threads, которые эти задания расхватывают
и делают. Как то так вобщемто.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374590
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012А вот если читаем 100MB и стартуем thread, который парсит эту часть xml, ... - будет наверняка быстрее.Кстати это суждение не сложно проверить:
Берем любой тестовый файл размером 1GB;
Пишем алгоритм, который читает 100MB и запускает thread, который скажем подсчитываем количество слов, ...
Thread работаем, а мы читаем следующие 100MB и ... /см. строчку выше/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374591
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012И что самое главное не один thread парсит xml, а несколько одновременно.

Не выйдет: парсинг любого текстового ML это последовательная операция, не распараллеливается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374592
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, есть предположение что автор делает свой Hadoop
на XML-ах... но опять-же даже там имеет место partitioning в виде
файлов.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374593
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВам наверное надо все-таки дать больше инфы о самой задачеДа конкретной задачи пока нет.
Просто этими днями появилась у меня необходимость разработать а-ля MSXML API совместимую library для работы с xml.

Взял за основу TinyXML2.
Дополнил ее классами а-ля MSXML ...
Собственно теперь TinyXML2 как-то неловко и называть TinyXML2 ... /выкладывать на github пока не буду/.

Так вот load() в TinyXML2 читает за раз весь XML.
Вот и пришла мысль, что для небольших xml такой подход сойдет, а вот для big xml скорее всего нет.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374594
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 /выкладывать на github пока не буду/.

На этой печальной ноте наверное можно закрывать топик.

Философские беседы у нас обычно идут в ПТ. А здесь мы обсуждаем код.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374596
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНа этой печальной ноте наверное можно закрывать топик.А что тут печального?
Топик завел не потому чтобы рассказать о некоих своих велосипедах, а для обсуждения конкретного
алгоритмического вопроса.

Что бы не было вам печально подскажу где взять исходные тексты а-ля MSXML library.
В исходниках ReactOS имеется полноценные исходные тексты а-ля MSXML library /мне они не подошли/.

Что касается моего велосипеда, то кому он нужен?
Можно к примеру просто использовать готовое API Microsoft /и ни каких проблем/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374597
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прочитать целиком в память будет быстрее. там кто-то тестировал на хабре, spirit + целиком в память побило все рекорды.
дисковые операции медленные еще и потому, что им нужно головку позиционировать. когда прочитаешь 100мб, потом какой-то другой файл прочитается (другим процессом), потом еще 100 - головку опять позиционировать... короче быстрее за раз его прочитать.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374601
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мир сошел с ума.

Если вы спецом пишете ПО под сервер где можете кидаться гигами
направо и налево - то наверное надо сообщить об этом в первых
строках сообщения. А так вообще ... оператива всегда будет стоить
дороже чем диск. И этот инженерно-экономический подход будет доминировать
всегда.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374602
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackдисковые операции медленные еще и потому, что им нужно головку позиционировать. когда прочитаешь 100мб, потом какой-то другой файл прочитается (другим процессом), потом еще 100 - головку опять позиционировать... короче быстрее за раз его прочитать.Гм.
Да ведь речь идет не об нескольких процессах, а об одном.
Читаем 100Mb запускаем thread, продолжаем читать ...
Ну хорошо скажем так.
Читаем за одну операцию чтения весь 1GB и затем разбиваем 1GB на 10 частей, каждая из которых парсится отдельным thread.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374604
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Читаем 100Mb запускаем thread, продолжаем читать ...

После блока в 32к скорость чтения уже не повышается, так что зря тратить мегабайты не
имеет смысла.

Владимир2012затем разбиваем 1GB на 10 частей
Проблема в том, что текстовый файл не разбивается. Нет к нему рандомного доступа, только
последовательный.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374606
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли вы спецом пишете ПО под сервер где можете кидаться гигами
направо и налево - то наверное надо сообщить об этом в первых
строках сообщенияДа нет же.
Еще раз говорю.
Тема топика навеяна всего лишь обсуждением абстрактной задачи ...

Хотя впрочем если считаете, что это надуманная задача, которую нет смысла обсуждать, то возражать не буду.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374607
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПроблема в том, что текстовый файл не разбивается. Нет к нему рандомного доступа, только
последовательный.Дмитрий.
Обратите внимание на то, что в начале топика мною было преложено дополнять xml некоими служебными nodes,
назначение которых состоит в том, что при считывании xml нам известны "логически правильные" части
xml, которые можем парсить в отдельных thread.
Sorry повторюсь.
Так вот эти служебные nodes как раз и решают ту задачу об которой вы говорите "... текстовый файл не разбивается. Нет к нему рандомного доступа, только
последовательный.".
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374609
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012если считаете, что это надуманная задача, которую нет смысла обсуждать, то возражать не буду.

Задача не надуманная, но её решение не принесёт счастья.

Вот смотри: у меня есть софтина, читающая и парсящая определённый файл. Она это делает на
скорости примерно 10 Мб в секунду. При том, что просто чтение этого файла с диска идёт на
скорости 100 Мб в секунду. Отсюда вытекает, что если я в этой софтине наворочу
многопоточность, очереди, совмещу чтение и обработку и таким образом доведу расходы
времени на собственно чтение до нуля, то получу общее ускорение в 10% максимум. Оно того
не стоит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374611
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОтсюда вытекает, что если я в этой софтине наворочу
многопоточность, очереди, совмещу чтение и обработку и таким образом доведу расходы
времени на собственно чтение до нуля, то получу общее ускорение в 10% максимум. Оно того
не стоит.Вообщем то да.
Но заметьте парсинг идет с скростью 10MB в секунду, значит сколько времени понадобится для парсинга 100MB - 10 секунд.
А вот если ядрышки вашего процессора загрузить "по полной", а их у вас скажем будет 10,
То сколько времени понадобится для парсинга 100MB?
Не 10 секунд, а всего лишь 1 секунда.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374612
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012эти служебные nodes как раз и решают ту задачу об которой вы говорите

Не решают, поскольку для их нахождения файл надо распарсить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374614
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе решают, поскольку для их нахождения файл надо распарсить.Да зачем его парсить?
Когда создается big xml программист знает в какие места xml нужно добавить служебные nodes.
Далее все просто.
За одну и операцию чтения читаем 1GB и далее находим в memory обычным циклом находим эти служебные
nodes.
И все!
После этого запускаем n thread каждый из которых знает какую часть xml он должен парсить.

Sorry. Еще раз.
Служебные nodes избавляют нас от необходимости парсинга всего xml ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012То сколько времени понадобится для парсинга 100MB?

Ровно столько же, поскольку формат этого файла такой же последовательный, как и XML. Чтобы
найти начало блока N, нужно предварительно обработать блок N-1. А если в него ввести
метаструктуры (те самые "служебные ноды" о которых ты толкуешь), то это будет уже совсем
другой формат.

В твоём случае, для распараллеливания обработки, куски XML придётся обернуть в XDR, отчего
файл в целом уже перестанет быть XML-ем. Так, может, сразу не мучиться и вместо XML
использовать XDR, который и сам по себе парсится легче, да ещё и распараллеливается при
желании?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374619
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012, так что ли?

vladimir-s.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version='1.0'?>
<list>
  <!-- Chunk #1 -->
  <row>.....</row>
  <row>.....</row>
   ......
  <!-- Chunk #2 --> 
  <row>.....</row>
  <row>.....</row>
   ....
</list>
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374621
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ твоём случае, для распараллеливания обработки, куски XML придётся обернуть в XDR, отчего
файл в целом уже перестанет быть XML-ем. Так, может, сразу не мучиться и вместо XML
использовать XDR, который и сам по себе парсится легче, да ещё и распараллеливается при
желании?..У меня "конкретной" задачи пока нет /обсужденение абстрактной задачи/.
Да безусловно имеются некоторые текстовые файлы, которые нельзя "разбить" на логические части так,
чтобы можно все эти части парсить параллельно.
А вот к примеру /экспромтом/ берем xml файл в котором находятся паспортные данные 10 000 000 человек и все
nodes однотипные.
В этом случае ИМХНО вполне можно разбить этот big xml на n частей, каждую из которых будет парсить отдельный thread.

PS: В целом конечно с вами согласен. Имеются "не разбиваемые" текстовые файлы /например текст огромной программы/ ...
Но имеются и не мало big текстов, которые пригодны для параллельной обработки.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374622
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВладимир2012, так что ли?Да ... /и вариации на тему/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374624
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012maytonВладимир2012, так что ли?Да ... /и вариации на тему/.
Ты про вариации - уточняй лучше.

А по поводу моего варианта - его за 1-й проход следует разбить на куски и сохранить их:

Код: plaintext
1.
2.
3.
vladimir-s.chunk-01.xml
vladimir-s.chunk-02.xml
....


Сам процесс резания - прекрасно совмещается со скачиванием (потоковые операции).

Орининал - грохнуть. И дальше спокойно работать как в Hadoop/Spark. Раздавая
на map-reduce конвейер все твои потоки nodes.

Твоя идея работать с целым XML при этом сломав XML-парсер - это фикция.
У большинства специалистов - это вызовет гамму чувств от удивления
до глухого раздражения. И здесь даже говно-код - не то слово. Здесь
говно-замысел и говно-проектирование будет очень красочным и точным
эпитетом. Уж поверьте мне ... я слышал мат-перемат своих коллег и за меньшие огрехи
в проектировании. А зачем вам портить себе карму?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374626
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТвоя идея работать с целым XML при этом сломав XML-парсер - это фикция.Речь идет не о том, что нужно "сломать" парсер, а о том что можно разработать вариант параллельного парсинга.

Что касается кармы, то это удел тщеславных.
От меня не "убудет" если меня поругают, не "прибудет" если похвалят.
Проще говоря меня не задевает ни первое, ни второе.
Кого задевает - их проблемы.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374627
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012maytonТвоя идея работать с целым XML при этом сломав XML-парсер - это фикция.Речь идет не о том, что нужно "сломать" парсер, а о том что можно разработать вариант параллельного парсинга.

Ты опиши по пунктам как в SR. Что такое параллельный парсинг.
Что идет на вход. Какой формат. Схема.
Что такое нода. По какому принципу ее ставят.

Какова вообще мотивация это все делать. Какие будут
преимущества. И кто будет заинтересован использовать это ПО.

По моему скромному убеждению уверенно описанный SR - это на 50%
решенная задача. И если ты к этому времени не разочаруешся
в своей идее - то она достойна жить.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374631
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто такое параллельный парсингК примеру как добавляем node в DOM:

Код: plaintext
1.
2.
3.
4.
XMLElement * pListElement = xmlDoc.NewElement( "Item" );

pListElement->SetText(item);
InsertEndChild( pListElement );



Так вот каждый thread при параллельном парсинге создает некий свой document,
А затем просто линкуем эти root nodes к main document.
/конечно это упрощенное объяснение/.

Вообще то xml это не моя "стихия". Не хвалю их и не порицаю.
Вполне достойный формат, который нужно знать где его "уместно" использовать.

maytonТы опиши по пунктам как в SR. Что такое параллельный парсинг.
Что идет на вход. Какой формат. Схема.
Что такое нода. По какому принципу ее ставят.Пример xml приведенный вами ранее вполне подходит для обсуждения.

То бишь - "Будет ли выгода от параллельного парсинга?".
Скорее всего - да.

Однозначно видно, что для некоторых xml такой алгоритм параллельного парсинга будет ускорять загрузку xml в память.

Можно ли разработать алгоритм для любого типа xml?
Скорее всего да, но при этом нужно будет расширить схему xml.

PS: Для меня это пока не актуальная задача, а тема к обсуждению ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374641
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Взял за основу TinyXML2.
Дополнил ее классами а-ля MSXML ...Вообще то работа полностью не закончена.
Да, добавил классы:
class XMLDOMNodeList;
class XMLDOMSelection;

И в другие классы добавил много методов для обеспечения совместимости с MSXML.

Но MSXML имеет много интерфейсов и приходится делать двойную работу:
- обеспечить функциональность C++ классов;
- обеспечить функциональность всех интерфейсов для automation

PS: Многое уже сделано и функционирует, но потрудиться нужно будет еще крепенько.

Для чего мне нужен а-ля MSXML велосипед?

Ну скажем будет функционировать и в Linux /для меня это не главное/.

Можно будет использовать в 1С /можно правда и без этого велосипеда напрямую использовать "Msxml2.DOMDocument.4.0" или "Msxml2.DOMDocument.6.0"/.
Скорее забавно.

Тогда для чего?

Расширю DOM новой функциональностью, которая позволит смотреть на "документ" и как предусмотрено в "W3C DOM", так и иной.
В основном это коснется того какие типы данных можно будет хранить в nodes /получать к ним доступ .../.

Но для начала мне нужны "кости" - обеспечить поддержку существующего стандарта.
Вот эту "грязную" и "неблагодарную" работу сейчас и делаю /до "печенек" еще дошел .../.

https://ru.wikipedia.org/wiki/Document_Object_Model

Наши руки - не для скуки!
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374668
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SAX
StAX
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374670
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.SAX
StAXСуществует множество готовых libraries для работы с xml.
Поэтому однозначно мой велосипед не достоин того, чтобы его публиковать.
Cкорее когда разработаю некую новую модель представления данных или расширю архитектуру DOM.

Архитектура DOM что-то мне не очень нравится (но она есть и ее многие используют ...) /.
И поверьте причина не в том, чтобы что то рушить ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374671
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такие маркеры лучше делать бинарными, например три нуля (0x00), их тогда быстрее и легче будет найти. потом можно будет загрузить файл целиком, разбить на куски, потому их парсить отдельно.. но не думаю, что это даст прирост к скорости: фактически парсинг будет состояить из вух проходов - один разбивает на куски, другой парсит. то есть все равно нужно будет последовательно прочитать файл.

но можно сделтаь по-другому. когда такой файл пишется, его можно разбить на куски фиксированного размера. например по 10мб. нужно проконтролировать, чтобы на разрыве кусков не было разрыва нод (заполняешь пробелами до следующего куска, если следующая нода не влезает). тогда, можно прочитав файл, просто дать разные итераторы разным потокам. например лежит весь файл в std::string, тогда одному даешь begin, advice(begin,10485760), следующему также, только не begin, а то, что ты получил на прерыдущем шаге.. так они будет не пересекаясь парсить.
но тут нужно будет проследить (при сохранении), что кусок валиден. и маркеров не нужно в таком случаи.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374676
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackфактически парсинг будет состояить из вух проходов - один разбивает на куски, другой парсит. то есть все равно нужно будет последовательно прочитать файл.
Насколько понял - в целом идея разработки возможности параллельного парсинга xml /скорее всего здесь потребуется расширение самой схемы представления xml/ не совсем утопична.

В какой-то мере цель топика - обсуждение того каким должен быть xml, чтобы его можно было параллельно парсить.

Эврика!

В начале xml помещаем node, содержащий данные об "логических" частях xml.
И не надо тратить время на поиск этих частей и не нужны ни какие вспомогательные nodes.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012, ты про DOM забудь сразу. Это будет полный провал.
DOM аллоцирует памяти соизмеримо с XML документом (а то и больше).

Я не просто так настойчиво тебя спрашивал про характер исходных
данных. Я пытался понять работаешь ли ты с документом или с таблицей.
Если он выглядит как последовательность строк (CSV => XML tags)
то для его парсинга разработчики используют SAX, Stax, XmlReader e.t.c.
Это все streamable API который быстр и рационален с точки зрения memory.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374678
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDOM аллоцирует памяти соизмеримо с XML документом (а то и больше)Не хочу портить себе настроение ... /о DOM много чего хочется высказать ..., но имеются в нем и "светлые пятна"/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374681
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Эврика! "На паровоз вперед летит. В DOM 1024 наша остановка. Другого нет у нас пути в руках у нас селедка".
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374682
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по гигабайтным XML - DOM строить - странная задача.

вычитывать гигабайтный файл в память перед разбором - ещё веселее
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374684
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпо гигабайтным XML - DOM строить - странная задача.Дело не в гигабайтных xml и DOM.
Вопрос в том - "Каким должен быть xml, чтобы он подходил для алгоритма параллельного парсинга?"
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374685
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton И здесь даже говно-код - не то слово. Здесь
говно-замысел и говно-проектирование будет очень красочным и точным
эпитетом.

+много

Я не понимаю любителей конкурировать со стандартными средствами обработки XML, тем более, таким извращенным способом
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374687
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЯ не понимаю любителей конкурировать со стандартными средствами обработки XML, тем более, таким извращенным способомВы о чем?
У меня и в мыслях не было с кем то конкурировать или некие вариации на тему.

Пожалуй еще раз изложу желательного дальнейшего обсуждения /если кому это не нужно, то не стоит об этом всех извещать/ -

Каким должен быть xml, чтобы он подходил для алгоритма параллельного парсинга?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374691
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Вопрос в том - "Каким должен быть xml, чтобы он подходил для алгоритма параллельного парсинга?"
он не должен быть XML ))

посмотри VTD-XML
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374694
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012maytonDOM аллоцирует памяти соизмеримо с XML документом (а то и больше)Не хочу портить себе настроение ... /о DOM много чего хочется высказать ..., но имеются в нем и "светлые пятна"/.

Имеются. С DOM моделью обычно работают когда документ имеет сложную (рекурсивную)
структуру наподобие MS-Word document и нужно к примеру взяв XPath выражение
выбрать множество атрибутов. Пройтись по ним и затем вызвать еще одно XPath... и так далее.
Или когда нужно модифицировать контент. Вставить что-то в середину к примеру.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374698
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилон не должен быть XML ))Золотые слова.
Но все же xml имеет свою нишу /и не малую/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374710
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Но все же xml имеет свою нишу /и не малую/.
и оставьте его в покое.

двойное чтение - первое - для поиска маркеров, второе - для разбора - вряд ли увеличит производительность.

Если требуется многократная обработка - после первого же парсинга хранить данные в ином формате,
экспортировать как XML - по запросу
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374721
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропили оставьте его в покоеOk!

Ладно, признаюсь.

Развиваю library для работы с binary three /ни какой-то там binary xml, json, .../.
Three можно будет использовать и в качестве некоторой базы данных и как средство создания и работы с базами метаданных.

Library для работы с xml мне нужна в основном для интеграции binary three с xml.

PS: Поэтому скорее всего развивать xml не буду /видно будет .../.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374725
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012, MongoDb юзал?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374728
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012А вот если читаем 100MB и стартуем thread, который парсит эту часть xml, ... - будет наверняка быстрее.
Во-первых не ждем загрузки всего xml.
И что самое главное не один thread парсит xml, а несколько одновременно.
Допустим прочитали мы ровно 100 Мб и на конце получили обрубок чего-то. Вторые 100 Мб начинаются вообще непонятно с какого места, т.к. это мы узнаем только по окончании разбора первых 100 Мб, как начинать работать второму потоку?

Допустим это исходный XML, красным точка разрыва (по слову images)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  <table class="msgTable">
    <tr>
        <td id="id20045398" class="messageHeader" colspan="2"><img src="/forum/ima|ges/message.gif" alt="">
                &nbsp;Как распараллелить загрузку XML?&nbsp;
        </td>
    </tr>
  </table>


Как тут второму потоку начать работать?
Допустим добавили какое-то выравнивание по началу ближайшего тэга (<img> например), но как узнать что мы находимся в table/tr/td ? Без этого знания проблематично обрабатывать.



ИМХУ если уж параллелить, то по-другому:
1. один поток читает файл и пишет в память до получения законченного блока, например <table>...</table>, блок ставит в очередь на обработку, и т.д. поблочно до конца файла. Читать он будет все равно медленнее чем блоки искать.
2. пул потоков, которые вынимают из очереди блоки и делают полный разбор

Тут без знания структуры не обойтись, допустим это одна большая таблица с кучей строк
Код: plaintext
1.
<table><tr>...</tr><tr>...</tr><tr>...</tr><tr>...</tr><tr>...</tr></table>


тут получение блока <table>...</table> не даст никакого параллелизма, т.к. он один, надо изначально задать что бить на строки, т.е. блоки table/tr.

Дальше скорее всего потребуется задание нескольких обработчиков различных типов блоков, например если таблиц 3 то для строки каждой надо свой обработчик, т.е. разбирающие потоки должны для table1/tr запускать parser1(), table2/tr - parser2() и т.д.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374735
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВладимир2012, MongoDb юзал?Нет.
Интересная архитектура.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374736
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012maytonВладимир2012, MongoDb юзал?Нет.
Интересная архитектура.
Попробуй. Там есть бинарное представление XML. И индексирование. Может
в твоей задаче это будет коробочным решением.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374738
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВладимир2012если считаете, что это надуманная задача, которую нет смысла обсуждать, то возражать не буду.

Задача не надуманная, но её решение не принесёт счастья.

Вот смотри: у меня есть софтина, читающая и парсящая определённый файл. Она это делает на
скорости примерно 10 Мб в секунду. При том, что просто чтение этого файла с диска идёт на
скорости 100 Мб в секунду. Отсюда вытекает, что если я в этой софтине наворочу
многопоточность, очереди, совмещу чтение и обработку и таким образом доведу расходы
времени на собственно чтение до нуля, то получу общее ускорение в 10% максимум. Оно того
не стоит.

Про 10% не понял. В идеале ускорение в 10 раз.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374741
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПро 10% не понял. В идеале ускорение в 10 раз.
Нарисуй временную диаграмму работы. Программа секунду читает, девять секунд парсит. Если
засунуть чтение "под" парсинг, 9 секунд никуда не денутся, в конце ты получишь 9 секунд
работы вместо 10. 10%.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374745
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДопустим прочитали мы ровно 100 Мб и на конце получили обрубок чего-то. Вторые 100 Мб начинаются вообще непонятно с какого места, т.к. это мы узнаем только по окончании разбора первых 100 Мб, как начинать работать второму потоку?Sorry.
Придется повториться.
Владимир2012 Эврика!

В начале xml помещаем node, содержащий данные об "логических" частях xml.
И не надо тратить время на поиск этих частей и не нужны ни какие вспомогательные nodes.Разбивку на "логические" части xml можно возложить на library, обеспечивающей работу с xml или как вариант
предоставить программисту саму на его усмотрение добавить в xml некоторые маркеры.

То что предлагаю является всего лишь некоторым вариантом решения данного вопроса и ни коим образом не претендует на априори правильный подход.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374748
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, что сохраняя данные не в хмл, а в собственном формате, можно снизить размер от десяти процентов, до порядка, в зависимости от данных. Что, соответственно, может дать ускорение последующего считывания.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374752
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TПро 10% не понял. В идеале ускорение в 10 раз.
Нарисуй временную диаграмму работы. Программа секунду читает, девять секунд парсит. Если
засунуть чтение "под" парсинг, 9 секунд никуда не денутся, в конце ты получишь 9 секунд
работы вместо 10. 10%.

Если парсить в 9 потоков, то распарсит за секунду. Другой вопрос разрешает ли алгоритм парсить в 9 потоков?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374754
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПопробуй. Там есть бинарное представление XML. И индексирование. Может
в твоей задаче это будет коробочным решением.Ok!
Одна только сложность - тьма текущей работы.
Надеюсь к Рождеству Христову справлюсь с xml, а далее нужно закончить начатый проект - import Firebird баз в 1С, обеспечивающий
как создание мета данных в конфигураторе (для таблиц, диалоговых форм, ... много чего) так и загрузку данных, ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374756
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДругой вопрос разрешает ли алгоритм парсить в 9 потоков?

Как я уже сказал: не разрешает. Парсером работает автомат с состоянием и обработка блока N
зависит от блока N-1. И даже если бы автомат был без состояния, блоки не имеют
фиксированной длины и тупо найти начало следующего невозможно не распарсив предыдущий. О
чём тут тоже уже говорилось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374758
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА по поводу моего варианта - его за 1-й проход следует разбить на куски и сохранить их:

Код: plaintext
1.
2.
3.
vladimir-s.chunk-01.xml
vladimir-s.chunk-02.xml
....


Сам процесс резания - прекрасно совмещается со скачиванием (потоковые операции).

Орининал - грохнуть.
+1
ИМХУ просто и работать должно быстро при достаточном наличии памяти, т.к. в кэше ОС останется скорее всего.
Парсить можно начинать сразу после создания chunk-01.xml причем без всяких самодельных парсеров.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374759
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Library для работы с xml мне нужна в основном для интеграции binary three с xml.
всё в порядке - импорт экспорт XML/JSON, внутри своё
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374767
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TДругой вопрос разрешает ли алгоритм парсить в 9 потоков?

Как я уже сказал: не разрешает. Парсером работает автомат с состоянием и обработка блока N
зависит от блока N-1. И даже если бы автомат был без состояния, блоки не имеют
фиксированной длины и тупо найти начало следующего невозможно не распарсив предыдущий. О
чём тут тоже уже говорилось.

Это если тупо рубить по К байт, но если выделять логические блоки, независимые друг-от-друга, то можно.
Выделить блоки несложно, например явно задав разделитель, как выше предлагалось. Или перед разбором задавать какие-то правила что считать блоком, как я предлагал 20046249
напримерИмеем файл
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version='1.0'?>
<list>
  <!-- Chunk #1 -->
  <row>.....</row>
  <row>.....</row>
   ......
  <!-- Chunk #2 --> 
  <row>.....</row>
  <row>.....</row>
   ....
</list>


сохранить как
Chunk#1.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version='1.0'?>
<list>
  <!-- Chunk #1 -->
  <row>.....</row>
  <row>.....</row>
   ......
</list>


Chunk#2.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version='1.0'?>
<list>
  <!-- Chunk #2 -->
  <row>.....</row>
  <row>.....</row>
   ......
</list>


дальше парсим каждый независимо от других. В итоге имеем общее время разбора = время чтения + время разбора последнего блока.

Тут может возникнуть необходимость сохранения порядка, но ее можно обойти например промежуточным кэшированием результатов каждого разбора и последующим сохранением в нужном порядке
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374771
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВыделить блоки несложно, например явно задав разделитель, как выше предлагалось.

И тут мы получаем необходимость seek() и потерю потоковости или накопление блоков в
огромных буферах памяти, что, конечно, тоже вариант, но не из простых.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374779
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TВыделить блоки несложно, например явно задав разделитель, как выше предлагалось.

И тут мы получаем необходимость seek() и потерю потоковости или накопление блоков в
огромных буферах памяти, что, конечно, тоже вариант, но не из простых.

Зачем? Исходный файл парсить не XML-парсерами, а просто как файл, самодельным парсером, блоками по 32 К (одного буфера достаточно): прочитали, разобрали как текст, сбросили буфер в конечный файл. Если наткнулись на разделитель - сбросили до разделителя, закрыли, начали новый файл и т.д.

Такой парсер однопроходный и тормозить особо не будет. Все что ему надо делать - получать текущее местоположение в XML, например "list/row". Чтобы на его основе сгенерить конец закрываемого файла и начало следующего.

Описал упрощенно, но никаких seek() точно не потребуется, выравнивая в буфере будет достаточно.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374780
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tпрочитали, разобрали как текст
Армянский комсомол не ищет лёгких путей, а сначала создаёт трудности и только потом мужественно их преодолевает.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374783
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все же как вариант предлагаю:

- Разбивку на "логические" части xml можно возложить на library, обеспечивающей работу с xml или как вариант
предоставить программисту саму на его усмотрение добавить в xml некоторые маркеры.

- при отработке save() library на основании маркеров /спец узлов, .../ создает и добавляет в xml node,
который будет следовать сразу за root node данные об начале и окончании каждого логического блока

В этом случае при загрузке xml нам сразу известно место нахождение каждого логического блока и тем
самым сразу запускаем n парсеров, каждый из которых знает данные об месте нахождения логического блока.

Sorry.
Тем самым при загрузке xml у нас отпадает необходимость в нахождении этих логических блоков.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374791
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012или как вариант предоставить программисту саму на его усмотрение добавить в xml некоторые маркеры.
ИМХУ Если мы имеем возможность править XML на выходе у создателя, то можно сразу генерить отдельные файлы с завершенной структурой и не заниматься излишним разбором на получателе. Так проще всего.

Вобщем я к тому что не надо закладываться на какие-либо разделители. Надо исходить из того что их нет.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374792
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012,

SAX парсер напускал на свои данные?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374793
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
печаль в том, что при редактировании документа маркеры могут сохраниться и указывать в случайные места
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374795
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХУ Если мы имеем возможность править XML на выходе у создателя, то можно сразу генерить отдельные файлы с завершенной структурой и не заниматься излишним разбором на получателе. Так проще всего.То бишь будет какой-то main xml, содержащий /к примеру/ include-s с данными об подчиненных xml?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374797
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSAX парсер напускал на свои данные?Нет.
Пока в использовании его не было необходимости /использую "со слезами на глазах" DOM/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374798
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012ИзопропилSAX парсер напускал на свои данные?Нет.
Пока в использовании его не было необходимости /использую "со слезами на глазах" DOM/.

Странно как-то - отсутствие необходимости в парсере, ориентированном на большие объёмы.

А городить уродца - необходимость есть
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374800
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпечаль в том, что при редактировании документа маркеры могут сохраниться и указывать в случайные местаЕсли это комментарий кВладимир2012- при отработке save() library на основании маркеров /спец узлов, .../ создает и добавляет в xml node,
который будет следовать сразу за root node данные об начале и окончании каждого логического блокато не беда место данные об месте нахождении логического блока не попадают сразу на маркер блока, ищем ближайший слева или справа.

А лучше всего "бить линейкой по рукам" тех кто много умничает и "вручную" редактирует xml, содержащий данные об логических блоках.

Ну а если серьезно, то ваше замечание интересное и возникает вопрос как эту проблему ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374801
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Dima TИМХУ Если мы имеем возможность править XML на выходе у создателя, то можно сразу генерить отдельные файлы с завершенной структурой и не заниматься излишним разбором на получателе. Так проще всего.То бишь будет какой-то main xml, содержащий /к примеру/ include-s с данными об подчиненных xml?
Можно так. По большому счету там надо знать какой файл на каком месте и сколько их всего.
Можно просто в имя файла дописать который из скольки.
Код: plaintext
1.
2.
3.
MyData_01of20.xml
MyData_02of20.xml
...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374802
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилСтранно как-то - отсутствие необходимости в парсере, ориентированном на большие объёмы.Еще не припекло.ИзопропилА городить уродца - необходимость естьА это про что?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374803
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012ИзопропилА городить уродца - необходимость естьА это про что?
про дополнительные процессинг-инструкции в XML для обеспечения параллельного парсинга.

Владимир2012Еще не припекло.
ну а к чему упражнения с параллельным парсингом тогда?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374804
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМожно так. По большому счету там надо знать какой файл на каком месте и сколько их всего.Пожалуй такой подход решает проблему в необходимости наличия маркеров и "ручное" редактирование нам не помеха.
Предлагаю это main xml и подчиненные xml хранить в zip файле.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374805
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Предлагаю это main xml и подчиненные xml хранить в zip файле.
наконец то ))
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374806
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилну а к чему упражнения с параллельным парсингом тогда?Для того чтобы любители xml радовались и говорили как у них все круто.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374807
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилнаконец то ))Вы все знали и ждали пока мы догадаемся?
Круто.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374808
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Изопропилнаконец то ))Вы все знали и ждали пока мы догадаемся?
Круто.
задачу парсинга то решали, а не хранения и передачи
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374813
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилзадачу парсинга то решали, а не хранения и передачиzip пригодится как для хранения и передачи, так и будет являться контейнером big xml представленным в виде набора подчиненных xml-s.
Пожалуй даже отпадет необходимость в понятии main xml, содержащего данные об подчиненных xml.
По той простой причине, что xml-s будут иметь числовой префикс порядка их следования.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374814
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSAX парсер
Можно же еще быстрее. Например XmlReader в C# у меня парсит 48 Мб за 2.1 сек. Если тупо прогнать цикл с подсчетом количества тэгов получается 0.3 сек. Читать блоками по 32 К - 0.01 сек.

Что-то параллелить с использованием XmlReader не очень получается. А с самодельным предварительным разбором можно было бы распараллелить и вместо 2.1 сек получить меньше 1 сек. Хотя и так устраивает.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374818
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЧто-то параллелить с использованием XmlReader не очень получается. А с самодельным предварительным разбором можно было бы распараллелить и вместо 2.1 сек получить меньше 1 сек. Хотя и так устраивает.Ну может быть кто-нибудь и реализует то, что мы обсуждаем.
Не исключаю, что в свою library для работы с xml включу возможность как создания логических блоков ..., так и параллельный парсинг, ... /а программисту решать использовать или нет/.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374819
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИсходный файл парсить не XML-парсерами, а просто как файл, самодельным парсером, блоками
по 32 К (одного буфера достаточно): прочитали, разобрали как текст, сбросили буфер в
конечный файл.
В результате имеем невалидный XML в файлах и оверхэд по вводу-выводу. В морг.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374827
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TИсходный файл парсить не XML-парсерами, а просто как файл, самодельным парсером, блоками
по 32 К (одного буфера достаточно): прочитали, разобрали как текст, сбросили буфер в
конечный файл.
В результате имеем невалидный XML в файлах и оверхэд по вводу-выводу. В морг.

Файл получится валидный, про валидность было в конце того поста, откуда ты этот кусок вырезал.
Оверхэд не критичен, т.к. IO намного быстрее разбора.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374832
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Dima TЧто-то параллелить с использованием XmlReader не очень получается. А с самодельным предварительным разбором можно было бы распараллелить и вместо 2.1 сек получить меньше 1 сек. Хотя и так устраивает.Ну может быть кто-нибудь и реализует то, что мы обсуждаем.
Не исключаю, что в свою library для работы с xml включу возможность как создания логических блоков ..., так и параллельный парсинг, ... /а программисту решать использовать или нет/.
ИМХУ задача штучная поэтому решения должны быть штучными, поэтому нет смыла делать какую-то универсальную либу для решения уникальных задач. Обычно гигабайты в XML никто не передает, для таких случаев есть другие варианты.

Касаемо приведенных цифр - это реальная стыковка с конкретной чужой системой и там размер XML ограничен не мной, а писателем, им сложно писать больше разом, сами попросили адаптировать прием под несколько файлов, вместо одного большого (200+ Мб) т.к. у них при генерации в один XML все падает. Они пишут медленнее чем я обрабатываю, поэтому ускорять нечего.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374836
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли тупо прогнать цикл с подсчетом количества тэгов получается 0.3 сек.
entity коды АСПушкин будет обрабатывать?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374848
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima TЕсли тупо прогнать цикл с подсчетом количества тэгов получается 0.3 сек.
entity коды АСПушкин будет обрабатывать?
Это ты о чем?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374861
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем господам которые предлагают делать кастомные парсеры которые
бегают с середины файла или каким-то другим образом ломают поток
xml-контента.

Это не летает! XML в общем случае нельзя резать! Хедер несет важную информацию
о xml-schema, xml-entities, а также сведения о кодовой странице e.t.c.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374862
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012,

интересный пост тут и тут недавно вышел, там очень познавательно про чтение с диска описано

Имхо, не надо никаких потоков
грузим поочерёдно в два буфера, пока грузится следущий парсим предыдущий - обычные OVERLAPPED операции
и лучше SAX конечно использовать
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374864
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзопропилпропущено...

entity коды АСПушкин будет обрабатывать?
Это ты о чем?
перед написанием парсера крайне желательно ознакомиться со спецификацией формата.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374936
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня знания в области права такие же как у балерины по тяжелой атлетики.
Поэтому просьба дать ответ на кое-какие вопросы.

Ну вот скажем осилю и доведу до production а-ля MSXML libraries.
Если разместить на github будет ли на меня "наезжать" Microsoft?
C++ код мой /доработанный TinyXML2 и очень существенно/, но API то не мой.

Так как TinyXML2 превратился в а-ля MSXML, то не будет возражать автор этой библиотеки против такого произвола?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374939
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Так как TinyXML2 превратился в а-ля MSXML, то не будет возражать автор этой библиотеки против такого произвола?
До тех пор пока ты не зарабатываешь на нем деньги - всем будет пофиг.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374949
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не совсем понял, а в чем собственно проблема параллельно парсить разные куски файла?
Для этого требуется стандартный парсер XML поддерживающий абстрактные источники данных (например std::istream), и написать адаптер который из любой заданной позиции файла находит первый тег, и оттуда начинает скармливать парсеру данные до определенного предела. Ну и добавить обработку обрезков попадающих в разные секции.
Естественно, XML данные должны иметь регулярную структуру для этого - быть наборами однотипных тегов.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма
но решительно лень да и автор поставил постановку весьма философскую дескыть сколько
ангелов танцуют на иголочке или может ли господь поднять камень e.t.c.

Вот и перекидываемся лениво.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39374953
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТопик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма
но решительно леньА зачем спорить?
Просто выскажете свое мнение и при этом желательно объяснить его.

ИМХНО - можно реализовать алгоритма параллельного парсинга.
Вопрос только в одном - "Будет ли польза от этого?".
Как по мне - да.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375046
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012maytonТопик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма
но решительно леньА зачем спорить?
Просто выскажете свое мнение и при этом желательно объяснить его.

ИМХНО - можно реализовать алгоритма параллельного парсинга.
Вопрос только в одном - "Будет ли польза от этого?".
Как по мне - да.

Не будет пользы.

Один уже пытался сделать самый быстрый в мире парсер:
http://www.sql.ru/forum/1001189/proekt-apollosax
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375071
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Вопрос только в одном - "Будет ли польза от этого?".
Как по мне - да.
пользы никакой , а вред конкретный - потеря времени.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375370
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм.
Раньше использовал для работы "Msxml2.DOMDocument.4.0", а теперь TinyMSXML /шутка/.
Все Ok!
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375391
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012maytonТопик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма
но решительно леньА зачем спорить?
Просто выскажете свое мнение и при этом желательно объяснить его.

ИМХНО - можно реализовать алгоритма параллельного парсинга.
Вопрос только в одном - "Будет ли польза от этого?".
Как по мне - да.
имхо, если есть утверждение, что парсинг медленнее загрузки с диска, то для начала стоит пройтись профайлером и выяснить, что конкретно тормозит
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375406
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)имхо, если есть утверждение, что парсинг медленнее загрузки с диска, то для начала стоит пройтись профайлером и выяснить, что конкретно тормозитДа причем здесь это.
Вопрос в другом.
Вот скажем загрузили в memory xml размером 10MB.
Что будет более эффективно.
Парсить его в 1 потоке или параллельно в нескольких?

У меня нет цели кому-то что-то доказывать.
Вопрос чисто дискуссионный /и не более того/.

PS: Хотя некоторые кто читает посты по диагонали справа на лево с пропуском "многострочных частей"
начинают выдумывать некое свое видение в чем суть поста.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375483
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Вот скажем загрузили в memory xml размером 10MB.
Что будет более эффективно.
Парсить его в 1 потоке или параллельно в нескольких?
на данный момент развития ЭВМ, имхо в 1-м
Ну а вообще мерить надо. Есть что мерить?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375545
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Вопрос в другом.
Вот скажем загрузили в memory xml размером 10MB.
Что будет более эффективно.
Парсить его в 1 потоке или параллельно в нескольких?
Вопрос действительно в другом. Вопрос куда дальше результаты разбора пойдут? Готово ли конечное хранилище (пусть даже промежуточный кэш) параллельно принимать распарсенные данные на бешенной скорости?

Давай определимся сначала какая скорость есть и какая нужна.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375553
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Ну а вообще мерить надо. Есть что мерить?Пока для меня это не актуально.
Вот уже использую в своих проектах свою поделку вместо "Msxml2.DOMDocument.4.0".
И совместимость полная и в скорости по крайней мере /проверил/ не уступает "Msxml2.DOMDocument.4.0".
Пока мне этого достаточно.

Кой какие начатые проекты подтяну и "расширю" функциональность DOM.
Точнее не DOM, а как бы это сказать, вместе с DOM будет соседствовать и другая модель представления данных.
При этом функциональность DOM не будет нарушена.

Да много работы ...
Многое уже было апробировано ранее /например при разработке binary three/ и предшествующий опыт
использую в новых проектах.

PS: У меня и в мыслях нет кого-то перещеголять.
Щегольство - не мой удел.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375565
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TГотово ли конечное хранилище (пусть даже промежуточный кэш) параллельно принимать распарсенные данные на бешенной скорости?Дима.
Топик не предопределяет, что уже имеются проектные решения.
Цель топика подискутировать на эту тему.
Если у вас имеются предложения - милости просим /впрочем это касается всех и меня в т.ч./.
Единственно что могу пока сказать - верю, что распаралелить парсинг можно.

Кому это может пригодиться?
В первую очередь google /конечно шутка/ высоконагруженным сайтам и ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375569
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Кому это может пригодиться?
В первую очередь google /конечно шутка/ высоконагруженным сайтам и ...
а если серьёзно?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375570
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Единственно что могу пока сказать - верю, что распаралелить парсинг можно.

С верой - это к свидетелям-чего-ни-попадя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375573
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovС верой - это к свидетелям-чего-ни-попадя.Так вера подкреплена и опытом ...
Конечно вы пошутили.
Но все же какое ваше мнение по параллельному парсингу?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375580
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Единственно что могу пока сказать - верю, что распаралелить парсинг можно.
С дуру можно и ... сам знаешь что.

Распараллелил тут одним по их же просьбе, а их админы с претензией: "какого уха ты нам сервер ложишь?" Да, на 100% загрузил им все ядра на пару минут несколько раз в день, но сами ведь просили чтоб максимально быстро было однопоточно было ~10 минут, но остальное работало.

Это я к тому действительно ли это нужно.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375587
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила если серьёзно?Хорошо сделаю серьезный вид ...

И так.
Если бы не пришлось решать эту задачу, то /скорее всего/ она включала следующие этапы:
- разработка алгоритма позволяющего перед сохранением xml "выделить" логические блоки;
- предоставить программисту API для возможности "ручного" выделения логических блоков;

Далее уже на основе предшествующих решений - разработать алгоритм параллельного парсинга.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375595
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто я к тому действительно ли это нужно.Из того, что вы сказали ИМХНО нужно предусмотреть возможность получения парсером свойств типа:
- одно поточный или параллельный парсинг;
- max количество задействованных процессоров и потоков;
- режим фонового парсинга /чтобы парсинг не властвовал над всем и вся/.
...
...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375596
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Конечно вы пошутили.
Нет, я абсолютно серьёзен. И моё мнение по этому поводу я уже неоднократно озвучил выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375598
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНет, я абсолютно серьёзен. И моё мнение по этому поводу я уже неоднократно озвучил выше.Уважаю ваше мнение.
Предыдущие ваши messages мною были поняты, что у вас имеются ряд текстов не поддающих параллельному парсингу.
Или в целом считаете, что параллельный парсинг xml не нужен?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375601
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Или в целом считаете, что параллельный парсинг xml не нужен?
да. совсем не нужен.

особенно на тяжелонагруженной сисеме - где ядра и так загружены.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375604
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Dima TЭто я к тому действительно ли это нужно.Из того, что вы сказали ИМХНО нужно предусмотреть возможность получения парсером свойств типа:
- одно поточный или параллельный парсинг;
- max количество задействованных процессоров и потоков;
- режим фонового парсинга /чтобы парсинг не властвовал над всем и вся/.
...
...
Я уже писал выше что подобные вещи пишутся "под заказ", можно наворотить все что угодно, но писать надо с нуля, не может быть супер быстрого парсера на все случаи жизни. Если важна скорость, то надо писать под конкретную задачу, а не универсально.

Возможно кто-то написав 100500 супер-быстрых парсеров найдет их общее место, обобщит и сделает свой. Но этот путь надо сначала пройти, затем делиться результатом, а не наоборот сначала придумать решение, а потом ждать оценки эффективности его применения.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375605
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилда. совсем не нужен.

особенно на тяжелонагруженной сисеме - где ядра и так загружены.Исходя из вашего суждения, много чего нужно отменить и запретить ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375606
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Изопропилда. совсем не нужен.

особенно на тяжелонагруженной сисеме - где ядра и так загружены.Исходя из вашего суждения, много чего нужно отменить и запретить ...
где я предлагал отменять уже сделанное и тем более что-то запрещать?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375608
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНо этот путь надо сначала пройти, затем делиться результатом, а не наоборот сначала придумать решение, а потом ждать оценки эффективности его применения.Согласен с вами.
Кому нужно будет тот обсуждать не будет, а возьмет и реализует.
Вердикт из этого пока один - ждем решения от того кому это будет нужно.

PS: Предшествующие ответы форумчан говорят об одном, что поднятый вопрос их или не интересует или не нужным.
ИМХНО считаю, что далее "толочь в ступе" этот вопрос не зачем.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375613
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилгде я предлагал отменять уже сделанное и тем более что-то запрещать?Ваш ответ был понят мной так как сказано выше.
Ведь вы говорили о высоко нагруженных системах, которые не следует перезагружать ...
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375617
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю всех за участие в обсуждении темы топика.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375619
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Кому нужно будет тот обсуждать не будет, а возьмет и реализует.
Вердикт из этого пока один - ждем решения от того кому это будет нужно.
Неправильный вердикт. Если кому нужно не сможет, то обратиться - поможем, но нужна конкретная задача, а не оптимизация сферического коня в вакууме.
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375715
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012, можно закрыть?
...
Рейтинг: 0 / 0
Как распараллелить загрузку XML?
    #39375769
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВладимир2012, можно закрыть?Нужно!

у меня просьба к вам - присекать тех кто флудит, пальцы топырит и ... /вариации на тему/.
Форум - дискуссия, а не выпендривание и хамство.
...
Рейтинг: 0 / 0
122 сообщений из 122, показаны все 5 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как распараллелить загрузку XML?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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