سلام
اول طرح سوال رو کامل شفاف و باز کنمش
میخوام راجب پیاده سازی یک نرم افزار صحبت کنیم که به جایی که وقتی به چند نفر میفروشیمش و دیتا بیس و دامنه ی متفاوتی رو براشون ایجاد میکنیم ک هر کدوم از این نرم افزار یا سایت ما استفاده کنن ، همشون با یک دامنه و یک دیتابیس سرو کار داشته باشن
مثلا شما ی نرم افزار حسابداری طراحی میکنی
برای فروش میزاری هرکی خرید انلاین با یوزر پسی که میسازه بتونه راحت از نرم افزار استفاده کنه
خب این که تمامیه جدول ها برای هر فرد اطلاعاتی که دارن ذخیره میکنن فقط برای اون نفر هست و نفر دیگه ای نباید دسترسی داشته باشه و خب پیاده سازیش و بقیه مواردش بحث برانگیزه
شما وقتی یه نرم افزار میزاری به سه تا شرکت مختلف میفروشیش یا هرچی
هر کدوم از اونا ممکنه بخوان پنج تا ده تا کاربر با سطح دسترسی های مختلف تعریف کنن
بعد برای اینکه همه داده هاشون یه جا هست از نظر جستوجو و سرعت عملکرد سیستم مشکلاتی که ممکنه پیش بیاد چی؟
تجربه ی انجام چنین پروژه ای رو داشتید که به صورت عمومی برای خرید و استفاده عموم قرار داده باشیدش؟
چه چالش هایی پیش رو هست؟
آیا اینکه توی تمامی روابط و جدول هامون یه ارتباط با کاربر خریدار ایجاد کنیم و بگیم این اطلاعات برای این کاربر هست
و توی تمامی فراخوانی ها هم بگیم اطلاعات همین کاربر رو برگردون کافیه؟
چیزی که به ذهنم میرسه همینه که همه ی جدول ها ارتباط با کاربر یا یه جورایی خریدار اصلی بگیرن حتی کاربر هایی که توسط اون کاربر اصلی ایجاد میشن
@mohaligateway
@mhyeganeh
@ali.bayat
@hesammousavi
@mehdi.shahabbasian
سلام
من یک سیستم اتوماسیون اداری نوشتم و دقیقا همین طوره که شما میگید و ازش نسخه های متفاوت ارائه میدیم
کاری که ما میکنیم برای هر خریدار یک دیتابیس جدا و سابدومین ایجاد میکنیم و در اختیارش قرار میدیم
چالش اینجاست که اگه همرو تو یک بانک داده نگهداری کنین، روزای اول، تا سال های اول شاید شما به مشکلی نخوری اما اگر زمانی بزرگ شد پروژه چی ؟
ممکنه پروژه و تعداد کاربراش به جایی برسه که نتونی رو یک سرور هندلش کنی و باید ببریشون رو سرور های مختلف اونوقت چی ؟
ممکنه یک مشتری 500 برابر بقیه مصرف داشته باشه، تکلیف این چی میشه ؟ باید مثل بقیه هزینه بده و اما 500 برابر بقیه منابع رو درگیر کنه ؟
اگر کارش رسید به جایی که باید یک سرور اختصاصی برای همون یک نسخه تهیه کرد، حالا چجوری جدا کنیمش ؟
اگر یکیشون اونقدر قوی بود یا دشمنی داشت یا هرچی که یک نفر که نباید به جداول دسترسی پیدا کرد، بقیه هم باید قربانی این مورد بشن ؟
و کلی اگر و داستانهای دیگه پیش روی شماست
پیشنهاد میکنم حتما دیتابیس های هر نسخه و حتی فایل های اونا رو جدا قرار بدید
منم چیزی که به ذهنم اومده اینه که برای هرکاربری که پول میده و یک اکانت میسازه، یک دیتابیس جدا براش create کنی
اگر دقت کنید نسخه دمو و نسخه اصلی یک سیستم حسابداری کاملا متفاوته بدلیل اینکه وقتی اکانت رو شارژ میکنی یا میای خرید میزنی چنددقیقه سایت منتظر میمونه تا دیتابیس جدید برای شما بسازه (تصور من اینه) تا اطلاعاتتون تداخل نداشته باشه و برنامه نویس درگیر این نباشه فلان ایدی بوده اطلاعات نمایش نده یا بده و برای سطح دسترسی ها، بک آپ گیری و غیره..
چنین سیستم های معمولا از سرورهای اختصاصی استفاده میکنند بحث هزینه رو نمیدونم چطور هندل میکنن.
سلام
من یک سیستم اتوماسیون اداری نوشتم و دقیقا همین طوره که شما میگید و ازش نسخه های متفاوت ارائه میدیم
کاری که ما میکنیم برای هر خریدار یک دیتابیس جدا و سابدومین ایجاد میکنیم و در اختیارش قرار میدیم
چالش اینجاست که اگه همرو تو یک بانک داده نگهداری کنین، روزای اول، تا سال های اول شاید شما به مشکلی نخوری اما اگر زمانی بزرگ شد پروژه چی ؟
ممکنه پروژه و تعداد کاربراش به جایی برسه که نتونی رو یک سرور هندلش کنی و باید ببریشون رو سرور های مختلف اونوقت چی ؟
ممکنه یک مشتری 500 برابر بقیه مصرف داشته باشه، تکلیف این چی میشه ؟ باید مثل بقیه هزینه بده و اما 500 برابر بقیه منابع رو درگیر کنه ؟
اگر کارش رسید به جایی که باید یک سرور اختصاصی برای همون یک نسخه تهیه کرد، حالا چجوری جدا کنیمش ؟
اگر یکیشون اونقدر قوی بود یا دشمنی داشت یا هرچی که یک نفر که نباید به جداول دسترسی پیدا کرد، بقیه هم باید قربانی این مورد بشن ؟
و کلی اگر و داستانهای دیگه پیش روی شماست
پیشنهاد میکنم حتما دیتابیس های هر نسخه و حتی فایل های اونا رو جدا قرار بدید
اون قسمتی که گفتم یک دیتابیس جدید میسازه خواستم اضاف کنم که کانکشن استرینگ رو یجوری تعریف میکنن که خودکار متناسب با ایجاد شدندش تویی دیتابیس اصلی سایت یا توی یک فایل کنار پروژه شون کپی میکنن و بعنوان ریفرنس اتصال با پایگاه داده شون استفاده میکنن
یک مثال از کانکشن استرینگ در نرم افزارهای دسکتاپ با سی شارپ (مثال من اینه که توی ریجستری متغییر کانکشن رو ذخیره میکنم)
چالش اینجاست که روزای اول، تا سال های اول شاید شما به مشکلی نخوری اگه همرو تو یک بانک داده نگهداری کنین اما اگر زمانی بزرگ شد پروژه چی ؟
متوجه نشدم خب مگه dbms که ما استفاده میکنیم mysql یا sql server نیست؟! اینا اگر قرار جوابگو ما در اطلاعات زیاد نباشه باید بریم سراغ دیتابیس های nosql
ممکنه پروژه و تعداد کاربراش به جایی برسه که نتونی رو یک سرور هندلش کنی و باید ببریشون رو سرور های مختلف اونوقت چی ؟
فکر کنم دیگه اونجاش باید با مشتری تماس بگیری براش توضیح بدین دیگه!
مثلا من یکسرویس دارم روزانه کلی api ازش میگیرم و پول ناچیزی میدم ، چندوقت پیش زنگ زد گفت منابع سیستم ما رو داری درگیر میکنی اگر کارتون خلی مبرمه باید سرویس اختصاصی تهیه کنی و فلان..
@juza66
ایده ی خوبیه برای جدا کردن داده های کاربرای مختلف من هم بهش فکر کردم
اما چالش ساخت دیتابیس برای هر نفر یکم پیچیده تر از حالت اول هست که هر جدول با کاربر اصلی خریدار ارتباط داشته باشه
چون در اون حالت توی فراخوانی و واکشیه داده به راحتی میتونی بگی داده ای که مربوط به این کاربر هست رو بده
ولی توی حالتی که اسامی جداول و دیتابیس متفاوت میشه من چطوذ بیام به سیستم خودم که حالا مثلا لاراول هست بگم برای این واکشی برو و از این پنج جدول یا دیتابیس استفاده کن
پیچیدگیه خیلی بیشتری داره ب نظرم
ممکنه یک مشتری ۵۰۰ برابر بقیه مصرف داشته باشه، تکلیف این چی میشه ؟ باید مثل بقیه هزینه بده و اما ۵۰۰ برابر بقیه منابع رو درگیر کنه ؟
فکر کنم باید اینجا حتما یک مانیتور روی منابع و کدوم دیتابیس یا کدام سرویس داره منابع زیادی مصرف میکنه داشته باشید، یا حداقل سیستمی بنویسین که منابع سیستم رو روی یک سرویس محدود کنید
اگر کارش رسید به جایی که باید یک سرور اختصاصی برای همون یک نسخه تهیه کرد، حالا چجوری جدا کنیمش ؟
با یک بک آپ دیگه 😅
@mehdi.shahabbasian
در رابطه با خرید هاست برای هر نفر به صورت جدا و ساخت دیتابیس برای اونها کاری هست که ب صورت معمول انجام میدیم و خب راحت هم هست
ولی بحث مکانیزه کردنش هست
فک کن یه برنامه ساده تری مثل چاپ چکو اینا داری ک توی اینترنت هم هست ازشون
پنجاه نفر میان خریداری کنن
آیا برای هر نفر یک دامنه و هاست تعبیه کنیم؟ بیاییم به هر کاربر بگیم برو دامنه بخر؟
اما چالش ساخت دیتابیس برای هر نفر یکم پیچیده تر از حالت اول هست که هر جدول با کاربر اصلی خریدار ارتباط داشته باشه
به نظر من خیلی پیچیده نیست و بسیار راه حل منطقی تری هست
ولی توی حالتی که اسامی جداول و دیتابیس متفاوت میشه من چطوذ بیام به سیستم خودم که حالا مثلا لاراول هست بگم برای این واکشی برو و از این پنج جدول یا دیتابیس استفاده کن
پروژه لاراولی شما باید یکبار برای کاربر دیگه ساخته بشه مثه سیستم لیارا
@salar.mohammad2013
والا این نظر من بود ، توی ایجاد و کار با چنین سیستمی باید از افرادی که تجربه ساخت دارن مشاوره بگیرید . چیزهای که به ذهنم میاد رو خدمتتون گفتم، جواب سایر اساتید هم باید شنید و دید. 😊
@juza66 اگر های من همه به هم زنجیره ای وصلن
و برای اینکه بتونیم به راحتی یک نسخه یک مشتری رو از بقیه جدا کنیم این پیشنهاد رو دادم و خودمون هم بر این پایه جلو میریم
اما از اینکه به راحتی میگید با یک بک آپ من خیلی استرسی میشم
یاد روزی می افتم که باید یک دیتابیس 900 مگی رو فقط انتقال ساده میدادم و چقدر خون به جیگر شدم تا بالاخره با موفقیت انجام شد
حالا فکر کن این وسط یک بانک اطلاعاتی بسیار حجیم داری که مجبور شدی انتقالش بدی یا از بقیه جداش کنی، و علاوه بر انتقال کلی کوئری هم جلوته
نه خدایی این یکیرو من نیستم 😄
برای بعضی همگارم سازی ها و ... هم یکم به API فکر کنید
منظورشون اینه اگر آپدیتی دادید چطور قراره برای همه جداول ایجاد یا اپدیت بشه
یا چطوری فرم های جدیدمون رو برای همه بروز کنیم 😅
یاد روزی می افتم که باید یک دیتابیس ۹۰۰ مگی رو فقط انتقال ساده میدادم و چقدر خون به جیگر شدم تا بالاخره با موفقیت انجام شد
توی mysql رو نمیدونم ولی توی Sql server بصورت بک آپ بخوای فایل رو دریافت کنی همون 900 مگ میشه نهایت 50 مگ! 😄
من که ترجیح میدم حتی شده دستی دونه دونه رو بروز کنم
اما اطلاعات همه کاربرارو نریزم رو هم تو یک جدول 😄
منم همین نظر دارم مهندس عباسیان
نظرم اینه که برای هر کاربر پولی یک دیتابیس و یک پروژه کپی بشه و اطلاعات و متغییرها تغییر کنه
برای اینکه درگیر این نباشی که کاربری که اکانت میسازه توی سایت درگیر دامنه و هاست نشه میشه براش میشه پورت های مختلف ساخت و ست کرد
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