2012-02-09 2 views
4

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

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

+0

Что такое «как есть» - хранится в какой-либо структуре DOM? – LarsH

+0

«Как они есть» означает, что XML хранятся без какого-либо преобразования в двоичное или другое представление, которое может быть меньше в хранилище и/или быстрее для управления (= внести изменения). – Zottek

+0

Трансформация от чего? меньше/быстрее чем? XML как стандарт определяется с точки зрения формата его сериализации, а не с точки зрения его представления в памяти. Будете ли вы хранить их в памяти как непроверенные строки? как деревья DOM? – LarsH

ответ

7

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

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

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

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

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

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

0

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