пятница, 27 августа 2010 г.

Часть 6: Реализация механизмов поддержки и порождения ссылок уровня хранения на базе системы хранения XML данных XSS

Ведение статистики

Для организации пространства статистики необходимо знать число обращений к различным элементам хранилища. Подсчет статистики обращений на клиентском уровне возложен на модуль ведения статистики, который находится в серверной части системы. При обращении к свойству объекта в экземпляре контейнерного типа серверу посылается отметка о том, что был прочитан элемент с данным идентификатором. При этом сохраняется только факт обращения к свойству, но не число обращений, поскольку с точки зрения актуальности данных невозможно отличить «полезное» пользовательское обращение к свойству от «неполезных» обращений элементов интерфейса, коих может быть много (например, при перерисовке элементов управления).
Собранная статистика каждого клиентского приложения хранится на сервер, где считается общее число обращений к каждому элементу. Оно равно количеству клиентских приложений, в процессе работы которых данный элемент был затребован. Также в задачи модуля ведения статистики входит построение копии пространства clip_image002 при перестроении хранилища.

Автоматическое порождение ссылок

Модуль перестроения хранилища выполняет функции, необходимые для переразбиения деревьев хранилища:
· выделение областей в деревьях;
· формирование итоговых деревьев раздельного хранения;
· физическое перестроение хранилища.

Алгоритм кластеризации

Каждый элемент исходной выборки представлен классом Element.
clip_image004
Рис. 1. Класс объекта выборки.
Свойства:
· Id – идентификатор элемента, соответствующий идентификатору элемента пространства clip_image006.
· P – число обращений к элементу.
· Tau – ресурсная стоимость поддерева элемента.
· Parent – родительский элемент.
· Children – список дочерних элементов первого уровня.
· Cluster – номер кластера, в который входит элемент.
Создаваемые кластеры представлены объектом Cluster.
clip_image008
Рис. 2. Кластер.
Свойства объекта Cluster:
· Number – номер кластера, генерируется случайным образом при создании кластера.
· Parent – родительский кластер.
· Children – список дочерних кластеров первого уровня.
· Elements – список элементов кластера.
Методы объекта Cluster:
· AddElement – добавляет элемент в кластер (добавляет элемент в коллекцию Elements и проставляет ему номер кластера).
Кластеризация осуществляется объектом ClusteringRoutine.
clip_image010
Рис 3. Класс, производящий кластеризацию элементов.
Основные поля и свойства:
· DoAction – делегат, выполняющийся в процессе обхода дерева.
· Clusters – список сформированных кластеров.
· Distances – список, содержащий вычисленные расстояния между объектами.
Основные методы:
· ClusterData – метод кластеризации, принимает на вход массив элементов, формирует список кластеров и каждый элемент помещает в кластер.
· CalculateDistance – вычисляет расстояние между двумя объектами.
· GetThreshold – вычисляет порог расстояния по заданному списку расстояний.
· GetAllChildren – возвращает список всех дочерних элементов.
· GetRootElements – возвращает список корневых элементов
· RemoveBiggestEdges – удаляет ребра, веса которых превышают вычисленный порог.
· TreeWalk – универсальный метод обхода дерева, вызывает выполнение делегата DoAction.

Алгоритм постобработки

Формирование итогового набора деревьев возложено на класс PostProcessingRoutine.
clip_image012
Рис. 4. Класс постобработки кластеров.
Основные методы:
· PostProcess – метод постобработки, принимает в качестве аргумента список кластеров и возвращает список кластеров, которые являются конечным вариантом набора деревьев раздельного хранения.
· GetClusterTau – вычисляет ресурсную стоимость разбора кластера.
· MergeClusters – сливает два кластера.
· MoveElementToAnotherCluster – перемещает элемент из кластера в кластер.
Результаты
В хранилище было помещено три документа общим размером 250 Мб. На рис. 5 приведены времена отклика сервера на запросы одной из инструментальных операций, использующей эти деревья. Операция является «локальной» и популярной. Данные приведены для первого запуска, когда кэш сервера не содержит данных.
clip_image014
Рис. 5. Времена отклика пакета запросов до перестроения хранилища.
На основании собранной в течение месяца статистики было проведено перестроение хранилища, в результате работы алгоритма из 3 деревьев было выделено 54 дерева раздельного хранения. Ниже приведен график времен отклика первого запуска той же операции после перестроения хранилища:
clip_image016
Рис. 6. Времена отклика пакета запросов после перестроения хранилища.
Среднее уменьшение времени отклика составило 63%. При повторном обращении к данным, содержащимся в кэше, уменьшение времени отклика не значительное, в пределах 5%.
За четыре последующих дня работы среднее время отклика сервера уменьшилось на 33%. Отличие среднего времени отклика от приведенных выше измерений можно объяснить наличием «нелокальных» операций, в частности ежедневно производилось резервное копирование данных, не обладающее свойством локальности, поскольку при такой операции обращение происходит ко всем элементам хранилища. Тем не менее, уменьшение времени отклика на треть является существенным результатом, а разработанный метод позволит в принципе хранить работать документы большого объема.
По мере развития XSS для нелокальных операций будет проводиться собственная оптимизация – расширение объединенного протокола (ОП) специальными командами.

Комментариев нет:

Отправить комментарий