Обработка больших документов XML в памяти - PullRequest
4 голосов
/ 10 февраля 2012

Мне нужно хранить очень большое количество XML-файлов в памяти (скорее всего, в качестве распределенного кэша будет использоваться Oracle Coherence).Ожидается, что в памяти будет храниться 100 000 XML.Эти XML довольно большие - ок.250 КБ каждый.Эти XML запрашиваются другими системами - они запрашивают только ту часть XML, которая относится к ним.Кроме того, они попросят внести изменения в содержимое XML.Нагрузка будет составлять около 300 таких запросов в минуту, более или менее равномерно распределенных между поиском и обновлением.Важным примечанием является то, что XML не структурированы, поэтому у меня не будет XSD для них, но у меня есть алгоритм для извлечения и обновления XML.

Мой вопрос заключается в том, что даст лучшую производительность:Хранение XML в памяти как есть, и все извлечение данных из них и обновлений с использованием XQuery или даже с использованием закодированных процедур, или для преобразования XML в объекты, манипулирования ими в коде, а затем преобразования их обратно в XMLкогда они запрашиваются другими системами?

Ответы [ 2 ]

7 голосов
/ 13 февраля 2012

У вас есть 100 000 документов на 250 КБ.Это составляет ок.24 ГБ необработанных данных.Если вы поместите это в память и захотите иметь возможность обрабатывать, фильтровать или обновлять его, у вас будет дополнительный коэффициент выброса, скажем, 10. Например, в результате вы получите желаемый объем памяти 240 ГБ.

Так что, если у вас достаточно памяти, это, конечно, лучшее место для ее хранения.Но вам нужно иметь запасную стратегию (что произойдет, если количество узлов вырастет из памяти?), И это станет еще сложнее, если вы не хотите терять обновления: что произойдет, если машина выйдет из строя?если вы обновляете в памяти: когда вы стираете обновления на диск?И еще есть над чем подумать.

И все же, чтобы ответить на ваш второй вопрос: превращаться в объекты или нет?У большинства людей возникает желание трансформировать XML в объекты с использованием PHP, ruby, Java, «.NET» и т. П. И даже хранить XML в базах данных SQL.Если вы хотите услышать честный ответ: не делайте этого, если у вас нет времени и денег, чтобы тратить .Объекты вносят большие накладные расходы на дополнительный анализ, проектирование, анализ, сортировку, тестирование, обслуживание ... Фактически это полностью устраняет гибкость XML, и я вижу, что это постоянно недооценивается.Исходя из моего опыта работы с XML и XQuery, вы экономите около 80% в среднем для вещей, которые я перечислил выше.

Кроме того, если вы навязываете гибкие данные XML в объекты, вы столкнетесь скошмар, если ваши структуры данных развиваются.

Возможно, вы захотите проверить масштабируемую базу данных 28 мсек для гибких данных , которая является PAAS в облаке.Там вы получаете все необходимое из коробки (включая распределение нагрузки, автоматическое восстановление, управление сохранением, репликацию, резервное копирование, автоматическое переключение при сбое, масштабирование и уменьшение, эластичность, управление памятью, сегментирование, ...).

Это только мое личное мнение, но, возможно, оно вносит еще как минимум некоторые аспекты в решение вашей проблемы.

0 голосов
/ 10 февраля 2012

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

...