نمایش نتایج 1 تا 14 از 14

نام تاپیک: کوئری از بانک با هزاران رکورد

  1. #1
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    www.iranapp.org
    پست
    569

    کوئری از بانک با هزاران رکورد

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

  2. #2
    کاربر دائمی آواتار reza_alie
    تاریخ عضویت
    فروردین 1394
    محل زندگی
    <Tehran/>
    پست
    449

    نقل قول: کوئری از بانک با هزاران رکورد

    ببین دوست عزیز
    اگه ساختار دیتابیس رو درست یعنی به صورت علمی طراحی کنی فکر نمی کنم مشکلی پیش بیاد شما نباید به فکر الان باشی چون احتمال داره در سالهای آینده اگه سیستم رو بد طراحی کنی با مشکل مواجه بشی

  3. #3

    نقل قول: کوئری از بانک با هزاران رکورد

    شما سیستم رو همینطوری پیادش کن چند صد هزار که چیزیم نیست تعداد رکورد هات بالا که شد و محسوس شد بعدا یه متخصص دیتابیس میگیرید...

  4. #4
    محروم شده
    تاریخ عضویت
    خرداد 1394
    پست
    248

    نقل قول: کوئری از بانک با هزاران رکورد

    چند صد هزار، اصلاً عدد بزرگی نیست. با خیال راحت index کنید.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    تهران
    پست
    409

    نقل قول: کوئری از بانک با هزاران رکورد

    چند هزار تا اصلا چیزی برای mysql نیست خیالت راحت تا 100 هزار تا هم من تست کردم .
    اینو در نظر بگیر سایت پر ترافیک سرور خوبم میخاد

  6. #6
    کاربر دائمی آواتار -سیّد-
    تاریخ عضویت
    فروردین 1393
    محل زندگی
    تهران
    پست
    233

    نقل قول: کوئری از بانک با هزاران رکورد

    همونطور که دوستان گفتن این عددا برای MySql اصلاً عددی نیست. حتی صدها میلیون رکورد هم برای MySql چیزی نیست، که البته توی این مقیاس بستگی به خیلی چیزا داره. مثلاً اگه هاردتون SSD باشه خوب سرعت به مراتب بالاتر می‌ره (اگه هارد معمولی باشه هم خیلی خوب عمل می‌کنه، مگر توی ترافیک خیلی بالا). همچنین بستگی به Engine تون و نوع ستونی که روش index می‌ذارید داره (مثلاً int خیلی سبک‌تر از varchar هست). یا مثلاً مقدار RAM سیستم و تنظیمات cache توی MySql.

    فقط برای این که بدونید، بگم که ما بیش از دویست میلیون رکورد رو توی MySql تست گرفتیم و جواب عالی ازش گرفتیم. یعنی select کردن ۲-۳ تا رکورد به صورت random در حدود ۲۰-۳۰ میلی‌ثانیه جواب می‌داد.

    با توجه به این که خیلی پارامتر اینجا دخیل هست، برای این که مطمئن بشید جواب می‌گیرید یا نه، یا باید از یه متخصص پایگاه داده مشورت بگیرید (یعنی case خاص خودتون رو بهش بگید، و اگه لازمه طراحی رو بدید به اون)، یا می‌تونید تست کنید. چند صد هزار تا رکورد بسازید و در جدولتون بریزید، و بعد روش تست کنید.

  7. #7

    نقل قول: کوئری از بانک با هزاران رکورد

    با فریمورک لاراول کار کن
    با متد chunk میتونی فشار روی دیتابیس رو کاهش بدی
    User::chunk(200, function($users)
    {
    foreach ($users as $user)
    {
    //
    }
    });

    الان کد بالا هر دفعه 200 تا کوئری برمیگردونه

  8. #8
    محروم شده
    تاریخ عضویت
    خرداد 1394
    پست
    248

    نقل قول: کوئری از بانک با هزاران رکورد

    خود PHP هم متد array_chunk داره. ضمناً این کار فقط بار روی CPU و مصرف RAM رو کم میکنه و برعکس فشار روی دیتابس (و درنتیجه دیسک) رو زیاد میکنه چون مدام باید 200 تا 200 تا، با OFFSET و LIMIT کوئریهای جداگانه به دیتابیس بزنه.

  9. #9

    نقل قول: کوئری از بانک با هزاران رکورد

    نقل قول نوشته شده توسط fatima-php مشاهده تاپیک
    خود PHP هم متد array_chunk داره. ضمناً این کار فقط بار روی CPU و مصرف RAM رو کم میکنه و برعکس فشار روی دیتابس (و درنتیجه دیسک) رو زیاد میکنه چون مدام باید 200 تا 200 تا، با OFFSET و LIMIT کوئریهای جداگانه به دیتابیس بزنه.
    از ارسال یه درخواست سنگین به دیتابیس در لحظه جلوگیری میکنه و فشار کمتری میاد
    تصور کنید حالا 10000 کاربر یک جا یک کوئری یک میلیون رکوردی رو ارسال کنن!

  10. #10
    کاربر دائمی آواتار arta.nasiri
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    782

    نقل قول: کوئری از بانک با هزاران رکورد

    نقل قول نوشته شده توسط imohammad مشاهده تاپیک
    تصور کنید حالا 10000 کاربر یک جا یک کوئری یک میلیون رکوردی رو ارسال کنن!
    معمولا سایتهای بزرگی مثل فیسبوک یا امثال این سایت هم همچین کاری با سرورهای خودشون نمیکنن!! مگه اینکه تو شرایط خیلی خاص باشن.

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

  11. #11
    محروم شده
    تاریخ عضویت
    خرداد 1394
    پست
    248

    نقل قول: کوئری از بانک با هزاران رکورد

    نقل قول نوشته شده توسط imohammad مشاهده تاپیک
    از ارسال یه درخواست سنگین به دیتابیس در لحظه جلوگیری میکنه و فشار کمتری میاد
    تصور کنید حالا 10000 کاربر یک جا یک کوئری یک میلیون رکوردی رو ارسال کنن!
    کدوم سایتی رو دیدین که کاربرانش یکمرتبه یک میلیون رکورد رو بخوان fetch کنن و توی حافظه باهاش کار داشته باشن؟ اگه سایتی اینطوری طراحی شده باشه قطعاً مشکل در طراحی داره. با رعایت مسائلی مثل Pagination و... میشه براحتی این مسائل رو حل کرد. بهرحال فکر نمیکنم مشکل استارتر توی پردازش باشه و باتوجه به کند بودن نسبتاً زیاد هارد دیسک نسبت به RAM و CPU اگه بتونیم دسترسیهای مکرر به دیسک رو کمتر کنیم، باعث افزایش سرعت سایت میشیم. بنظرم بهتره درکنار مباحثی مثل ایندکس گذاری صحیح و... نیم نگاهی هم به ابزارهایی مثل Cache کردن نتایج کوئری و... داشته باشیم.

  12. #12
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    www.iranapp.org
    پست
    569

    نقل قول: کوئری از بانک با هزاران رکورد

    نتیجه ای که رسیدم دوستان این شد :
    استفاده از سرور پرقدرت با هارد ssd و رم و سی پی یو بالا
    طراحی بانک استاندارد
    استفاده از ایندکس در بانک
    استفاده از نوع فیلد مناسب (مثلا به جای استفاده از varchar در شماره تماس از char(11) استفاده بشه
    کوچیک کردن جدول

  13. #13
    کاربر دائمی آواتار -سیّد-
    تاریخ عضویت
    فروردین 1393
    محل زندگی
    تهران
    پست
    233

    نقل قول: کوئری از بانک با هزاران رکورد

    نقل قول نوشته شده توسط omid_student مشاهده تاپیک
    نتیجه ای که رسیدم دوستان این شد :
    استفاده از سرور پرقدرت با هارد ssd و رم و سی پی یو بالا
    طراحی بانک استاندارد
    استفاده از ایندکس در بانک
    استفاده از نوع فیلد مناسب (مثلا به جای استفاده از varchar در شماره تماس از char(11) استفاده بشه
    کوچیک کردن جدول
    البته همه‌ی اینا رو با هم ممکنه لازم نداشته باشید و باید تست کنید.
    من توصیه می‌کنم از اول نرید کلی هزینه کنید و سرور پر قدرت و هارد SSD بخرید. عوضش روی یه سرور معمولی با هارد معمولی تست کنید، اگه به نتیجه نرسیدید اون وقت هزینه کنید.
    تستتون هم باید تا حد ممکن به واقعیت نزدیک باشه. یعنی اون مقدار فشاری که پیش‌بینی می‌کنید روی سایتتون بیاد رو شبیه‌سازی کنید.

    معمولاً با یه سرور معمولی می‌شه یه سایت معمولی رو راه‌اندازی کرد. اگه بعداً رفته رفته کاربرای سیستم زیاد شد و فشار روش بالا رفت، اون وقت می‌تونید هارد رو عوض کنید، یا RAM و CPU سیستم رو زیاد کنید.

  14. #14
    محروم شده
    تاریخ عضویت
    خرداد 1394
    پست
    248

    نقل قول: کوئری از بانک با هزاران رکورد

    بهتره برای تست میزان لود سرور با کاربران زیاد همزمان و... از ابزارهای ab و siege و امثال اونها بهره بگیرین.

تاپیک های مشابه

  1. سرعت بانک با هزاران رکورد
    نوشته شده توسط omid_student در بخش PHP
    پاسخ: 1
    آخرین پست: جمعه 30 فروردین 1392, 18:40 عصر
  2. گفتگو: پیشنهاد برای پرکردن یک کمبوباکس از بانک با تعداد رکورد زیاد
    نوشته شده توسط saghari در بخش ASP.NET Web Forms
    پاسخ: 22
    آخرین پست: دوشنبه 09 اسفند 1389, 03:03 صبح
  3. سوال: مشکل در کوئری در بانک اکسس
    نوشته شده توسط Delphi7_love در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 9
    آخرین پست: سه شنبه 13 مهر 1389, 23:01 عصر
  4. سوال: ایجاد کوئری در بانک یا اینترفیس
    نوشته شده توسط mammad_asir در بخش Access
    پاسخ: 1
    آخرین پست: سه شنبه 17 آذر 1388, 15:08 عصر
  5. پاسخ: 3
    آخرین پست: چهارشنبه 09 خرداد 1386, 12:35 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •