powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / DeepSee Cube индексирование
2 сообщений из 2, страница 1 из 1
DeepSee Cube индексирование
    #37739580
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стали использовать DeepSee Аналитику.
Столкнулись с проблемой быстродействия.

Что мы делаем.
Строим Кубик по 4 измерениям [время{год,месяц,день}, маркетологи, товары, производители] Мера [сумма по закупу]
Пользователь обычно накладывает фильтр на время, а из оставшихся 3 таблиц строит X и Y оси.

Проблема состоит в том, что отчет строится очень долго, гораздо дольше чем если выводить его SQL'ем через GROUP By

Возник вопрос про индексирование, дело в том, что когда смотришь таблицу фактов построенную DeepSee, то видно что он построил Bitmap индексы по каждому уровню измерений и Bitslice индекс по агрегационной мере.
Я думаю в этом и есть причина низкого быстродействия, потому как индекса по 1 измерению явно не достаточно для быстрой выборки. Оптимальным был бы индекс {время, Менеджер, Товар, Производитель}

Вопрос:
Можно ли как-нить "уговорить" DeepSee строить перекрестные индексы на измерения ( по аналогии с SSAS ) ?
Чтобы хотя бы по 2 измерения было в индексе?

Схема кубика:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<cube xmlns="http://www.intersystems.com/deepsee" name="SalesReport" displayName="Продажи" disabled="false" abstract="false" sourceClass="IMPORT.WAYBILL.ITEM.Data" countMeasureName="%COUNT" bucketSize="8" bitmapChunkInMemory="false" precompute="0">
  <dimension name="Дата" disabled="false" hasAll="true" allCaption="Дата(все)" allDisplayName="Дата(все)" sourceProperty="docDate" type="time" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level name="Год" disabled="false" timeFunction="Year" list="false" useDisplayValue="true">
      </level>
      <level name="Месяц" disabled="false" timeFunction="MonthYear" list="false" useDisplayValue="true">
      </level>
      <level name="День" disabled="false" timeFunction="DayMonthYear" list="false" useDisplayValue="true">
      </level>
    </hierarchy>
  </dimension>
  <dimension name="Менеджер" disabled="false" hasAll="true" allCaption="Менеджер(все)" allDisplayName="Менеджер(все)" type="data" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level sourceProperty="agentItem.ClName" name="Менеджер" disabled="false" list="false" useDisplayValue="true">
      </level>
    </hierarchy>
  </dimension>
  <dimension name="Товар" disabled="false" hasAll="true" allCaption="Товар(все)" allDisplayName="Товар(все)" type="data" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level sourceProperty="goodsItem.storedName" name="Товар" disabled="false" list="false" useDisplayValue="true"></level>
    </hierarchy>
  </dimension>
  <dimension name="Производитель" disabled="false" hasAll="true" allCaption="Производитель(все)" allDisplayName="Производитель(все)" type="data" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level sourceProperty="goodsItem.manufacturerItem.name" name="Производитель" disabled="false" list="false" useDisplayValue="true"></level>
    </hierarchy>
  </dimension>
  <measure sourceProperty="salePriceWoNDS" sourceExpression="(%source.salePriceWoNDS)*(1+(%source.saleNDS))" name="Сумма" disabled="false" aggregate="SUM" type="number" hidden="false" searchable="false"></measure>
</cube>



Схема индексов:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Parameter CUBENAME = "SalesReport";
Parameter SOURCECLASS = "IMPORT.WAYBILL.ITEM.Data";
/// Index for fact 2.
Index DxdocDateFxYear On DxdocDateFxYear [ Type = bitmap ];
/// Index for fact 3.
Index DxdocDateFxMonthYear On DxdocDateFxMonthYear [ Type = bitmap ];
/// Index for fact 4.
Index DxdocDateFxDayMonthYear On DxdocDateFxDayMonthYear [ Type = bitmap ];
/// Index for fact 5.
Index DxClNameViaclientItem On DxClNameViaclientItem [ Type = bitmap ];
/// Index for fact 6.
Index DxstoredNameViagoodsItem On DxstoredNameViagoodsItem [ Type = bitmap ];
/// Index for fact 7.
Index Dx1735608572 On Dx1735608572 [ Type = bitmap ];
...
Рейтинг: 0 / 0
DeepSee Cube индексирование
    #37739783
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov ,

