-
April 27th, 2011, 22:00
#11
عضو دائم
پاسخ : یک دیتابیس بزرگ یا چندین دیتابیس کوچکتر
ضعف در در سخت افزار سرور رو نبايد عاملي براي ضعف در طراحي قرار بديد.
شديدا تاكيد ميكنم ايجاد 5 جدول براي هر كاربر يا يك ديتابيس براي هر كاربر يك ضعف شديد و در سطح بالا جبران نشدني براي پروژه شما به حساب مياد.
mysql در بزرگترين سايت هاي جهان با حجم وسيعي از اطلاعات داره كار ميكنه و مشكلي پيش نمياد.
اينكه شما سرعت مناسبي نگرفتيد رو بايد دنبال علتش باشيد و ضعفش رو پيدا كنيد نه اينكه با يك روش غير منطقي سعي در پوشوندش داشته باشيد.
در سطح بالا براي انتخاب و ساير دستورات بايد نهايت دقت رو به كار برد ، به عنوان مثال اگر در دو جدول با 5 ميليون ركورد اول join كنيم بعد شرط بذاريم (يا ...) و حالت برعكس ممكنه تفاوت مقايسه در حد ميليون ركورد باشه.
شما اطلاعاتي در مورد كارتون نداديد و مطمئن باشيد بيش از اين با اين اطلاعات نميشه راهنمايي كرد.
چه جور رابطه هايي داريم ؟ چرا ميگيد امنيت اين روش پايين تره ؟ اگر خود پروژه رو نمي تونيد توضيح بديد با يك مثال و شبيه سازي قضيه رو روشن كنيد.
-
تعداد تشکر ها ازRezash به دلیل پست مفید
-
April 27th, 2011 22:00
# ADS
-
April 28th, 2011, 10:28
#12
پاسخ : یک دیتابیس بزرگ یا چندین دیتابیس کوچکتر
سلام به همه دوستان
و ممنون از پیگیریتون و شرمنده از اینکه ناقص توضیح می دم
فرض کنید یه سازمان مثل استان قدس با طرف های مالی خودش که اشخاص حقیقی و حقوقی هستند در یک سیستم تبادل داده های مالی دارند
1 - هر شرکت و یا هر فرد به طور جداگانه دارای یک سیستم حسابداری کامل میباشد ( بدون در نظر گرفتن رابطه مالی با سازمان)
حالا کنار این شما فرض کنید از تعریف حسابهای داخلی ، حسابهای مشترک ، حسابهای شخصی و ... تا سیستم مکاتبات و پیگیری چک و ... ( این داستان ادامه دارد
)
ما یک گروه 5 نفره طراح هستیم که حدود 3 ماه داریم این سیستم رو پیاده سازی می کنیم
ولی حالا بعد از اتمام کار به سیستم دیتابیس مون شک کردیم به سفارش یکی از دوستان که مسئول راه اندازی سرور مونه که توی این فروم هم دست به کیبورد داره این مسئله رو اینجا مطرح کردم !
2 تا سرور راه انداری کردیم سرور اول سرور محاسبات و سایت و سرور دوم دیتاسنتر که فقط mysql نصبه !
و هردو از نظر سخت افزاری سنگین بسته شدن
این مسئله که تمام داده های این افراد داخل 5 جدول باشه بنا به الگریتم کاری و سفارشات بخش آی تی سازمان مردوده ! میمونه دوحالت یک دیتابیس با بیش از 5000 جدول و یا 1000 دیتابیس هر کدوم با 5 جدول
دوستان اگر مرجعی درباره هسته mysql و نحوه الگریتم کاری اون دارند بزارن میشه بررسی کرد
اگه سیستم کاری و موتور داخلی mysql به صورت شاخه ای باشه حالت 1000 دیتابیس بهتر به نظر میاد
یعنی اول دیتابیس پیداکنه ، بعد جدول رو بعد رکورد مورد نظر ! حالا به چه نوع پیمایشی جلو میره داخل هر کدوم مهم نیست
دوستان کمک کنند ممنون میشم !
-
-
April 28th, 2011, 12:41
#13
عضو دائم
پاسخ : یک دیتابیس بزرگ یا چندین دیتابیس کوچکتر
ببينيد اگر واقعا فكر ميكنم mysql توان كشش حجم اطلاعاتي شما رو نداره در اين صورت ميتونيد دسته بندي كنيد.
دسته بندي نبايد به ازاي هر يوزر و يا چند يوزر باشه.يك رابطه ي منطقي ايجاد كنيد.
اگر به سبكي كه ميگيد در ابتدا بايد با يك ديتابيس ارتباط برقرار كنيم ، ببينيم اين يوزر در كدام db يا جدول هست ، اطلاعات اون db رو بگيريم ، متصل بشيم و ...
ولي شما ميتونيد ديتابيس ها رو بر اساس سال ورود،حروف نام خانوادگي ! شماره ملي يا ... و ... با يك نسبت بندي درست انتخاب كنيم.
به عنوان يك مثال خيلي ساده اگر اول حرف اسم شخص a بود به ديتابيس a_db سريعا مراجعه كنيد.
البته من هنوزم اين روش رو درست نميدونم ولي شما چون خودتون بيشتر در جريان پروژه هستيد شايد بهتر ميدونيد.
ولي در اصل طراحي بايد جداول منحصر به فرد باشند و رابطه ها رو با كليد اصلي و فرعي و ايندكس گذاري مناسب ايجاد كنيم و با اين تكنيك ها سرعت جستجو و عمليات رو افزايش بديم.
در مورد اصول طراحي db در دانشگاهها معمولا كتاب آقاي رانكوهي تدريس ميشه.
-
تعداد تشکر ها ازRezash به دلیل پست مفید
-
April 28th, 2011, 13:17
#14
پاسخ : یک دیتابیس بزرگ یا چندین دیتابیس کوچکتر

