مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

کدام مورد جهت ذخیره سازی اطلاعات در دیتابیس بهتر و بهینه تر هست؟

دوشنبه, 22 بهمن 1397 14:50

کدام مورد جهت ذخیره سازی اطلاعات در دیتابیس بهتر و بهینه تر هست؟

با عرض سلام و خسته نباشید خدمت همه دوستان عزیز
 
من برای سایتم تعداد خیلی زیادی جداول در دیتابیس دارم، که اکثر این جداول (شامل جدول کاربران، سفارشات، پیام‌ها، تیکت و ...) همشون چندین ستون دارند که وضعیت را ثبت میکنند جهت استفاده های بعدی؛ مقادیری که در این ستونها ذخیره میشه تنها یک کاراکتر هست یا بصورت عدد یا بصورت حروف، اما تنها یک کاراکتر دارد. بطور مثال به این شکل:
حالت اول بصورت عددی با نوع tinyInt با میزان 1 => ستون وضعیت: مقدار 0 = غیرفعال / مقدار 1 = فعال / مقدار 2 = در انتظار بررسی / مقدار 3 = در حال بررسی
حالت دوم بصورت مقداری با نوع varchar با میزان 1 => ستون وضعیت: مقدار n = غیرفعال / مقدار a = فعال / مقدار p = در انتظار بررسی / مقدار c = در حال بررسی
چون سیستم این موارد را دریافت و پردازش میکند و قرار نیست اطلاعات به کاربر نمایش داده شود، به همین دلیل فرقی نداره از نظر کاربردی که بصورت عددی باشد یا حروفی؛
 
سوال من این هست که کدام مورد برای ذخیره این قبیل اطلاعات بهتر و بهینه تر هست ؟
مقدار را بصورت عددی در دیتابیس ذخیره کنیم یا بصورت حروفی در فیلد varchar
کدام مورد در حجم بالا (حدوداً دو تا 10 میلیون رکورد در هر جدول) حجم دیتابیس را کمتر افزایش میدهد و استاندارد تر هست ؟

ﺳﻪ شنبه, 23 بهمن 1397 07:50

سلام

استراتژی های متفاوتی در رابطه با پاسخ سوال شما وجود دارد!

البته شما عنوان نکردی که از چه دیتابیسی استفاده می کنی ولی اگر از Sql Server یا Oracle  استفاده می کنی مقدار 2 تا 10 میلیون رکورد چیزی شبیه به بازی برا این دو تا دیتابیس است!. منظور از حجم بالا در این دو دیتابیس معمولا صحبت از حدود 10 میلیارد رکورد در هر join  می باشد.

ولی اگر برایت سرعت ایندکس شدن دیتاها مهم است از int  استفاده کن

کسانی که از این پست تشکر کرده اند : rewrew,
ﺳﻪ شنبه, 23 بهمن 1397 08:47

با سلام، ممنونم از پاسخ شما

بنده از sql استفاده میکنم بصورت php mysqli اطلاعات را دریافت میکنم، در رابطه با حجم بالا بله شما درست میفرمایید اما در حال حاضر من توی همین چند میلیون هم ماندم ...

در حال حاضر روش بهتر و استاندارد تر برای ذخیره اطلاعات برای من مهم بود و میخواستم بدونم بهترین روش کدام مورد هست برای ذخیره این چنین اطلاعاتی

چون به مرور حجم اطلاعات بالا میرود و حجم کلی دیتابیس خیلی زیاد میشود چون حدود 100 جدول در دیتابیس وجود دارد و تمام این موارد بصورت تقریبی حجمشون رو به افزایش هست و بصورت دائم اطلاعات جدید به اونها اضافه میشود به همین دلیل میخواستم بدونم از نظر حجم دیتابیس و سرعت پردازش در زمان جستجو یا ... کدام مورد بهتر هست

ﺳﻪ شنبه, 23 بهمن 1397 09:53

سلام مجدد

mySql  به هیچ وجه دیتابیس مناسبی برای ذخیره سازی داده های عظیم نیست.