Чтобы помочь Вам, необходимо иметь возможность воспроизвести ситуацию.
Было бы неплохо иметь полный тестовый пример, чтобы ничего не додумывать "с потолка".
НапримерКлассы данных и куба, процедура заполнения данными

Class test.Data Extends %Persistent
{

/// [23.11.1977-10.04.2005] ($horolog 50000-60000)
Property docDate As %Date;

/// [1-100]
Property ClName As %String;

/// [1-1000]
Property storedName As %String;

/// [1-500]
Property name As %String;

/// [1-100]
Property salePriceWoNDS As %Integer;

/// [1-100]
Property saleNDS As %Integer;

ClassMethod Fill()
{
  do DISABLE^%NOJRN
  
  do ..%KillExtent()
  
  set N=1000000
  for i=1:1:N set ^test.DataD(i)=$lb("",$r(10001)+50000,$r(100)+1,$r(1000)+1,$r(500)+1,$r(100)+1,$r(100)+1)
  set ^test.DataD=N
  
  do $system.SQL.TuneTable("test.Data",1,1)
  
  do ENABLE^%NOJRN
}

}

Class test.bi.Data Extends %DeepSee.CubeDefinition
{

/// Cube definition from Architect.
XData Cube [ XMLNamespace = " http://www.intersystems.com/deepsee"  ]
{
<cube xmlns=" http://www.intersystems.com/deepsee"  name="SalesReport" displayName="Продажи" disabled="false" abstract="false" sourceClass="test.Data" countMeasureName="%COUNT" bucketSize="8" bitmapChunkInMemory="false" precompute="0">
  <dimension name="Дата" disabled="false" hasAll="true" allCaption="Дата(все)" allDisplayName="Дата(все)" sourceProperty="docDate" type="time" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level name="Год" disabled="false" timeFunction="Year" list="false" useDisplayValue="true">
      </level>
      <level name="Месяц" disabled="false" timeFunction="MonthYear" list="false" useDisplayValue="true">
      </level>
      <level name="День" disabled="false" timeFunction="DayMonthYear" list="false" useDisplayValue="true">
      </level>
    </hierarchy>
  </dimension>
  <dimension name="Менеджер" disabled="false" hasAll="true" allCaption="Менеджер(все)" allDisplayName="Менеджер(все)" type="data" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level sourceProperty="ClName" name="Менеджер" disabled="false" list="false" useDisplayValue="true">
      </level>
    </hierarchy>
  </dimension>
  <dimension name="Товар" disabled="false" hasAll="true" allCaption="Товар(все)" allDisplayName="Товар(все)" type="data" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level sourceProperty="storedName" name="Товар" disabled="false" list="false" useDisplayValue="true"></level>
    </hierarchy>
  </dimension>
  <dimension name="Производитель" disabled="false" hasAll="true" allCaption="Производитель(все)" allDisplayName="Производитель(все)" type="data" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false">
      <level sourceProperty="name" name="Производитель" disabled="false" list="false" useDisplayValue="true"></level>
    </hierarchy>
  </dimension>
  <measure sourceProperty="salePriceWoNDS" sourceExpression="(%source.salePriceWoNDS)*(1+(%source.saleNDS))" name="Сумма" disabled="false" aggregate="SUM" type="number" hidden="false" searchable="false"></measure>
</cube>
}

}

MDX-запрос со скриншотом DeepSee Analyzer

SQL запрос

раскрытие понятий "долго" и "быстро" в количественном выражении
sigmovЯ думаю в этом и есть причина низкого быстродействия, потому как индекса по 1 измерению явно не достаточно для быстрой выборки. Оптимальным был бы индекс {время, Менеджер, Товар, Производитель} Добавление Собственных Индексов в Таблицу Фактов

PS: ещё может пригодиться Советы по повышению производительности DeepSee
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / DeepSee Cube индексирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]