Элементарная задачка - XML, добавление
Элементарная задачка.
Для тех кто ЗНАЕТ решение - просьба не постить код и не давать полного описания.
Ссылки на требуемое изучить для получения решения - весьма приветствуются.
Аналогично в обсуждении - приветствуется указание на проблемы в приводимом коде,
но не желательно заменять пишущего в осознании и исправлении проблем - ему не впрок.
Задача.
Требуется - добавлять какие-то фрагменты в ХМЛ файл.
Для простоты - пусть они будут одинаковые по структуре ХМЛ.
Вроде как все работает, но... медленно. И чем дальше - тем медленнее.
Вместо 10 минут на добавление одного фрагмента надо сделать... хммм... 100 милисекунд... хотя, пожалуй, много.. 20-ти хватит...
Да, пока не забыл - работа с файлом - остается. т.е. если рубильник смайнают - все должно работать без потерь... но журналировать процесс
не надо.
Никаких ограничений не ставится
- хочешь стандартные либы - будь ласка,
- хочешь штаны через голову - милости просим...
только одно ограничение - 20 милисек на добавление...
Надо таки сказать гораздо больше, что бы хоть кто то понял, что действительно требуется.
-----
Да вроде все необходимое сказано.
Требуется именно то что написано - добавить в ХМЛ документ еще один кусок ХМЛа. Сделать это надо максимально быстро.
Добавилось - пишем локально, объем добавления - небольшой.
Пока что вроде стало понятно, что поднять документ в память, добавить и записать обратно - будет медленно.
Почему - пока не понятно. (Не мне если что)
Был высказан вариант с высокой фрагментированностью дисков... Но, увы, искомое решение никак не зависит от фрагментированности.
Жду других вариантов...
есть большие сомнения, что это кого то это заинтересует
-----
Ну это как всегда - кто-то будет рыть чтобы найти ответ и чему-то в процессе научится, а кто-то будет говорить что стандарными либами это не сделать и, следовательно, решения нет...
Сделать это надо максимально быстро
В начальных условия было определено конкретное время но не определено какое именно время нужно измерять
объем добавления - небольшой
Небольшой это сколько? Одна строка....
Обрабатывать еще как то нужно добавление?
А вставлять в какое место? А исходный файл можно менять? Типа метку для вставки сделать.
А исходный файл и вставки одинаковые или как получится? И т.п. и т.д. - а гришь что всё сказано.
чему-то в процессе научится
Учится можно тому, что хотя-бы интересно, ну или нужно. А тут еще и с таймером сидеть
добавить в ХМЛ документ еще один кусок ХМЛа. Сделать это надо максимально быстро
В подобном виде, для какого-то конкретного файла и вставки можно еще как то обсуждать. А так ... ну ждите
Да, если кому надо чутка по-интереснее задачка, то сделаем так.
Документ - тот же.
А добавлять будем - из 30-ти разных потоков.
Естественно, надо решить проблему с синхронизацией записи из потоков...
И если кто думает писать какие хреновы сложности - шел бы он лесом - код требуется совсеm простой...
А тут еще и с таймером сидеть
-----
Вот и Я говорю - кто-то будет сидеть с таймером, а кто-то будет сидеть без таймера...
для какого-то конкретного файла
-----
Эээ... нет... не для конкретного.
Для конкретного ты напишешь решение номер один и оно пойдет в мусорник.
Пиши для любого какой тебе позже представят...
для какого-то конкретного файла
-----
Эээ... нет... не для конкретного.
Для конкретного ты напишешь решение номер один и оно пойдет в мусорник.
Пиши для любого какой тебе позже представят...
Вы уже на Гитхабе со своим уникальным универсальным решением или даже продаёте свою либу как продукт? Или это никому не надо? )))
Как решать не знаю.
В приведённых вами условиях слишком много неоговорено, поэтому всегда можно не уложиться в отведённое время. Наиболее быстрая задача, как мне кажется, это иметь заранее заготовленный план такого большого XML файла - т.е. где у него с какого адреса или строки что расположено. Или даже разбить этот файл на куски. И при этом нужно заранее знать, куда вставлять - произвольно не означает в случайное место же, а в какой-то определённый участок, примерно положение которого вы знаете? Т.е. по-любому нужно делать инфраструктуру по обработке таких больших файлов - своего рода "базу данных по большим XML". В этом смысле, наверное, проще действительно хранить подобные данные в БД, и не в XML, а XML генерировать по запросу, или периодически и потом кешировать.
Я думаю, что если вы приведёте своё оригинальное решение, как вы успешно справились с этой задачей, на вас куча критики свалится, т.к. решение будет, скорее всего, либо неуниверсальным, либо требовать создание предварительной инфрастуктуры по обработке таких файлов для таких задач.
Никаких ограничений не ставится
- хочешь стандартные либы - будь ласка,
- хочешь штаны через голову - милости просим...
только одно ограничение - 20 милисек на добавление...
Элементарно:
1) десериализуешь XML в нужный объект
2) добавляешь необходимые данные
3) сериализуешь объект в XML
4) если из-за огромных размеров XML описанная выше процедура не укладывается в требуемые 20 милисек (или если перезаписывать этот XML надо слишком часто, т.е. время на запись становится критичной), то выгоняешь ссаными тряпками мудака, который вместо БД решил использовать XML.
если из-за огромных размеров XML описанная выше процедура не укладывается в требуемые 20 милисек (или если перезаписывать этот XML надо слишком часто, т.е. время на запись становится критичной), то выгоняешь ссаными тряпками мудака, который вместо БД решил использовать XML.
охуенный вывод.
это есть если тебе XML приходит от условного Finanzamt’а и его надо передать в фирму рога и копыта, то вы всю коммуникацию должны перевести на БД?!
Вообще, задача "в ооочень большой объём структурированных данных добавляем в произвольное место другие данные" - это больше для БД. Уж точно не единого текстового XML где-то в файловом хранилище.
Как я понимаю, единственное оправдание подобной задачи - вот откуда-то пришло и будет всегда так приходить (типа как тут сказали - из какого-нибудь амта), и повлиять мы на это не можем. Шеф сказал 20 мс и точка, из амта пришёл многогиговый XML и точка, нужно вставлять в произвольное место куски и точка, решение должно быть универсальным и точка. Ах, да - на решение 15 минут.
это есть если тебе XML приходит от условного Finanzamt’а и его надо передать в фирму рога и копыта, то вы всю коммуникацию должны перевести на БД?!
Нет. Если тебе приходит XML от условного Finanzamt'а и его надо передать в фирму рога и копыта, то это разовая операция и время ее исполнения не играет большой роли.
А если тебе надо добиться скорости работы, то ты ищешь оптимальные средства для поставленной задачи.
На одном проекте у нас было куча пакетных данных и взаимосвязей между данными. Ну т.е. пакет данных типа А может быть связан с пакетом данных типа Б, но не может быть связан с пакетом данных типа С. Начальство решило, что оптимально использовать TFS, т.к. там все это есть из коробки плюс к этом данные срази в пакетах, плюс есть история изменений и много других плюшек. Когда я пришел в проект все уже было почти
готово к запуску, но тем не менее я сказал начальству, что TFS для этих целей не подходит и стоит ожидать большую жопу. На тестах и презентации все летало. Выпустили в продакшен... и через месяц посыпались жалобы, что жескать система писец какая медленная. Сукой оказалась TFS :D Пришлось начальству краснеть, получать люлей и следующие месяца 3 мы переводили систему с TFS на MSSQL. Так что для каждой задачи надо подбирать подходящее решение.
Как решать не знаю.
-----
Это Я вполне хорошо понимаю - задачка дана именно под то что ты не знаешь.
слишком много неоговорено
-----
Уточняй. Что будет реально влиять на выполнение задачи - доопределим.
либо неуниверсальным, либо требовать
-----
А для тебя поставлены какие-то ограничения? Вроде как нет.
Извращайся как можешь/хочешь.
Гарантирую - когда будет приемлемое решение - будет весьма полезно.
С SAX будет побыстрее.
-----
Насколько? Успеешь за 20 мил отсканить SAXom 10-20 гиг?
А если уже сейчас:
- понимаешь что не успеешь
- утверждается что решение есть
то надо как-то подумать над вопросом...
Но я за тряпки
-----
Подсказка - посмотри из чего выплыла задачка.
Ах, да - на решение 15 минут.
-----
Вообще-то, тебе давалось два часа.
А требуемый по заданию код - да, можно написать за 10-15 минут...
Как же ты, бедолага, будешь работать при таком подходе к решению задач...
Про тряпки тут уже поминали... перед этим еще ПМ поимеет по полной...