Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

​Элементарная задачка - XML, добавление

1904  1 2 3 4 5 все
Murr патриот28.09.21 19:42
Murr
28.09.21 19:42 

Элементарная задачка.


Для тех кто ЗНАЕТ решение - просьба не постить код и не давать полного описания.

Ссылки на требуемое изучить для получения решения - весьма приветствуются.

Аналогично в обсуждении - приветствуется указание на проблемы в приводимом коде,

но не желательно заменять пишущего в осознании и исправлении проблем - ему не впрок.


Задача.


Требуется - добавлять какие-то фрагменты в ХМЛ файл.
Для простоты - пусть они будут одинаковые по структуре ХМЛ.
Вроде как все работает, но... медленно. И чем дальше - тем медленнее.
Вместо 10 минут на добавление одного фрагмента надо сделать... хммм... 100 милисекунд... хотя, пожалуй, много.. 20-ти хватит...
Да, пока не забыл - работа с файлом - остается. т.е. если рубильник смайнают - все должно работать без потерь... но журналировать процесс не надо.

Никаких ограничений не ставится

- хочешь стандартные либы - будь ласка,

- хочешь штаны через голову - милости просим...

только одно ограничение - 20 милисек на добавление...

#1 
AlexNek патриот28.09.21 20:48
AlexNek
NEW 28.09.21 20:48 
в ответ Murr 28.09.21 19:42
20 милисек на добавление...

уточняю условия задачи хаха

100 МБ добавить в файл 10гиг, в произвольное место, на сетевом диске бебе

#2 
Murr патриот28.09.21 20:56
Murr
NEW 28.09.21 20:56 
в ответ AlexNek 28.09.21 20:48

Аааа... ну да, естественно...

Надо таки сказать - локальный диск, порция не более 4К...

Но ты же понимаешь какова цель у данной задачки?

Правильно - макнуть... потом - еще раз макнуть... пока не разозлится и не найдет решение... смущ

#3 
AlexNek патриот28.09.21 21:07
AlexNek
NEW 28.09.21 21:07 
в ответ Murr 28.09.21 20:56
Надо таки сказать

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

Но у меня есть большие сомнения, что это кого то это заинтересует.

#4 
Murr патриот28.09.21 22:05
Murr
NEW 28.09.21 22:05 
в ответ AlexNek 28.09.21 21:07

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

-----

Да вроде все необходимое сказано.


Требуется именно то что написано - добавить в ХМЛ документ еще один кусок ХМЛа. Сделать это надо максимально быстро.

Добавилось - пишем локально, объем добавления - небольшой.


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

Почему - пока не понятно. смущ (Не мне если что)

Был высказан вариант с высокой фрагментированностью дисков... Но, увы, искомое решение никак не зависит от фрагментированности.


Жду других вариантов...


есть большие сомнения, что это кого то это заинтересует

-----

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

#5 
AlexNek патриот28.09.21 22:44
AlexNek
NEW 28.09.21 22:44 
в ответ Murr 28.09.21 22:05
Сделать это надо максимально быстро

В начальных условия было определено конкретное время но не определено какое именно время нужно измерять спок


объем добавления - небольшой

Небольшой это сколько? Одна строка....

Обрабатывать еще как то нужно добавление?

А вставлять в какое место? А исходный файл можно менять? Типа метку для вставки сделать.

А исходный файл и вставки одинаковые или как получится? И т.п. и т.д. - а гришь что всё сказано.


чему-то в процессе научится

Учится можно тому, что хотя-бы интересно, ну или нужно. А тут еще и с таймером сидеть down


добавить в ХМЛ документ еще один кусок ХМЛа. Сделать это надо максимально быстро

В подобном виде, для какого-то конкретного файла и вставки можно еще как то обсуждать. А так ... ну ждите

#6 
Срыв покровов патриот28.09.21 23:19
NEW 28.09.21 23:19 
в ответ AlexNek 28.09.21 22:44

вроде не первый день на форуме, а высеры Мура всерьёз воспринимаете.

#7 
Murr патриот28.09.21 23:22
Murr
NEW 28.09.21 23:22 
в ответ Murr 28.09.21 22:05

Да, если кому надо чутка по-интереснее задачка, то сделаем так.


