PDA

View Full Version : آمار بازدید سایت



cactuskhan
شنبه 03 اردیبهشت 1390, 12:00 عصر
سلام
من یک پرتال دارم که حدود 50 سایت روی آن سوار است ، من برای نگهداری آمار بازدید روزانه یک جدول گرفتم که غیر از فیلد Identity یک فیلد برای ID سایت و یک فیلد برای تاریخ داره ، برای ویزیت هر سایت یکه رکورد در آن درج می شود . در نظر بگیرید این جدول بعد از 2 ما به بیش از 8 میلیون رکورد می رسد که sql کند شده و من مجبوم این جدول رو زود به زود خالی کنم .

سوال : آیا راه حلی برای طراحی همچین جدولی وجود داره که من اینطور به درد سر نیوفتم

حمیدرضاصادقیان
شنبه 03 اردیبهشت 1390, 12:23 عصر
سلام.
خوب یک راه این هست که یک جدول باشه با کد سایت - نام سایت - تعداد نمایش .
که هربار که ویزیت میشه تعداد نمایش اون بروز بشه.
یک راه دیگه هم این هست که یک جدول باشه با کد سایت و نام سایت.
و جدول زیر مجموعه ای هم باشه با یک فیلد Identity و فیلد کد سایت و تاریخ بازدید.

در روش اول دیگه تاریخ رو نمیشه نمایش داد.
ولی در روش دوم میتوان به ازای هر بازدید از سایت یک رکورد در این جدول درج کرد . ولی نیازی به خالی کردن نیست.چون درج یک رکورد زمان زیادی نمیبره.
مگر اینکه بخواهید کار خاص دیگری انجام دهید.

cactuskhan
یک شنبه 04 اردیبهشت 1390, 10:27 صبح
مشکل در insert نیست !
من در حال حاضر دارم از روش دوم استفاده می کنم . اشکالش اینکه بازدید روزانه خیلی سنگینه ! میخواد از بین 7 میلیون رکورد تعداد بازدید امروز یک سایت رو استخراج کنه ! می خوام بازدید روزانه رو داشته باشم ! یا اینکه بدونم این سایت طی 2 ماه گذشته چقدر بازدید داشته

حمیدرضاصادقیان
یک شنبه 04 اردیبهشت 1390, 12:41 عصر
خوب دوست عزیز پس اگر اینطوریه کوئری که برای بدست آوردن رکوردها می نویسید و Plan مربوطه رو اینجا قرار بدید.

cactuskhan
یک شنبه 04 اردیبهشت 1390, 13:36 عصر
بازدید روزانه

ALTER Procedure [dbo].[sp_M_CounterByDate_SelectRow]
@SiteID BIGINT,
@Date DATETIME
As
Begin
Select
COUNT(ID) AS TodayVisit

From M_CounterByDate
Where
[SiteId] = @SiteID AND [Date]=@Date
End

FastCode
یک شنبه 04 اردیبهشت 1390, 13:43 عصر
شک روش سخت و highly efficient با امکانات عالی وجود داره.
باید یکم وقت بزاری:
جداول
لیست سایتها.
Sites

لیست attribute ها.مثل user agent, OS, ....
Attributes

لبیست مقادیر attribute ها.
Values


و جدول اصلی که شامل
ID
SiteID
AttributeID
ValueID
Count
میشه.
برای اسمش فکر نکردم.مثلاْ X

وقتی که یک کاربر میخواد ثبت بشه.اول لیست attribute های http ش رو استخراج میکنی.
هر کدوم که وجود نداشت توی جدول دوم ثبت میکنی.
بعد مثادیرش رو در جدول سوم پیدا میکنی.
هر کدوم که وجود نداشت ثبت میکنی.
بعد سطر حاوی اون تاریخ و اون attribute و مقدارش رو در جدول آخر پیدا میکنی.اگر وجود نداشت ثبت میکنی.اگر داشت Update میکنی.
اگی میخوهی IP ها رو هم log بکنی یک جدول با دو ستون میخواهی.
که با هم یک index میسازند.
IP varbinary(16)
XID int
به همین راحتی.
اینطوری اگر یک نفر با دو تا agent یا با چند تا مرورگر یا سیستم وارد بشه میتونی متوجه بشی.
حجم اصلاعات هم در این روش فکر میکنم به شکل قابل توجهی کمه.:)

اگر سوالی هست در خدمتم.

حمیدرضاصادقیان
یک شنبه 04 اردیبهشت 1390, 13:55 عصر
این همون توضیحی هست که در بالا من ارائه دادم. فقط مشکل اینجاست که اگر بخوان لاگ کاربران رو نیز داشته باشند باز حجم اطلاعات زیاد خواهد بود و نمیشه از اون گریخت.