Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012maytonВладимир2012, так что ли?Да ... /и вариации на тему/. Ты про вариации - уточняй лучше. А по поводу моего варианта - его за 1-й проход следует разбить на куски и сохранить их: Код: plaintext 1. 2. 3. Сам процесс резания - прекрасно совмещается со скачиванием (потоковые операции). Орининал - грохнуть. И дальше спокойно работать как в Hadoop/Spark. Раздавая на map-reduce конвейер все твои потоки nodes. Твоя идея работать с целым XML при этом сломав XML-парсер - это фикция. У большинства специалистов - это вызовет гамму чувств от удивления до глухого раздражения. И здесь даже говно-код - не то слово. Здесь говно-замысел и говно-проектирование будет очень красочным и точным эпитетом. Уж поверьте мне ... я слышал мат-перемат своих коллег и за меньшие огрехи в проектировании. А зачем вам портить себе карму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:32 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonТвоя идея работать с целым XML при этом сломав XML-парсер - это фикция.Речь идет не о том, что нужно "сломать" парсер, а о том что можно разработать вариант параллельного парсинга. Что касается кармы, то это удел тщеславных. От меня не "убудет" если меня поругают, не "прибудет" если похвалят. Проще говоря меня не задевает ни первое, ни второе. Кого задевает - их проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:39 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012maytonТвоя идея работать с целым XML при этом сломав XML-парсер - это фикция.Речь идет не о том, что нужно "сломать" парсер, а о том что можно разработать вариант параллельного парсинга. Ты опиши по пунктам как в SR. Что такое параллельный парсинг. Что идет на вход. Какой формат. Схема. Что такое нода. По какому принципу ее ставят. Какова вообще мотивация это все делать. Какие будут преимущества. И кто будет заинтересован использовать это ПО. По моему скромному убеждению уверенно описанный SR - это на 50% решенная задача. И если ты к этому времени не разочаруешся в своей идее - то она достойна жить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:54 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonЧто такое параллельный парсингК примеру как добавляем node в DOM: Код: plaintext 1. 2. 3. 4. Так вот каждый thread при параллельном парсинге создает некий свой document, А затем просто линкуем эти root nodes к main document. /конечно это упрощенное объяснение/. Вообще то xml это не моя "стихия". Не хвалю их и не порицаю. Вполне достойный формат, который нужно знать где его "уместно" использовать. maytonТы опиши по пунктам как в SR. Что такое параллельный парсинг. Что идет на вход. Какой формат. Схема. Что такое нода. По какому принципу ее ставят.Пример xml приведенный вами ранее вполне подходит для обсуждения. То бишь - "Будет ли выгода от параллельного парсинга?". Скорее всего - да. Однозначно видно, что для некоторых xml такой алгоритм параллельного парсинга будет ускорять загрузку xml в память. Можно ли разработать алгоритм для любого типа xml? Скорее всего да, но при этом нужно будет расширить схему xml. PS: Для меня это пока не актуальная задача, а тема к обсуждению ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 02:21 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир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 Наши руки - не для скуки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 04:11 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
SAX StAX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 10:02 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Alibek B.SAX StAXСуществует множество готовых libraries для работы с xml. Поэтому однозначно мой велосипед не достоин того, чтобы его публиковать. Cкорее когда разработаю некую новую модель представления данных или расширю архитектуру DOM. Архитектура DOM что-то мне не очень нравится (но она есть и ее многие используют ...) /. И поверьте причина не в том, чтобы что то рушить ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 10:20 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
такие маркеры лучше делать бинарными, например три нуля (0x00), их тогда быстрее и легче будет найти. потом можно будет загрузить файл целиком, разбить на куски, потому их парсить отдельно.. но не думаю, что это даст прирост к скорости: фактически парсинг будет состояить из вух проходов - один разбивает на куски, другой парсит. то есть все равно нужно будет последовательно прочитать файл. но можно сделтаь по-другому. когда такой файл пишется, его можно разбить на куски фиксированного размера. например по 10мб. нужно проконтролировать, чтобы на разрыве кусков не было разрыва нод (заполняешь пробелами до следующего куска, если следующая нода не влезает). тогда, можно прочитав файл, просто дать разные итераторы разным потокам. например лежит весь файл в std::string, тогда одному даешь begin, advice(begin,10485760), следующему также, только не begin, а то, что ты получил на прерыдущем шаге.. так они будет не пересекаясь парсить. но тут нужно будет проследить (при сохранении), что кусок валиден. и маркеров не нужно в таком случаи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 10:39 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
alexy_blackфактически парсинг будет состояить из вух проходов - один разбивает на куски, другой парсит. то есть все равно нужно будет последовательно прочитать файл. Насколько понял - в целом идея разработки возможности параллельного парсинга xml /скорее всего здесь потребуется расширение самой схемы представления xml/ не совсем утопична. В какой-то мере цель топика - обсуждение того каким должен быть xml, чтобы его можно было параллельно парсить. Эврика! В начале xml помещаем node, содержащий данные об "логических" частях xml. И не надо тратить время на поиск этих частей и не нужны ни какие вспомогательные nodes. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:01 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012, ты про DOM забудь сразу. Это будет полный провал. DOM аллоцирует памяти соизмеримо с XML документом (а то и больше). Я не просто так настойчиво тебя спрашивал про характер исходных данных. Я пытался понять работаешь ли ты с документом или с таблицей. Если он выглядит как последовательность строк (CSV => XML tags) то для его парсинга разработчики используют SAX, Stax, XmlReader e.t.c. Это все streamable API который быстр и рационален с точки зрения memory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:09 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonDOM аллоцирует памяти соизмеримо с XML документом (а то и больше)Не хочу портить себе настроение ... /о DOM много чего хочется высказать ..., но имеются в нем и "светлые пятна"/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:15 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Эврика! "На паровоз вперед летит. В DOM 1024 наша остановка. Другого нет у нас пути в руках у нас селедка". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:21 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
по гигабайтным XML - DOM строить - странная задача. вычитывать гигабайтный файл в память перед разбором - ещё веселее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:24 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилпо гигабайтным XML - DOM строить - странная задача.Дело не в гигабайтных xml и DOM. Вопрос в том - "Каким должен быть xml, чтобы он подходил для алгоритма параллельного парсинга?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:27 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
mayton И здесь даже говно-код - не то слово. Здесь говно-замысел и говно-проектирование будет очень красочным и точным эпитетом. +много Я не понимаю любителей конкурировать со стандартными средствами обработки XML, тем более, таким извращенным способом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:32 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
schiЯ не понимаю любителей конкурировать со стандартными средствами обработки XML, тем более, таким извращенным способомВы о чем? У меня и в мыслях не было с кем то конкурировать или некие вариации на тему. Пожалуй еще раз изложу желательного дальнейшего обсуждения /если кому это не нужно, то не стоит об этом всех извещать/ - Каким должен быть xml, чтобы он подходил для алгоритма параллельного парсинга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:37 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вопрос в том - "Каким должен быть xml, чтобы он подходил для алгоритма параллельного парсинга?" он не должен быть XML )) посмотри VTD-XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:53 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012maytonDOM аллоцирует памяти соизмеримо с XML документом (а то и больше)Не хочу портить себе настроение ... /о DOM много чего хочется высказать ..., но имеются в нем и "светлые пятна"/. Имеются. С DOM моделью обычно работают когда документ имеет сложную (рекурсивную) структуру наподобие MS-Word document и нужно к примеру взяв XPath выражение выбрать множество атрибутов. Пройтись по ним и затем вызвать еще одно XPath... и так далее. Или когда нужно модифицировать контент. Вставить что-то в середину к примеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 11:59 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилон не должен быть XML ))Золотые слова. Но все же xml имеет свою нишу /и не малую/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 12:14 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Но все же xml имеет свою нишу /и не малую/. и оставьте его в покое. двойное чтение - первое - для поиска маркеров, второе - для разбора - вряд ли увеличит производительность. Если требуется многократная обработка - после первого же парсинга хранить данные в ином формате, экспортировать как XML - по запросу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 13:19 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропили оставьте его в покоеOk! Ладно, признаюсь. Развиваю library для работы с binary three /ни какой-то там binary xml, json, .../. Three можно будет использовать и в качестве некоторой базы данных и как средство создания и работы с базами метаданных. Library для работы с xml мне нужна в основном для интеграции binary three с xml. PS: Поэтому скорее всего развивать xml не буду /видно будет .../. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 13:41 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012, MongoDb юзал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 13:52 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012А вот если читаем 100MB и стартуем thread, который парсит эту часть xml, ... - будет наверняка быстрее. Во-первых не ждем загрузки всего xml. И что самое главное не один thread парсит xml, а несколько одновременно. Допустим прочитали мы ровно 100 Мб и на конце получили обрубок чего-то. Вторые 100 Мб начинаются вообще непонятно с какого места, т.к. это мы узнаем только по окончании разбора первых 100 Мб, как начинать работать второму потоку? Допустим это исходный XML, красным точка разрыва (по слову images) Код: plaintext 1. 2. 3. 4. 5. 6. 7. Как тут второму потоку начать работать? Допустим добавили какое-то выравнивание по началу ближайшего тэга (<img> например), но как узнать что мы находимся в table/tr/td ? Без этого знания проблематично обрабатывать. ИМХУ если уж параллелить, то по-другому: 1. один поток читает файл и пишет в память до получения законченного блока, например <table>...</table>, блок ставит в очередь на обработку, и т.д. поблочно до конца файла. Читать он будет все равно медленнее чем блоки искать. 2. пул потоков, которые вынимают из очереди блоки и делают полный разбор Тут без знания структуры не обойтись, допустим это одна большая таблица с кучей строк Код: plaintext 1. тут получение блока <table>...</table> не даст никакого параллелизма, т.к. он один, надо изначально задать что бить на строки, т.е. блоки table/tr. Дальше скорее всего потребуется задание нескольких обработчиков различных типов блоков, например если таблиц 3 то для строки каждой надо свой обработчик, т.е. разбирающие потоки должны для table1/tr запускать parser1(), table2/tr - parser2() и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 13:57 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonВладимир2012, MongoDb юзал?Нет. Интересная архитектура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:08 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39374728&tid=2018337]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 280ms |
| total: | 451ms |

| 0 / 0 |