Документ - тот же.

А добавлять будем - из 30-ти разных потоков.

Естественно, надо решить проблему с синхронизацией записи из потоков... смущ

И если кто думает писать какие хреновы сложности - шел бы он лесом - код требуется совсеm простой...


#8 
Murr патриот28.09.21 23:37
Murr
NEW 28.09.21 23:37 
в ответ AlexNek 28.09.21 22:44

А тут еще и с таймером сидеть

-----

Вот и Я говорю - кто-то будет сидеть с таймером, а кто-то будет сидеть без таймера...


для какого-то конкретного файла

-----

Эээ... нет... не для конкретного.

Для конкретного ты напишешь решение номер один и оно пойдет в мусорник.

Пиши для любого какой тебе позже представят... улыб

#9 
Murr патриот28.09.21 23:40
Murr
NEW 28.09.21 23:40 
в ответ Срыв покровов 28.09.21 23:19

высеры Мура

-----

В данном случае "высеры Мура" имеют определенную цель...

Впрочем - как и всегда... спок

#10 
alex445 свой человек29.09.21 09:06
NEW 29.09.21 09:06 
в ответ Murr 28.09.21 23:37, Последний раз изменено 29.09.21 09:11 (alex445)
для какого-то конкретного файла

-----
Эээ... нет... не для конкретного.
Для конкретного ты напишешь решение номер один и оно пойдет в мусорник.
Пиши для любого какой тебе позже представят... улыб

Вы уже на Гитхабе со своим уникальным универсальным решением или даже продаёте свою либу как продукт? Или это никому не надо? )))


Как решать не знаю.


В приведённых вами условиях слишком много неоговорено, поэтому всегда можно не уложиться в отведённое время. Наиболее быстрая задача, как мне кажется, это иметь заранее заготовленный план такого большого XML файла - т.е. где у него с какого адреса или строки что расположено. Или даже разбить этот файл на куски. И при этом нужно заранее знать, куда вставлять - произвольно не означает в случайное место же, а в какой-то определённый участок, примерно положение которого вы знаете? Т.е. по-любому нужно делать инфраструктуру по обработке таких больших файлов - своего рода "базу данных по большим XML". В этом смысле, наверное, проще действительно хранить подобные данные в БД, и не в XML, а XML генерировать по запросу, или периодически и потом кешировать.


Я думаю, что если вы приведёте своё оригинальное решение, как вы успешно справились с этой задачей, на вас куча критики свалится, т.к. решение будет, скорее всего, либо неуниверсальным, либо требовать создание предварительной инфрастуктуры по обработке таких файлов для таких задач.

#11 
Программист коренной житель29.09.21 12:09
NEW 29.09.21 12:09 
в ответ Murr 28.09.21 19:42
Никаких ограничений не ставится
- хочешь стандартные либы - будь ласка,
- хочешь штаны через голову - милости просим...
только одно ограничение - 20 милисек на добавление...

Элементарно:

1) десериализуешь XML в нужный объект

2) добавляешь необходимые данные

3) сериализуешь объект в XML

4) если из-за огромных размеров XML описанная выше процедура не укладывается в требуемые 20 милисек (или если перезаписывать этот XML надо слишком часто, т.е. время на запись становится критичной), то выгоняешь ссаными тряпками мудака, который вместо БД решил использовать XML.

#12 
MrSanders коренной житель29.09.21 13:03
NEW 29.09.21 13:03 
в ответ Программист 29.09.21 12:09

С SAX будет побыстрее. Но я за тряпки :)

#13 
Срыв покровов патриот29.09.21 14:18
NEW 29.09.21 14:18 
в ответ Программист 29.09.21 12:09
если из-за огромных размеров XML описанная выше процедура не укладывается в требуемые 20 милисек (или если перезаписывать этот XML надо слишком часто, т.е. время на запись становится критичной), то выгоняешь ссаными тряпками мудака, который вместо БД решил использовать XML.

охуенный вывод.
это есть если тебе XML приходит от условного Finanzamt’а и его надо передать в фирму рога и копыта, то вы всю коммуникацию должны перевести на БД?!

