Замечания по обновлению строки SiteVisit много раз за сеанс - PullRequest
0 голосов
/ 29 октября 2008

SQL Server 2005:

У меня есть строка SiteVisit, которая содержит информацию о посещении пользователей, например, HttpRefer, независимо от того, разместили ли они заказ, браузер и т. Д.

В настоящее время для отчетности я присоединяюсь к этой таблице с SiteEvent, которая содержит информацию о каждом посещенном разделе. Затем создается представление, которое показывает статистику о том, сколько разделов посетил каждый пользователь. Очевидно, что это не является устойчивым способом сделать это, и теперь я делаю некоторый рефакторинг.

Я бы хотел переместить столбец SectionsVisited из моего просмотра в фактический столбец в SiteVisit. Затем я обновлял его каждый раз, когда пользователь посещал этот сеанс.

Теперь мой актуальный вопрос : Какие соображения нужно учитывать при многократном обновлении строки за сеанс. Очевидно, у меня есть индекс в строке (в настоящее время индексируется с помощью GUID для предотвращения большинства злонамеренных изменений).

Я просто хочу знать, что неочевидные вещи я должен делать (если таковые имеются). Есть ли какие-то конкретные вещи, которые я должен сделать для оптимизации таблицы, или SQL Server 2005 в значительной степени позаботится о себе

Примечание: это флэш-сайт, поэтому, пожалуйста, не рекомендуйте инструмент отслеживания. Я хочу сделать немного «сумасшедший» Datamining и разработали отслеживание как таковое. В первую очередь это вопрос базы данных, а не вопрос о том, «как отслеживать».

Запрошенное определение таблицы:

USE [RazorSite]
GO
/****** Object:  Table [dbo].[SiteVisit]    Script Date: 10/29/2008 14:35:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[SiteVisit](
    [SiteVisitId] [int] IDENTITY(1,1) NOT NULL,
    [SiteUserId] [int] NULL,
    [ClientGUID] [uniqueidentifier] ROWGUIDCOL  NULL CONSTRAINT [DF_SiteVisit_ClientGUID]  DEFAULT (newid()),
    [ServerGUID] [uniqueidentifier] NULL,
    [UserGUID] [uniqueidentifier] NULL,
    [SiteId] [int] NOT NULL,
    [EntryURL] [varchar](100) NULL,
    [CampaignId] [varchar](50) NULL,
    [Date] [datetime] NOT NULL,
    [Cookie] [varchar](50) NULL,
    [UserAgent] [varchar](255) NULL,
    [Platform] [int] NULL,
    [Referer] [varchar](255) NULL,
    [RegisteredReferer] [int] NULL,
    [FlashVersion] [varchar](20) NULL,
    [SiteURL] [varchar](100) NULL,
    [Email] [varchar](50) NULL,
    [FlexSWZVersion] [varchar](20) NULL,
    [HostAddress] [varchar](20) NULL,
    [HostName] [varchar](100) NULL,
    [InitialStageSize] [varchar](20) NULL,
    [OrderId] [varchar](50) NULL,
    [ScreenResolution] [varchar](50) NULL,
    [TotalTimeOnSite] [int] NULL,
    [CumulativeVisitCount] [int] NULL CONSTRAINT [DF_SiteVisit_CumulativeVisitCount]  DEFAULT ((0)),
    [ContentActivatedTime] [int] NULL CONSTRAINT [DF_SiteVisit_ContentActivatedTime]  DEFAULT ((0)),
    [ContentCompleteTime] [int] NULL,
    [MasterVersion] [int] NULL CONSTRAINT [DF_SiteVisit_MasterVersion]  DEFAULT ((0)),
 CONSTRAINT [PK_SiteVisit] PRIMARY KEY CLUSTERED 
(
    [SiteVisitId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[SiteVisit]  WITH CHECK ADD  CONSTRAINT [FK_SiteVisit_Platform] FOREIGN KEY([Platform])
REFERENCES [dbo].[Platform] ([PlatformId])
GO
ALTER TABLE [dbo].[SiteVisit] CHECK CONSTRAINT [FK_SiteVisit_Platform]
GO
ALTER TABLE [dbo].[SiteVisit]  WITH CHECK ADD  CONSTRAINT [FK_SiteVisit_Site] FOREIGN KEY([SiteId])
REFERENCES [dbo].[Site] ([SiteId])
GO
ALTER TABLE [dbo].[SiteVisit] CHECK CONSTRAINT [FK_SiteVisit_Site]
GO
ALTER TABLE [dbo].[SiteVisit]  WITH CHECK ADD  CONSTRAINT [FK_SiteVisit_SiteUser] FOREIGN KEY([SiteUserId])
REFERENCES [dbo].[SiteUser] ([SiteUserId])
GO
ALTER TABLE [dbo].[SiteVisit] CHECK CONSTRAINT [FK_SiteVisit_SiteUser]

Текущие показатели:

IX_CampaignId - non unique, non clustered
IX_ClientGUID - Unique, non clustered     <-- this is how a user is identified for updates
IX_UserGUID - non unique, non clustered
PK_SiteVisit - (SiteVisitId column) - clustered

1 Ответ

0 голосов
/ 29 октября 2008

Лучшее предложение, которое я могу дать: держите стол маленьким.

Как? Имейте одну таблицу, которая содержит все «живые» данные, то есть активные сеансы. Когда сеанс истекает: переместите данные в «архивную» таблицу или даже на другой сервер базы данных, чтобы провести майнинг.

Очень мало индексов для "живой" таблицы (идентификатор сессии). Вы можете иметь все нужные индексы в таблице «архив» для более быстрого восстановления данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...