Вызывает антирес и такой ишо разрез
(Царь из «Про Федота-стрельца»)
Всё в Cache хранится в глобалах. Данные, метаданные, классы, программы. Для просмотра глобалов в Портале управления существует удобный инструмент — страница «Просмотр данных глобала». Её-то мы сегодня и рассмотрим.
Примером глобала нам будет служить ^DeepSee.Cubes. Это глобал, в котором хранится список кубов DeepSee. Для чтения этой статьи знать DeepSee вам совершенно не обязательно.
Чтобы попасть на страницу «Просмотр данных глобала», откройте Портал Управления, выберите «Обозреватель системы» (System Explorer) > «Глобалы» (Globals). Затем слева нужную область, и нажмите «Просмотр» рядом с нужным глобалом.
В нашем случае выберите область SAMPLES и глобал DeepSee.Cubes.
На моей инсталляции эта страница выглядит так:
В серьёзных глобалах данных очень много (миллионы узлов). По умолчанию страница Просмотра показывает только первые 100. Можно увеличить это число, но чем большее количество узлов для вывода вы зададите, тем дольше страница будет грузиться.
Самый интересное поле ввода на этой странице — Маска Поиска глобалов. Рассмотрению различных масок мы и посвятим оставшуюся часть статьи.
Итак, пусть маска содержит
- Имя узла. Просмотр выведет только этот узел. Без потомков, даже если они есть.
Если значения в самом узле нет, но есть потомки, Просмотр покажет значение «~pointer».
- Имя узла без последней закрывающей скобки. Просмотр выведет узел и всех его потомков:
- Пустые индексы в имени глобала. Просмотр выведет все узлы, которые подходят под маску.
В данном примере Просмотр выводит все узлы, у которых три индекса, третий из которых “bucketSize”, а первые два — любые:
Можно задать все индексы пустыми. Тогда просмотр выведет все узлы, у которых индексов указанное число.
Например три:
Два:
Или один:
- Интервалы. Значение индекса можно записать интервалом начало:конец. Просмотр покажет только те узлы, индексы, которых попадают в заданный интервал.
Описание масок на английском языке приведено в документации. Надеюсь, использование масок сделает ваше повседневное общение с глобалами ещё приятнее!
Бонус
Страница Просмотр использует публичный API — запрос Get в классе %Library.Global:
SAMPLES>do ##class(%ResultSet).RunQuery("%Global","Get",$namespace,"^DeepSee.Cubes()")
Global Name:Value:Name Format:Value Format:Permissions:
^DeepSee.Cubes("classes"):~pointer:1:1::
^DeepSee.Cubes("cubes"):~pointer:1:1::
^DeepSee.Cubes("kpis"):~pointer:1:1::
^DeepSee.Cubes("prior"):~pointer:1:1::
^DeepSee.Cubes("sharesIndex"):~pointer:1:1::```