نوشته اصلی توسط
Rezash
ببينيد اگر واقعا فكر ميكنم mysql توان كشش حجم اطلاعاتي شما رو نداره در اين صورت ميتونيد دسته بندي كنيد.
دسته بندي نبايد به ازاي هر يوزر و يا چند يوزر باشه.يك رابطه ي منطقي ايجاد كنيد.
اگر به سبكي كه ميگيد در ابتدا بايد با يك ديتابيس ارتباط برقرار كنيم ، ببينيم اين يوزر در كدام db يا جدول هست ، اطلاعات اون db رو بگيريم ، متصل بشيم و ...
ولي شما ميتونيد ديتابيس ها رو بر اساس سال ورود،حروف نام خانوادگي ! شماره ملي يا ... و ... با يك نسبت بندي درست انتخاب كنيم.
به عنوان يك مثال خيلي ساده اگر اول حرف اسم شخص a بود به ديتابيس a_db سريعا مراجعه كنيد.
البته من هنوزم اين روش رو درست نميدونم ولي شما چون خودتون بيشتر در جريان پروژه هستيد شايد بهتر ميدونيد.
ولي در اصل طراحي بايد جداول منحصر به فرد باشند و رابطه ها رو با كليد اصلي و فرعي و ايندكس گذاري مناسب ايجاد كنيم و با اين تكنيك ها سرعت جستجو و عمليات رو افزايش بديم.
در مورد اصول طراحي db در دانشگاهها معمولا كتاب آقاي رانكوهي تدريس ميشه.
ممنون
اصرار شما بر اینه که تعداد دیتابیس ها کم بشه به هر شکلی که ممکنه
دسته بندی یوزر ها باساس اولویتها
دسته بندی گزینشی ( انتخاب دستی)
ولی چرا ! این برداشت من درسته :
هر چی تعداد دیتابیس بیشتر باشه سرعت کمتره !
چرا ؟؟
شاید کمی بی ممنطق به نظر برسد که اگر من با درخواست یا کوئری دستور جستجوی در دیتابیس m1258 رو بدم برای مثال با حجم 100000 رکورد
و mysql پارامترهای سایر دیتابیس ها مثل k546 , ... رو هم درنظر بگیره ( بازم برمیگرده به الگریتم داخلی)
البته امکان داره که با کش کردن یک بانک در یک جستجو ، زمانی که تعداد دیتابیس ها بیشتر باشه سیستم با افت سرعت مواجه بشه
اگر بشه جزئیات رو بدست اورد بهتر میشه تصمیم گرفت
-
-
April 30th, 2011, 10:12
#15
پاسخ : یک دیتابیس بزرگ یا چندین دیتابیس کوچکتر
سلام
تاجایی که من اطلاعات پیدا کردم ، سیستم mysql مبنای جستجوی درختی هست
با توافقی که با دوستان دخیل در پروژه ، شد مبنای طراحی رو بر مبنای 1000 دیتابیس قرار دادیم البته با این کنترل که نزاریم تعداد لینک ها به دیتابیس ها از یک تعداد مشخص بیشتر بشه
انشاا.. به مشکلی بر نمی خوریم وگر نه میشیم درس عبرتی برای سایرین !!!
باتشکر از همه دوستان
-