PDA

View Full Version : گرفتن کاربران آنلاین در یک جدول با رکوردی بیش 50میلیون



radian_c
پنج شنبه 08 مهر 1395, 14:24 عصر
سلام دوستان

من یک جدول در دیتابیسم دارم که حدودآ روزی 1میلیون رکورد درونش ثبت میشه

حالا من میخوام آنلاین ها رو بکشم بیرون و واسه انجام این کار وقتی تعداد رکورد ها حدود 20 میلیون هستش، مشکلی ندارم

ولی وقتی از این تعداد بالاتر بره، دیگه واسه نمایش آنلاین ها در بازه زمانی مختلف ، به مشکل بر میخورم و سرور قادر نیست به این درخواستم جواب بده.

قطعه کدی که واسه نمایش آنلاین ها استفاده میکنم :




$time = time() - 60*60 * 24 * $d;
$query = "SELECT DISTINCT aid onlines WHERE time > '$time'";



میخواستم بدونم آیا روش بهینه ای وجود داره واسه این درخواست ؟

ضمنآ من یک سرور اختصاصی دارم که از تجهیزات بسیار خوبی هم برخورد داره.

ممنون میشم راهنمایی بفرمایید.

mohamadali1374
پنج شنبه 08 مهر 1395, 22:45 عصر
سلام
من فکر میکنم این جدول کل افرادی که از سایت شما بازدید کرده اند رو نمایش میده و گرنه آنلاین بودن همزمان اون ها غیر ممکنه.

یه الگوریتم اینکه یه جدول دیگه در دیتابیس درست کنید که صرفا کابران آنلاین رو نگه داری میکنه این صورت که جدول دو تا ستون داره یکی ip و دیگری زمان رو نگه میداره. وقتی یه کاربر به سایت وارد شد یه سطر در این جدول ایجاد کنید به این معنی که کاربر جدیدی آنلاین شده.

و یه کد در هدر سایت قرار بدید که از هر صفحه دیگه ای که بازدید کرد زمان بازدید در جدول آنلاین ها آپدیت بشه.

حالا برای اینکه افراد آنلاین رو در دیتابیس بدست بیارید کافی سطر هایی رو که زمان اون ها مثلا از 5 دقیقه بیشتره رو حذف کنید(کاربرانی که در 5 دقیقه گذشته فعالیتی انجام نداده اند)
و سپس با یه select ساده تعداد سطر های جدول رو بدست بیارید که این تعداد همون افراد آنلاین در سایت هست.


این الگوریتم باعث میشه که حجم این جدول بالا نره و بازیابی راحت باشه. چون از این 50 میلیون نفری که فرمودید در حالت ایده آل حداکثر 6-7 هزار نفر اون ها آنلاین هستند