#14 
alex445 свой человек29.09.21 14:31
NEW 29.09.21 14:31 
в ответ Срыв покровов 29.09.21 14:18, Последний раз изменено 29.09.21 14:45 (alex445)

Вообще, задача "в ооочень большой объём структурированных данных добавляем в произвольное место другие данные" - это больше для БД. Уж точно не единого текстового XML где-то в файловом хранилище.


Как я понимаю, единственное оправдание подобной задачи - вот откуда-то пришло и будет всегда так приходить (типа как тут сказали - из какого-нибудь амта), и повлиять мы на это не можем. Шеф сказал 20 мс и точка, из амта пришёл многогиговый XML и точка, нужно вставлять в произвольное место куски и точка, решение должно быть универсальным и точка. Ах, да - на решение 15 минут.

#15 
Программист коренной житель29.09.21 15:50
NEW 29.09.21 15:50 
в ответ Срыв покровов 29.09.21 14:18
это есть если тебе XML приходит от условного Finanzamt’а и его надо передать в фирму рога и копыта, то вы всю коммуникацию должны перевести на БД?!

Нет. Если тебе приходит XML от условного Finanzamt'а и его надо передать в фирму рога и копыта, то это разовая операция и время ее исполнения не играет большой роли.

А если тебе надо добиться скорости работы, то ты ищешь оптимальные средства для поставленной задачи.


На одном проекте у нас было куча пакетных данных и взаимосвязей между данными. Ну т.е. пакет данных типа А может быть связан с пакетом данных типа Б, но не может быть связан с пакетом данных типа С. Начальство решило, что оптимально использовать TFS, т.к. там все это есть из коробки плюс к этом данные срази в пакетах, плюс есть история изменений и много других плюшек. Когда я пришел в проект все уже было почти готово к запуску, но тем не менее я сказал начальству, что TFS для этих целей не подходит и стоит ожидать большую жопу. На тестах и презентации все летало. Выпустили в продакшен... и через месяц посыпались жалобы, что жескать система писец какая медленная. Сукой оказалась TFS :D Пришлось начальству краснеть, получать люлей и следующие месяца 3 мы переводили систему с TFS на MSSQL. Так что для каждой задачи надо подбирать подходящее решение.

#16 
Murr патриот29.09.21 15:53
Murr
NEW 29.09.21 15:53 
в ответ alex445 29.09.21 09:06

Как решать не знаю.

-----

Это Я вполне хорошо понимаю - задачка дана именно под то что ты не знаешь. улыб


слишком много неоговорено

-----

Уточняй. Что будет реально влиять на выполнение задачи - доопределим.


либо неуниверсальным, либо требовать

-----

А для тебя поставлены какие-то ограничения? Вроде как нет.

Извращайся как можешь/хочешь.

Гарантирую - когда будет приемлемое решение - будет весьма полезно.


#17 
Murr патриот29.09.21 16:02
Murr
NEW 29.09.21 16:02 
в ответ Программист 29.09.21 12:09

А если ЕСТЬ более простое решение, чем использование БД? безум


Ты, кстати, допустил ту же ошибку, которую уже разбирали: выполняешь парсинг всего файла, об котором в задании НИЧЕГО не говорится. смущ

#18 
Murr патриот29.09.21 16:10
Murr
NEW 29.09.21 16:10 
в ответ MrSanders 29.09.21 13:03

С SAX будет побыстрее.

-----

Насколько? Успеешь за 20 мил отсканить SAXom 10-20 гиг?

А если уже сейчас:

- понимаешь что не успеешь

- утверждается что решение есть

то надо как-то подумать над вопросом... смущ


Но я за тряпки

-----

Подсказка - посмотри из чего выплыла задачка. улыб

#19 
Murr патриот29.09.21 16:16
Murr
NEW 29.09.21 16:16 
в ответ alex445 29.09.21 14:31

Ах, да - на решение 15 минут.

-----

Вообще-то, тебе давалось два часа. смущ

А требуемый по заданию код - да, можно написать за 10-15 минут... спок


Как же ты, бедолага, будешь работать при таком подходе к решению задач... безум

Про тряпки тут уже поминали... перед этим еще ПМ поимеет по полной... спок

#20 
1 2 3 4 5 все