از طرفی شما فرمودید که تعداد جداول پروژه تون زیاده! زیاد بودن جداول به شرط بهینه بودن، چیز بدی نیست مهم اینه که موقع Join  زدن، باید ببینید به چند تا جدول بطور همزمان نیاز دارید.

توصیه ی برادرانه دارم هر چه زودتر از mySql  به Sql Server  یا Oracle  مهاجرت فرمایید.

کسانی که از این پست تشکر کرده اند : rewrew,
ﺳﻪ شنبه, 23 بهمن 1397 15:31

ممنونم بابت راهنمایی های شما، تقریباً میشه گفت به ندرت پیش اومده که join نیاز بشه بر روی این دیتابیس

 

 :(

مگه mysql خوب نیست ؟

کلی وقت گذاشتم تا بتونم تا حد متوسط تسلط پیدا کنم و همه چیو بر اساس mysql نوشتم

چطور باید انتقال بدم؟ کدام مورد بهتر و آسان تر هست؟ آموزش هاش رو کجا میتونم پیدا کنم ؟

چهارشنبه, 24 بهمن 1397 09:28

سلام دوست عزیز.

مطمئنا سرعت Select  مقادیر عددی بیشتر از سرعت Select مقادیر رشته ای (varchar) می باشد. پس عدد انتخاب کردنتون بصرفه تره, همانطور که دوستمون آقای قاسمی هم اشاره کرده اند.

نکته دوم اینکه زیاد بودن تعداد جداول ملاک بر پایین آمدن سرعت دیتابیس نیست, چون در لحظه با همه جداول که ارتباط برقرار نمیکنیم و بسته به Select و Join و Union شما بستگی دارد که از چند جدول در یک کوئری استفاده بکنید.

در یکی از پاسخ هاتون به آقای قاسمی نوشته اید: "درحال حاضر من توی همین چند میلیون هم مانده ام ..." . چرا؟؟

مگر یک Select ساده چقدر زمان میخواد که شما عاجز موندید؟

چهارشنبه, 24 بهمن 1397 20:50

سلام جناب نصیری

متشکرم بابت توضیحات و راهنمایی هاتون

بله امروز شروع کردم به ویرایش از حالت varchar به tinyint و تغییر مقادیر و سورس

در رابطه با سرعت، منظورم join جداول نبود در هنگام  Select چون در کل میشه گفت اصلاً join استفاده نشده (به تعداد بسیار بسیار محدود اون هم فقط دو جدول با هم در موارد نادر انجام شده چون تا حدی میشه گفت جداول با هم بی ارتباط هستند و هر جدول کلیه اطلاعات بخش مربوطه را در خودش ذخیره میکنم) منظورم از سرعت بالا رفتن حجم کلی دیتابیس هست

من بی تجربه هستم و نمیدونم یک دیتابیس تا چه حجمی باشد منطقی هست و از چه حجمی بالاتر نامناسب هست

اما چون رکوردهای جداول رو به افزایش هست و مسلماً حجم روز به روز بیشتر میشود

الان یکی از جداول که 6 میلیون رکورد دارد هر دستور select که یک رکورد را دریافت کند نه اطلاعات کلی، حدوداً 1 ثانیه طول میکشد و این مقدار مهم نیست چون بسیار کم هست اما زمانیکه یک رکورد میخواهد update شود حدود 2 الی 3 ثانیه زمان میبرد و این مورد مشکل ساز شده؛ حالا اگر رکوردها چند برابر بشه مثلاً بشه 30 میلیون رکورد فکر کنم حدود 10 ثانیه طول بکشه

پنج شنبه, 25 بهمن 1397 08:44
ایندکس جداول رو بدرستی تنظیم کنید، و یکبار دستور Rebuild Index رو در sql اجرا کنید، مطمئنا در سرعت دیتابیس شما تاثیر خواهد گذاشت. موقع آپدیت هم در حد امکان، شرط شما بر اساس آیدی آیدنتیتی آن جدول باشد.

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید