احسان الوندی
3 سال پیش توسط احسان الوندی مطرح شد
5 پاسخ

حفظ کارائی و سرعت سیستم با تفکیک جداول کاربران موقت از کاربران دائمی

با سلام خدمت دوستان عزیز

در حالی طراحی یک وب اپلیکیشنی هستم و اکنون با موضوع برخورد کردم نیاز به مشورت شما دوست عزیز دارم
به طور کلی 2 نوع کاربر در این سیستم دارم
1- کاربران موقتی یا کاربرانی که نیازی به نگهداری اطلاعات زیادی به جز شماره تماس از آنها ندارم که ("تعداد این کاربران خیلی زیاد هست")
این کاربران برای مشاهده آگهی به اپلیکیشن مراجعه میکنند که برای حفظ برخی ملاحظات مجبورم شماره موبایل آنها را ثبت کنم تا برای اکشن های که در سایت دارند log نگهداری کنم.

2- کاربران دائمی که اطلاعات کاملی از آنها نگه میدارم به نسبت کاربران موقتی تعدادشان کم است

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

ممنون میشم راهنمایی کنید.

@alireza.mzh @ali.bayat @mohsen.mehri6101 @farhadi @esn7ir @hesammousavi @khanzadimahdi @Alimotreb @milad @ali.farmani @mehdi539 @dev.amirhemmati1382 @crireal5
@juza66


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 3 سال پیش آپدیت شد
2

سلام
@Alvandi
یک راه دیگه میتونه استفاده از زمان بندی باشه ، هر یوزری که ثبت نام میکنه رو که ذخیره میکنید
تایم ثبت نام رو هم بهش اضافه کنید

اگر به فرض در طی یک زمان تونست به حالت واقعی در بیاد و از حالت موقتی خارج شه ، حالا بر اساس نوع سطح دسترسی یا هر پارامتر دیگه ای که دارید بهش فیچر اضافه کنید
اگر هم ن یکی فقط اومد ثبت نام کرد و رفت.... ، خب قطعا به درد نمیخوره
شما با زمان میتونید چک کنید که اگر یه یوزر به فرض 10 روز ، 20 روز ، 30 روز تغییری چیزی نداشت ، خب خداحافظ!! شماره رو توی لاگ یا جدول جداگانه یا هر جا میخوایید بریزید ، بریزید و بعد هم پاکش کنید
یه جورایی فیلتراسیون اعمال کنید روی هر فیچری که لازم دارید.
این روند توسط کرون ها میتونه به درستی پیاده سازی بشه.

موفق باشید


محمدحسن فرهادی
تخصص : علاقه مند به کد نویسی
@farhadi 3 سال پیش مطرح شد
5

@Alvandi سلام دوست بزرگوار. بنده تجربه ای در این زمینه ندارم و منتظر میمونم از نظرات دوستان استفاده کنم مثل شما
به رسم ادب چون منشن کردید پاسخ دادم و ازینکه نمیتونم راهنمایی کنم عذرخواهم


احسان الوندی
تخصص : توسعه دهنده وب
@Alvandi 3 سال پیش مطرح شد
0

در هر ۲ حالت من فیلدهای خالی نخواهم داشت
اگر اطلاعات همه کاربران رو داخل یک جدول هم نگه دارم برای اطلاعات اضافه کارلران دائمی یک جدول جداگانه که رابطه ۱ به ۱ داشته باشن نگه میدارم و اگر هم جدا باشن جدول کاربران موقت رو بدون اطلاعات اضافه خواهم داشت.
مشکلم اینه که اگر اطلاعات همه کاربران رو یکجا نگه دارم (که باز فیلد خالی نخواهم داشت) زمان کوئری گرفتن برای از کاربران دائمی اطلاعات کاربران موقت هم کنارشون وجود دارن که بخاطر حجم زیاد اطلاعات نگرانم که کوئری ها زمانبر باشن

