Обработка больших документов XML в памяти

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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам