Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Аггрегирование иерархии / 3 сообщений из 3, страница 1 из 1
21.11.2008, 16:16:40
    #35668643
Диман.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аггрегирование иерархии
Всем привет.
Исходная конфигурация: Microsoft SQL 2005 Express
Две таблицы.
Первая - объекты Active Directory:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[Objects](
	[Id] [int] NOT NULL,
	[ParentId] [int] NULL,
	[Name] [nvarchar](max) COLLATE Cyrillic_General_CI_AS NOT NULL,
	[Type] [nvarchar]( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL,
 CONSTRAINT [PK_Objects] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

Вторая - Использование объектами каких либо ресурсов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[Usage](
	[Id] [int] IDENTITY( 1 , 1 ) NOT NULL,
	[ResourceId] [int] NOT NULL,
	[ObjectId] [int] NOT NULL,
	[Created] [datetime] NOT NULL,
 CONSTRAINT [PK_Usage] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

Необходимо получать отчёты по использованию ресурсов пользователями из определенных Организационных подразделений (OU) по датам за период времени.
Пример такого отчёта:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH ADO ([ObjectId], [Name]) AS
(
	SELECT o.[Id], o.[Name]
	FROM [Objects] o
	WHERE o.[Name] = 'Staff'

	UNION ALL

	SELECT o.[Id], o.[Name]
	FROM [Objects] o
		INNER JOIN ADO ON o.ParentId = ADO.ObjectId
)

SELECT
	u.[ObjectId],
	COUNT(u.[ObjectId]) as Accesses,
	CONVERT(datetime, CONVERT(char( 8 ), u.[Created],  112 )) as [Date]
FROM [Usage] u LEFT JOIN ADO ON ADO.[ObjectId] = u.[ObjectId]
WHERE ResourceId =  1  AND Created BETWEEN '2008-06-01' AND '2008-10-01'
GROUP BY u.[ObjectId], CONVERT(datetime, CONVERT(char( 8 ), u.[Created],  112 ))

Таблица Usage быстро заполняется, 2-4 млн записей в неделю, думается что через год-два она станет крайне неповоротлива, чтобы обрабатывать подобные запросы.
Поэтому задача состоит в том, чтобы данные гребсти не из первоначальных таблиц, а складывать в отдельные в аггрегированном виде и оттуда выбирать.

Собственно в этом и вопрос. Как хранить данные?
Если учесть, что объекты АД - это иерархия и выборка итоговых данных должна фильтроваться по OU.
...
Рейтинг: 0 / 0
21.11.2008, 18:31:12
    #35668963
Mr Marmelad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аггрегирование иерархии
Коллега, процесс адаптации OLTP информации в OLAP аггрегированный формат известен под названием ETL - extract transformation and load. Почитайте немного на досуге.
...
Рейтинг: 0 / 0
21.11.2008, 18:33:55
    #35668971
Диман.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аггрегирование иерархии
Mr MarmeladКоллега, процесс адаптации OLTP информации в OLAP аггрегированный формат известен под названием ETL - extract transformation and load. Почитайте немного на досуге.

Спасибо. Почитаю.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Аггрегирование иерархии / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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