حالت اول
TempUser(id,mobile)
MainUser(id, mobile)
MainUserInfo(id,MainUser_id,name,....)

حالت دوم
users(id , mobile)
UserInfo(id,user_id,name,....)


Ahmad Kalantari
تخصص : Reactjs laravel dev
@amdk.1987 3 سال پیش مطرح شد
1

تنها راه منطقی استفاده از روابط و نرمال کردن جداول هست. هر موجودیتی که میتونه نباشه رو به عنوان رابطه اضافه کنید و هر وقت خواستید اون رو با متد خودش فراخوانی کنید
مثلا کاربری تعداد خرید داره باید یه جدول ایجاد کنید فقط خریدها رو داخلش نگهداری کنید و یه فیلد user_id که بتونید متوجه بشید واسه کدوم یوزر هست
اگه بنچمارک میگیرید و کند هست سیستم میتونید از redis هم برای کش کردن استفاده کنید. البته واقعا بهتره کاربران مهمان رو فقط لاگشون را ذخیره کنید تا دیتابیس پر نشه. مثلا تعداد ویو یه پیج خاص رو فقط ذخیره کنید نه تمام اطلاعات کاربر رو
موفق باشید


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 3 سال پیش آپدیت شد
2

سلام
@Alvandi
یک راه دیگه میتونه استفاده از زمان بندی باشه ، هر یوزری که ثبت نام میکنه رو که ذخیره میکنید
تایم ثبت نام رو هم بهش اضافه کنید

اگر به فرض در طی یک زمان تونست به حالت واقعی در بیاد و از حالت موقتی خارج شه ، حالا بر اساس نوع سطح دسترسی یا هر پارامتر دیگه ای که دارید بهش فیچر اضافه کنید
اگر هم ن یکی فقط اومد ثبت نام کرد و رفت.... ، خب قطعا به درد نمیخوره
شما با زمان میتونید چک کنید که اگر یه یوزر به فرض 10 روز ، 20 روز ، 30 روز تغییری چیزی نداشت ، خب خداحافظ!! شماره رو توی لاگ یا جدول جداگانه یا هر جا میخوایید بریزید ، بریزید و بعد هم پاکش کنید
یه جورایی فیلتراسیون اعمال کنید روی هر فیچری که لازم دارید.
این روند توسط کرون ها میتونه به درستی پیاده سازی بشه.

موفق باشید


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 3 سال پیش آپدیت شد
0

درود . راه حل هایی که دوستان دادن خوب و عالی بود.فقط ترجیح میدم به مساله یک جور دیگه نگاه کنیم.

اما چیزی که مهمه اینه که در طول زمان اپلیکیشن شما گسترش پیدا میکنه و شما باید منطق برنامه رو (شاید مجبور بشید) عوض کنید.
حتما برنامه رو به صورت کاملا شی گرا پیاده سازی کنید. طوری که برای ذخیره و خواندن یک کاربر ( از هر دو نوع کاربر) برای هر عملیات یک تابع وجود داشته باشه.که اگر بعدا نیاز به اصلاح یا تغییر در ساختار برنامه بود .فقط کافیه توابع رو عوض کنید.
با این کار شما به اصطلاح عمل کپسولینگ رو انجام دادین و اگر در اینده در ساختار جداول یا دیتابیس تغییری اعمال کنید. نیازی به اصلاح برنامه ( جز در توابع نام برده) نیست.

از اونجا که میخوره پروژه شخصی باشه و در طول انجام دست خودتونه .اصلا سخت نگیرید به سریع ترین حالت ممکن ( یک جدول) کار رو شروع کنید . در اینده اگر نیاز به اصلاح بود ( استفاده از دیتابیس های nosQl یا روشی که دوست عزیز بالا گفته ) دیتابیس رو تغییر میدین و اصلاح ختم میشه به یک کلاس که توش چهار تا تابع تعریف کردین.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام