Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Вот скажем нужно загрузить xml размером 1GB. Можно ли каким-то образом организовать прием и парсинг XML несколькими процессами одновременно? PS: Идейка вот такая появилась. При формировании big xml добавлять в них некие служебные nodes, которые как-бы подсказывают ридеру XML, что части xml между служебными nodes можно парсить параллельно. Т.е. как-бы логически разбиваем xml на n частей, каждую из которых можно парсить параллельно. Ну и конечно потом каждое из полученных деревьев линкуем к main three. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:04 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012... парсинг XML несколькими процессами одновременно?Пардон. Правильно где-то так: "... парсинг XML несколькими thread одновременно?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:09 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Парсинг XML - это легкая операция. Думаю что скорость вычитвания тегов будет близка к чтению дискового I/O. Поэтому вряд-ли вы что-то выиграете нагружая I/O систему. Можете даже проиграть. Возможно вам параллелить нужно не парсинг XML а процессинг. Тоесть те операции которые стоят выше парсинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:22 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonПарсинг XML - это легкая операция.Имеются свои "заморочки" ... maytonДумаю что скорость вычитвания тегов будет близка к чтению дискового I/O.Дисковые операции всегда были на порядки медленнее работы в памяти. Прочитать за раз 1CB /например если нам нужен DOM/ это один из подходов. А вот если читаем 100MB и стартуем thread, который парсит эту часть xml, ... - будет наверняка быстрее. Во-первых не ждем загрузки всего xml. И что самое главное не один thread парсит xml, а несколько одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:36 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Вам наверное надо все-таки дать больше инфы о самой задаче т.к. по моему скромному мнению не существует генерализованного подхода к ршению вашей специфичной задаче. Возможно вам подойдет конвейер из 1 процесса XML-парсера, быстрой очереди типа disruptor, и пула рабочик worker-threads, которые эти задания расхватывают и делают. Как то так вобщемто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:44 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012А вот если читаем 100MB и стартуем thread, который парсит эту часть xml, ... - будет наверняка быстрее.Кстати это суждение не сложно проверить: Берем любой тестовый файл размером 1GB; Пишем алгоритм, который читает 100MB и запускает thread, который скажем подсчитываем количество слов, ... Thread работаем, а мы читаем следующие 100MB и ... /см. строчку выше/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:50 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012И что самое главное не один thread парсит xml, а несколько одновременно. Не выйдет: парсинг любого текстового ML это последовательная операция, не распараллеливается. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:52 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, есть предположение что автор делает свой Hadoop на XML-ах... но опять-же даже там имеет место partitioning в виде файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 23:55 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonВам наверное надо все-таки дать больше инфы о самой задачеДа конкретной задачи пока нет. Просто этими днями появилась у меня необходимость разработать а-ля MSXML API совместимую library для работы с xml. Взял за основу TinyXML2. Дополнил ее классами а-ля MSXML ... Собственно теперь TinyXML2 как-то неловко и называть TinyXML2 ... /выкладывать на github пока не буду/. Так вот load() в TinyXML2 читает за раз весь XML. Вот и пришла мысль, что для небольших xml такой подход сойдет, а вот для big xml скорее всего нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:02 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012 /выкладывать на github пока не буду/. На этой печальной ноте наверное можно закрывать топик. Философские беседы у нас обычно идут в ПТ. А здесь мы обсуждаем код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:04 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonНа этой печальной ноте наверное можно закрывать топик.А что тут печального? Топик завел не потому чтобы рассказать о некоих своих велосипедах, а для обсуждения конкретного алгоритмического вопроса. Что бы не было вам печально подскажу где взять исходные тексты а-ля MSXML library. В исходниках ReactOS имеется полноценные исходные тексты а-ля MSXML library /мне они не подошли/. Что касается моего велосипеда, то кому он нужен? Можно к примеру просто использовать готовое API Microsoft /и ни каких проблем/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:17 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
прочитать целиком в память будет быстрее. там кто-то тестировал на хабре, spirit + целиком в память побило все рекорды. дисковые операции медленные еще и потому, что им нужно головку позиционировать. когда прочитаешь 100мб, потом какой-то другой файл прочитается (другим процессом), потом еще 100 - головку опять позиционировать... короче быстрее за раз его прочитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:22 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Мир сошел с ума. Если вы спецом пишете ПО под сервер где можете кидаться гигами направо и налево - то наверное надо сообщить об этом в первых строках сообщения. А так вообще ... оператива всегда будет стоить дороже чем диск. И этот инженерно-экономический подход будет доминировать всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:28 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
alexy_blackдисковые операции медленные еще и потому, что им нужно головку позиционировать. когда прочитаешь 100мб, потом какой-то другой файл прочитается (другим процессом), потом еще 100 - головку опять позиционировать... короче быстрее за раз его прочитать.Гм. Да ведь речь идет не об нескольких процессах, а об одном. Читаем 100Mb запускаем thread, продолжаем читать ... Ну хорошо скажем так. Читаем за одну операцию чтения весь 1GB и затем разбиваем 1GB на 10 частей, каждая из которых парсится отдельным thread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:29 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Читаем 100Mb запускаем thread, продолжаем читать ... После блока в 32к скорость чтения уже не повышается, так что зря тратить мегабайты не имеет смысла. Владимир2012затем разбиваем 1GB на 10 частей Проблема в том, что текстовый файл не разбивается. Нет к нему рандомного доступа, только последовательный. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:34 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonЕсли вы спецом пишете ПО под сервер где можете кидаться гигами направо и налево - то наверное надо сообщить об этом в первых строках сообщенияДа нет же. Еще раз говорю. Тема топика навеяна всего лишь обсуждением абстрактной задачи ... Хотя впрочем если считаете, что это надуманная задача, которую нет смысла обсуждать, то возражать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:37 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПроблема в том, что текстовый файл не разбивается. Нет к нему рандомного доступа, только последовательный.Дмитрий. Обратите внимание на то, что в начале топика мною было преложено дополнять xml некоими служебными nodes, назначение которых состоит в том, что при считывании xml нам известны "логически правильные" части xml, которые можем парсить в отдельных thread. Sorry повторюсь. Так вот эти служебные nodes как раз и решают ту задачу об которой вы говорите "... текстовый файл не разбивается. Нет к нему рандомного доступа, только последовательный.". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:43 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012если считаете, что это надуманная задача, которую нет смысла обсуждать, то возражать не буду. Задача не надуманная, но её решение не принесёт счастья. Вот смотри: у меня есть софтина, читающая и парсящая определённый файл. Она это делает на скорости примерно 10 Мб в секунду. При том, что просто чтение этого файла с диска идёт на скорости 100 Мб в секунду. Отсюда вытекает, что если я в этой софтине наворочу многопоточность, очереди, совмещу чтение и обработку и таким образом доведу расходы времени на собственно чтение до нуля, то получу общее ускорение в 10% максимум. Оно того не стоит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:47 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОтсюда вытекает, что если я в этой софтине наворочу многопоточность, очереди, совмещу чтение и обработку и таким образом доведу расходы времени на собственно чтение до нуля, то получу общее ускорение в 10% максимум. Оно того не стоит.Вообщем то да. Но заметьте парсинг идет с скростью 10MB в секунду, значит сколько времени понадобится для парсинга 100MB - 10 секунд. А вот если ядрышки вашего процессора загрузить "по полной", а их у вас скажем будет 10, То сколько времени понадобится для парсинга 100MB? Не 10 секунд, а всего лишь 1 секунда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:55 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012эти служебные nodes как раз и решают ту задачу об которой вы говорите Не решают, поскольку для их нахождения файл надо распарсить. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 00:58 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе решают, поскольку для их нахождения файл надо распарсить.Да зачем его парсить? Когда создается big xml программист знает в какие места xml нужно добавить служебные nodes. Далее все просто. За одну и операцию чтения читаем 1GB и далее находим в memory обычным циклом находим эти служебные nodes. И все! После этого запускаем n thread каждый из которых знает какую часть xml он должен парсить. Sorry. Еще раз. Служебные nodes избавляют нас от необходимости парсинга всего xml ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:06 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012То сколько времени понадобится для парсинга 100MB? Ровно столько же, поскольку формат этого файла такой же последовательный, как и XML. Чтобы найти начало блока N, нужно предварительно обработать блок N-1. А если в него ввести метаструктуры (те самые "служебные ноды" о которых ты толкуешь), то это будет уже совсем другой формат. В твоём случае, для распараллеливания обработки, куски XML придётся обернуть в XDR, отчего файл в целом уже перестанет быть XML-ем. Так, может, сразу не мучиться и вместо XML использовать XDR, который и сам по себе парсится легче, да ещё и распараллеливается при желании?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:12 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012, так что ли? vladimir-s.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:14 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВ твоём случае, для распараллеливания обработки, куски XML придётся обернуть в XDR, отчего файл в целом уже перестанет быть XML-ем. Так, может, сразу не мучиться и вместо XML использовать XDR, который и сам по себе парсится легче, да ещё и распараллеливается при желании?..У меня "конкретной" задачи пока нет /обсужденение абстрактной задачи/. Да безусловно имеются некоторые текстовые файлы, которые нельзя "разбить" на логические части так, чтобы можно все эти части парсить параллельно. А вот к примеру /экспромтом/ берем xml файл в котором находятся паспортные данные 10 000 000 человек и все nodes однотипные. В этом случае ИМХНО вполне можно разбить этот big xml на n частей, каждую из которых будет парсить отдельный thread. PS: В целом конечно с вами согласен. Имеются "не разбиваемые" текстовые файлы /например текст огромной программы/ ... Но имеются и не мало big текстов, которые пригодны для параллельной обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:23 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonВладимир2012, так что ли?Да ... /и вариации на тему/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 01:24 |
|
||
|
Как распараллелить загрузку 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 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012maytonВладимир2012, MongoDb юзал?Нет. Интересная архитектура. Попробуй. Там есть бинарное представление XML. И индексирование. Может в твоей задаче это будет коробочным решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:10 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВладимир2012если считаете, что это надуманная задача, которую нет смысла обсуждать, то возражать не буду. Задача не надуманная, но её решение не принесёт счастья. Вот смотри: у меня есть софтина, читающая и парсящая определённый файл. Она это делает на скорости примерно 10 Мб в секунду. При том, что просто чтение этого файла с диска идёт на скорости 100 Мб в секунду. Отсюда вытекает, что если я в этой софтине наворочу многопоточность, очереди, совмещу чтение и обработку и таким образом доведу расходы времени на собственно чтение до нуля, то получу общее ускорение в 10% максимум. Оно того не стоит. Про 10% не понял. В идеале ускорение в 10 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:11 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TПро 10% не понял. В идеале ускорение в 10 раз. Нарисуй временную диаграмму работы. Программа секунду читает, девять секунд парсит. Если засунуть чтение "под" парсинг, 9 секунд никуда не денутся, в конце ты получишь 9 секунд работы вместо 10. 10%. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:17 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TДопустим прочитали мы ровно 100 Мб и на конце получили обрубок чего-то. Вторые 100 Мб начинаются вообще непонятно с какого места, т.к. это мы узнаем только по окончании разбора первых 100 Мб, как начинать работать второму потоку?Sorry. Придется повториться. Владимир2012 Эврика! В начале xml помещаем node, содержащий данные об "логических" частях xml. И не надо тратить время на поиск этих частей и не нужны ни какие вспомогательные nodes.Разбивку на "логические" части xml можно возложить на library, обеспечивающей работу с xml или как вариант предоставить программисту саму на его усмотрение добавить в xml некоторые маркеры. То что предлагаю является всего лишь некоторым вариантом решения данного вопроса и ни коим образом не претендует на априори правильный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:18 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Возможно, что сохраняя данные не в хмл, а в собственном формате, можно снизить размер от десяти процентов, до порядка, в зависимости от данных. Что, соответственно, может дать ускорение последующего считывания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:23 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima TПро 10% не понял. В идеале ускорение в 10 раз. Нарисуй временную диаграмму работы. Программа секунду читает, девять секунд парсит. Если засунуть чтение "под" парсинг, 9 секунд никуда не денутся, в конце ты получишь 9 секунд работы вместо 10. 10%. Если парсить в 9 потоков, то распарсит за секунду. Другой вопрос разрешает ли алгоритм парсить в 9 потоков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:29 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonПопробуй. Там есть бинарное представление XML. И индексирование. Может в твоей задаче это будет коробочным решением.Ok! Одна только сложность - тьма текущей работы. Надеюсь к Рождеству Христову справлюсь с xml, а далее нужно закончить начатый проект - import Firebird баз в 1С, обеспечивающий как создание мета данных в конфигураторе (для таблиц, диалоговых форм, ... много чего) так и загрузку данных, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:30 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TДругой вопрос разрешает ли алгоритм парсить в 9 потоков? Как я уже сказал: не разрешает. Парсером работает автомат с состоянием и обработка блока N зависит от блока N-1. И даже если бы автомат был без состояния, блоки не имеют фиксированной длины и тупо найти начало следующего невозможно не распарсив предыдущий. О чём тут тоже уже говорилось. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:36 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonА по поводу моего варианта - его за 1-й проход следует разбить на куски и сохранить их: Код: plaintext 1. 2. 3. Сам процесс резания - прекрасно совмещается со скачиванием (потоковые операции). Орининал - грохнуть. +1 ИМХУ просто и работать должно быстро при достаточном наличии памяти, т.к. в кэше ОС останется скорее всего. Парсить можно начинать сразу после создания chunk-01.xml причем без всяких самодельных парсеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:40 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Library для работы с xml мне нужна в основном для интеграции binary three с xml. всё в порядке - импорт экспорт XML/JSON, внутри своё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:41 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima TДругой вопрос разрешает ли алгоритм парсить в 9 потоков? Как я уже сказал: не разрешает. Парсером работает автомат с состоянием и обработка блока N зависит от блока N-1. И даже если бы автомат был без состояния, блоки не имеют фиксированной длины и тупо найти начало следующего невозможно не распарсив предыдущий. О чём тут тоже уже говорилось. Это если тупо рубить по К байт, но если выделять логические блоки, независимые друг-от-друга, то можно. Выделить блоки несложно, например явно задав разделитель, как выше предлагалось. Или перед разбором задавать какие-то правила что считать блоком, как я предлагал 20046249 напримерИмеем файл Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. сохранить как Chunk#1.xml Код: plaintext 1. 2. 3. 4. 5. 6. 7. Chunk#2.xml Код: plaintext 1. 2. 3. 4. 5. 6. 7. дальше парсим каждый независимо от других. В итоге имеем общее время разбора = время чтения + время разбора последнего блока. Тут может возникнуть необходимость сохранения порядка, но ее можно обойти например промежуточным кэшированием результатов каждого разбора и последующим сохранением в нужном порядке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 14:56 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TВыделить блоки несложно, например явно задав разделитель, как выше предлагалось. И тут мы получаем необходимость seek() и потерю потоковости или накопление блоков в огромных буферах памяти, что, конечно, тоже вариант, но не из простых. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 15:05 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima TВыделить блоки несложно, например явно задав разделитель, как выше предлагалось. И тут мы получаем необходимость seek() и потерю потоковости или накопление блоков в огромных буферах памяти, что, конечно, тоже вариант, но не из простых. Зачем? Исходный файл парсить не XML-парсерами, а просто как файл, самодельным парсером, блоками по 32 К (одного буфера достаточно): прочитали, разобрали как текст, сбросили буфер в конечный файл. Если наткнулись на разделитель - сбросили до разделителя, закрыли, начали новый файл и т.д. Такой парсер однопроходный и тормозить особо не будет. Все что ему надо делать - получать текущее местоположение в XML, например "list/row". Чтобы на его основе сгенерить конец закрываемого файла и начало следующего. Описал упрощенно, но никаких seek() точно не потребуется, выравнивая в буфере будет достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 15:29 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima Tпрочитали, разобрали как текст Армянский комсомол не ищет лёгких путей, а сначала создаёт трудности и только потом мужественно их преодолевает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 15:34 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Все же как вариант предлагаю: - Разбивку на "логические" части xml можно возложить на library, обеспечивающей работу с xml или как вариант предоставить программисту саму на его усмотрение добавить в xml некоторые маркеры. - при отработке save() library на основании маркеров /спец узлов, .../ создает и добавляет в xml node, который будет следовать сразу за root node данные об начале и окончании каждого логического блока В этом случае при загрузке xml нам сразу известно место нахождение каждого логического блока и тем самым сразу запускаем n парсеров, каждый из которых знает данные об месте нахождения логического блока. Sorry. Тем самым при загрузке xml у нас отпадает необходимость в нахождении этих логических блоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 15:42 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012или как вариант предоставить программисту саму на его усмотрение добавить в xml некоторые маркеры. ИМХУ Если мы имеем возможность править XML на выходе у создателя, то можно сразу генерить отдельные файлы с завершенной структурой и не заниматься излишним разбором на получателе. Так проще всего. Вобщем я к тому что не надо закладываться на какие-либо разделители. Надо исходить из того что их нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 15:58 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012, SAX парсер напускал на свои данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 15:59 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
печаль в том, что при редактировании документа маркеры могут сохраниться и указывать в случайные места ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:02 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TИМХУ Если мы имеем возможность править XML на выходе у создателя, то можно сразу генерить отдельные файлы с завершенной структурой и не заниматься излишним разбором на получателе. Так проще всего.То бишь будет какой-то main xml, содержащий /к примеру/ include-s с данными об подчиненных xml? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:03 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
ИзопропилSAX парсер напускал на свои данные?Нет. Пока в использовании его не было необходимости /использую "со слезами на глазах" DOM/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:07 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012ИзопропилSAX парсер напускал на свои данные?Нет. Пока в использовании его не было необходимости /использую "со слезами на глазах" DOM/. Странно как-то - отсутствие необходимости в парсере, ориентированном на большие объёмы. А городить уродца - необходимость есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:13 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилпечаль в том, что при редактировании документа маркеры могут сохраниться и указывать в случайные местаЕсли это комментарий кВладимир2012- при отработке save() library на основании маркеров /спец узлов, .../ создает и добавляет в xml node, который будет следовать сразу за root node данные об начале и окончании каждого логического блокато не беда место данные об месте нахождении логического блока не попадают сразу на маркер блока, ищем ближайший слева или справа. А лучше всего "бить линейкой по рукам" тех кто много умничает и "вручную" редактирует xml, содержащий данные об логических блоках. Ну а если серьезно, то ваше замечание интересное и возникает вопрос как эту проблему ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:19 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TИМХУ Если мы имеем возможность править XML на выходе у создателя, то можно сразу генерить отдельные файлы с завершенной структурой и не заниматься излишним разбором на получателе. Так проще всего.То бишь будет какой-то main xml, содержащий /к примеру/ include-s с данными об подчиненных xml? Можно так. По большому счету там надо знать какой файл на каком месте и сколько их всего. Можно просто в имя файла дописать который из скольки. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:20 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
ИзопропилСтранно как-то - отсутствие необходимости в парсере, ориентированном на большие объёмы.Еще не припекло.ИзопропилА городить уродца - необходимость естьА это про что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:22 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012ИзопропилА городить уродца - необходимость естьА это про что? про дополнительные процессинг-инструкции в XML для обеспечения параллельного парсинга. Владимир2012Еще не припекло. ну а к чему упражнения с параллельным парсингом тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:26 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TМожно так. По большому счету там надо знать какой файл на каком месте и сколько их всего.Пожалуй такой подход решает проблему в необходимости наличия маркеров и "ручное" редактирование нам не помеха. Предлагаю это main xml и подчиненные xml хранить в zip файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:26 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Предлагаю это main xml и подчиненные xml хранить в zip файле. наконец то )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:28 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилну а к чему упражнения с параллельным парсингом тогда?Для того чтобы любители xml радовались и говорили как у них все круто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:28 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилнаконец то ))Вы все знали и ждали пока мы догадаемся? Круто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:30 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Изопропилнаконец то ))Вы все знали и ждали пока мы догадаемся? Круто. задачу парсинга то решали, а не хранения и передачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:35 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилзадачу парсинга то решали, а не хранения и передачиzip пригодится как для хранения и передачи, так и будет являться контейнером big xml представленным в виде набора подчиненных xml-s. Пожалуй даже отпадет необходимость в понятии main xml, содержащего данные об подчиненных xml. По той простой причине, что xml-s будут иметь числовой префикс порядка их следования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:44 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
ИзопропилSAX парсер Можно же еще быстрее. Например XmlReader в C# у меня парсит 48 Мб за 2.1 сек. Если тупо прогнать цикл с подсчетом количества тэгов получается 0.3 сек. Читать блоками по 32 К - 0.01 сек. Что-то параллелить с использованием XmlReader не очень получается. А с самодельным предварительным разбором можно было бы распараллелить и вместо 2.1 сек получить меньше 1 сек. Хотя и так устраивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:47 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TЧто-то параллелить с использованием XmlReader не очень получается. А с самодельным предварительным разбором можно было бы распараллелить и вместо 2.1 сек получить меньше 1 сек. Хотя и так устраивает.Ну может быть кто-нибудь и реализует то, что мы обсуждаем. Не исключаю, что в свою library для работы с xml включу возможность как создания логических блоков ..., так и параллельный парсинг, ... /а программисту решать использовать или нет/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 16:57 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TИсходный файл парсить не XML-парсерами, а просто как файл, самодельным парсером, блоками по 32 К (одного буфера достаточно): прочитали, разобрали как текст, сбросили буфер в конечный файл. В результате имеем невалидный XML в файлах и оверхэд по вводу-выводу. В морг. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 17:00 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDima TИсходный файл парсить не XML-парсерами, а просто как файл, самодельным парсером, блоками по 32 К (одного буфера достаточно): прочитали, разобрали как текст, сбросили буфер в конечный файл. В результате имеем невалидный XML в файлах и оверхэд по вводу-выводу. В морг. Файл получится валидный, про валидность было в конце того поста, откуда ты этот кусок вырезал. Оверхэд не критичен, т.к. IO намного быстрее разбора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 17:50 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TЧто-то параллелить с использованием XmlReader не очень получается. А с самодельным предварительным разбором можно было бы распараллелить и вместо 2.1 сек получить меньше 1 сек. Хотя и так устраивает.Ну может быть кто-нибудь и реализует то, что мы обсуждаем. Не исключаю, что в свою library для работы с xml включу возможность как создания логических блоков ..., так и параллельный парсинг, ... /а программисту решать использовать или нет/. ИМХУ задача штучная поэтому решения должны быть штучными, поэтому нет смыла делать какую-то универсальную либу для решения уникальных задач. Обычно гигабайты в XML никто не передает, для таких случаев есть другие варианты. Касаемо приведенных цифр - это реальная стыковка с конкретной чужой системой и там размер XML ограничен не мной, а писателем, им сложно писать больше разом, сами попросили адаптировать прием под несколько файлов, вместо одного большого (200+ Мб) т.к. у них при генерации в один XML все падает. Они пишут медленнее чем я обрабатываю, поэтому ускорять нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 18:02 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли тупо прогнать цикл с подсчетом количества тэгов получается 0.3 сек. entity коды АСПушкин будет обрабатывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 18:21 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TЕсли тупо прогнать цикл с подсчетом количества тэгов получается 0.3 сек. entity коды АСПушкин будет обрабатывать? Это ты о чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 19:10 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Всем господам которые предлагают делать кастомные парсеры которые бегают с середины файла или каким-то другим образом ломают поток xml-контента. Это не летает! XML в общем случае нельзя резать! Хедер несет важную информацию о xml-schema, xml-entities, а также сведения о кодовой странице e.t.c. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 20:46 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012, интересный пост тут и тут недавно вышел, там очень познавательно про чтение с диска описано Имхо, не надо никаких потоков грузим поочерёдно в два буфера, пока грузится следущий парсим предыдущий - обычные OVERLAPPED операции и лучше SAX конечно использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 20:50 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилпропущено... entity коды АСПушкин будет обрабатывать? Это ты о чем? перед написанием парсера крайне желательно ознакомиться со спецификацией формата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 20:59 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
У меня знания в области права такие же как у балерины по тяжелой атлетики. Поэтому просьба дать ответ на кое-какие вопросы. Ну вот скажем осилю и доведу до production а-ля MSXML libraries. Если разместить на github будет ли на меня "наезжать" Microsoft? C++ код мой /доработанный TinyXML2 и очень существенно/, но API то не мой. Так как TinyXML2 превратился в а-ля MSXML, то не будет возражать автор этой библиотеки против такого произвола? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2016, 23:57 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Так как TinyXML2 превратился в а-ля MSXML, то не будет возражать автор этой библиотеки против такого произвола? До тех пор пока ты не зарабатываешь на нем деньги - всем будет пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 00:17 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Я не совсем понял, а в чем собственно проблема параллельно парсить разные куски файла? Для этого требуется стандартный парсер XML поддерживающий абстрактные источники данных (например std::istream), и написать адаптер который из любой заданной позиции файла находит первый тег, и оттуда начинает скармливать парсеру данные до определенного предела. Ну и добавить обработку обрезков попадающих в разные секции. Естественно, XML данные должны иметь регулярную структуру для этого - быть наборами однотипных тегов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 01:01 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Топик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма но решительно лень да и автор поставил постановку весьма философскую дескыть сколько ангелов танцуют на иголочке или может ли господь поднять камень e.t.c. Вот и перекидываемся лениво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 01:17 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
maytonТопик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма но решительно леньА зачем спорить? Просто выскажете свое мнение и при этом желательно объяснить его. ИМХНО - можно реализовать алгоритма параллельного парсинга. Вопрос только в одном - "Будет ли польза от этого?". Как по мне - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 01:26 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012maytonТопик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма но решительно леньА зачем спорить? Просто выскажете свое мнение и при этом желательно объяснить его. ИМХНО - можно реализовать алгоритма параллельного парсинга. Вопрос только в одном - "Будет ли польза от этого?". Как по мне - да. Не будет пользы. Один уже пытался сделать самый быстрый в мире парсер: http://www.sql.ru/forum/1001189/proekt-apollosax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 10:11 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вопрос только в одном - "Будет ли польза от этого?". Как по мне - да. пользы никакой , а вред конкретный - потеря времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 10:38 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Гм. Раньше использовал для работы "Msxml2.DOMDocument.4.0", а теперь TinyMSXML /шутка/. Все Ok! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 15:20 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012maytonТопик превращяется в зыбкое болото. Я-бы мог еще поспорить на тему КПД этого механизма но решительно леньА зачем спорить? Просто выскажете свое мнение и при этом желательно объяснить его. ИМХНО - можно реализовать алгоритма параллельного парсинга. Вопрос только в одном - "Будет ли польза от этого?". Как по мне - да. имхо, если есть утверждение, что парсинг медленнее загрузки с диска, то для начала стоит пройтись профайлером и выяснить, что конкретно тормозит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 15:56 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)имхо, если есть утверждение, что парсинг медленнее загрузки с диска, то для начала стоит пройтись профайлером и выяснить, что конкретно тормозитДа причем здесь это. Вопрос в другом. Вот скажем загрузили в memory xml размером 10MB. Что будет более эффективно. Парсить его в 1 потоке или параллельно в нескольких? У меня нет цели кому-то что-то доказывать. Вопрос чисто дискуссионный /и не более того/. PS: Хотя некоторые кто читает посты по диагонали справа на лево с пропуском "многострочных частей" начинают выдумывать некое свое видение в чем суть поста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:08 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вот скажем загрузили в memory xml размером 10MB. Что будет более эффективно. Парсить его в 1 потоке или параллельно в нескольких? на данный момент развития ЭВМ, имхо в 1-м Ну а вообще мерить надо. Есть что мерить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 17:46 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вопрос в другом. Вот скажем загрузили в memory xml размером 10MB. Что будет более эффективно. Парсить его в 1 потоке или параллельно в нескольких? Вопрос действительно в другом. Вопрос куда дальше результаты разбора пойдут? Готово ли конечное хранилище (пусть даже промежуточный кэш) параллельно принимать распарсенные данные на бешенной скорости? Давай определимся сначала какая скорость есть и какая нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:14 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Ну а вообще мерить надо. Есть что мерить?Пока для меня это не актуально. Вот уже использую в своих проектах свою поделку вместо "Msxml2.DOMDocument.4.0". И совместимость полная и в скорости по крайней мере /проверил/ не уступает "Msxml2.DOMDocument.4.0". Пока мне этого достаточно. Кой какие начатые проекты подтяну и "расширю" функциональность DOM. Точнее не DOM, а как бы это сказать, вместе с DOM будет соседствовать и другая модель представления данных. При этом функциональность DOM не будет нарушена. Да много работы ... Многое уже было апробировано ранее /например при разработке binary three/ и предшествующий опыт использую в новых проектах. PS: У меня и в мыслях нет кого-то перещеголять. Щегольство - не мой удел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:21 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TГотово ли конечное хранилище (пусть даже промежуточный кэш) параллельно принимать распарсенные данные на бешенной скорости?Дима. Топик не предопределяет, что уже имеются проектные решения. Цель топика подискутировать на эту тему. Если у вас имеются предложения - милости просим /впрочем это касается всех и меня в т.ч./. Единственно что могу пока сказать - верю, что распаралелить парсинг можно. Кому это может пригодиться? В первую очередь google /конечно шутка/ высоконагруженным сайтам и ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:39 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Кому это может пригодиться? В первую очередь google /конечно шутка/ высоконагруженным сайтам и ... а если серьёзно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:44 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Единственно что могу пока сказать - верю, что распаралелить парсинг можно. С верой - это к свидетелям-чего-ни-попадя. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:47 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovС верой - это к свидетелям-чего-ни-попадя.Так вера подкреплена и опытом ... Конечно вы пошутили. Но все же какое ваше мнение по параллельному парсингу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 19:56 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Единственно что могу пока сказать - верю, что распаралелить парсинг можно. С дуру можно и ... сам знаешь что. Распараллелил тут одним по их же просьбе, а их админы с претензией: "какого уха ты нам сервер ложишь?" Да, на 100% загрузил им все ядра на пару минут несколько раз в день, но сами ведь просили чтоб максимально быстро было однопоточно было ~10 минут, но остальное работало. Это я к тому действительно ли это нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:02 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропила если серьёзно?Хорошо сделаю серьезный вид ... И так. Если бы не пришлось решать эту задачу, то /скорее всего/ она включала следующие этапы: - разработка алгоритма позволяющего перед сохранением xml "выделить" логические блоки; - предоставить программисту API для возможности "ручного" выделения логических блоков; Далее уже на основе предшествующих решений - разработать алгоритм параллельного парсинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:10 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TЭто я к тому действительно ли это нужно.Из того, что вы сказали ИМХНО нужно предусмотреть возможность получения парсером свойств типа: - одно поточный или параллельный парсинг; - max количество задействованных процессоров и потоков; - режим фонового парсинга /чтобы парсинг не властвовал над всем и вся/. ... ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:15 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Конечно вы пошутили. Нет, я абсолютно серьёзен. И моё мнение по этому поводу я уже неоднократно озвучил выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:20 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНет, я абсолютно серьёзен. И моё мнение по этому поводу я уже неоднократно озвучил выше.Уважаю ваше мнение. Предыдущие ваши messages мною были поняты, что у вас имеются ряд текстов не поддающих параллельному парсингу. Или в целом считаете, что параллельный парсинг xml не нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:24 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Или в целом считаете, что параллельный парсинг xml не нужен? да. совсем не нужен. особенно на тяжелонагруженной сисеме - где ядра и так загружены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:28 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TЭто я к тому действительно ли это нужно.Из того, что вы сказали ИМХНО нужно предусмотреть возможность получения парсером свойств типа: - одно поточный или параллельный парсинг; - max количество задействованных процессоров и потоков; - режим фонового парсинга /чтобы парсинг не властвовал над всем и вся/. ... ... Я уже писал выше что подобные вещи пишутся "под заказ", можно наворотить все что угодно, но писать надо с нуля, не может быть супер быстрого парсера на все случаи жизни. Если важна скорость, то надо писать под конкретную задачу, а не универсально. Возможно кто-то написав 100500 супер-быстрых парсеров найдет их общее место, обобщит и сделает свой. Но этот путь надо сначала пройти, затем делиться результатом, а не наоборот сначала придумать решение, а потом ждать оценки эффективности его применения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:33 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилда. совсем не нужен. особенно на тяжелонагруженной сисеме - где ядра и так загружены.Исходя из вашего суждения, много чего нужно отменить и запретить ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:34 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Изопропилда. совсем не нужен. особенно на тяжелонагруженной сисеме - где ядра и так загружены.Исходя из вашего суждения, много чего нужно отменить и запретить ... где я предлагал отменять уже сделанное и тем более что-то запрещать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:40 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Dima TНо этот путь надо сначала пройти, затем делиться результатом, а не наоборот сначала придумать решение, а потом ждать оценки эффективности его применения.Согласен с вами. Кому нужно будет тот обсуждать не будет, а возьмет и реализует. Вердикт из этого пока один - ждем решения от того кому это будет нужно. PS: Предшествующие ответы форумчан говорят об одном, что поднятый вопрос их или не интересует или не нужным. ИМХНО считаю, что далее "толочь в ступе" этот вопрос не зачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:42 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Изопропилгде я предлагал отменять уже сделанное и тем более что-то запрещать?Ваш ответ был понят мной так как сказано выше. Ведь вы говорили о высоко нагруженных системах, которые не следует перезагружать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:47 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Благодарю всех за участие в обсуждении темы топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:51 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012Кому нужно будет тот обсуждать не будет, а возьмет и реализует. Вердикт из этого пока один - ждем решения от того кому это будет нужно. Неправильный вердикт. Если кому нужно не сможет, то обратиться - поможем, но нужна конкретная задача, а не оптимизация сферического коня в вакууме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 20:54 |
|
||
|
Как распараллелить загрузку XML?
|
|||
|---|---|---|---|
|
#18+
Владимир2012, можно закрыть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 00:40 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018337]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
119ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 226ms |

| 0 / 0 |
