Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39374616&tid=2018337]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 403ms |

| 0 / 0 |
