PDA

View Full Version : رکوردهای جدید برای بقیه client ها قابل دیدن نیست



Alireza83
سه شنبه 19 آبان 1383, 23:05 عصر
با سلام من یک سرور sql دارم که حدود 10 client به آن وصل شده و کار می کنند
اما رکوردهای جدید و یا آنهایی که ویرایش می شوند برای بقیه قابل دیدن نیست مگر اینکه query را refresh کنم که به علت حجم زیاد اطلاعات (حدود 50000 رکورد) زمان زیادی می گیرد اگر کسی راه حلی بلده لطفا سریعتر کمک کنه که گیر افتادم.
با تشکر علیرضا

M.GhanaatPisheh
چهارشنبه 20 آبان 1383, 01:24 صبح
قاعدتا اگر data روی server ذخیره میشن clientها چیزی رو میبینن که روی سرور هست.
برای بدست آوردن رکوردهای جدید باید Query بگیری.
50000 رکورد اونقدر زیاد نیست که ْquery وقت زیادی بگیره(اگر Data Base Design منطقی باشه)
از Indexها برای Search سریع تر استفاده کن.

اگر database design و سناریو رو بدی بهتر میشه فکر کرد.

hmm
چهارشنبه 20 آبان 1383, 07:47 صبح
شما لازم نیست همه 50000 رکورد رو دوباره بیاری فقط تعداد رکوردی که فعلا کاربر میبینه رو بیار
و اگه از ado استفاده میکنی cursorlocation رو به server تغییر بده شاید بهتر شد

AminSobati
چهارشنبه 20 آبان 1383, 07:59 صبح
علیرضا جان،
قبل از هر چیزی از طرف خودم و همه دوستان بهتون خوش آمد میگم!
البته شاید تعداد رکورد زیادی نباشه اما اگر به هر حال Requery کردن رو همراه با اشکال میبینید:
این مشکل شما تنها یک راه حل داره. تمام 50000 رکورد رو یکباره Download نکنین، چون هم ترافیک قابل توجهی در شبکه ایجاد میکنه و هم اینکه حافظه Client رو یکباره پر میکنه چون باید Cache بشه. اگر این کار فقط یکبار قرار بود انجام بشه باز میشد این مشکلات رو اغماض کرد. اما چون نیاز دارید رکوردها در کلاینت با دیتابیس هماهنگ باشن، همونطور که گفتین نمیشه مرتب Requery کرد. پس باید تعداد رکوردهای محدودی رو که در اینترفیس قراره نمایش بدین Query کنین و برای User کلید Next و Previous بگذارین تا هر تعداد رکوردی که نیاز هست Download بشه. مثلا 200 رکورد در هر نمایش. به این روش نه شبکه بار ترافیک زیادی متحمل میشه و نه کلاینت حافظه زیادی از دست میده. از طرفی Requery کردنش معقول تره.


50000 رکورد اونقدر زیاد نیست که ْquery وقت زیادی بگیره(اگر Data Base Design منطقی باشه)
اگر این تعداد رکورد همگی از یک جدول Select میشن، کار راحت تره ولی اگر نتیجه Join دو یا چند table باشه، انجامش بار سنگینی رو سرور میاندازه. در کل به سخت افزار سرور هم کاملا بستگی داره...

JavanSoft
چهارشنبه 20 آبان 1383, 14:12 عصر
اگر این تعداد رکورد همگی از یک جدول Select میشن، کار راحت تره ولی اگر نتیجه Join دو یا چند table باشه، انجامش بار سنگینی رو سرور میاندازه. در کل به سخت افزار سرور هم کاملا بستگی داره...
کاملا درست است در این موارد بهتر است از View استفاده کنید

AminSobati
چهارشنبه 20 آبان 1383, 14:24 عصر
در این موارد بهتر است از View استفاده کنید

محمد جان البته View به تنهایی کمکی نمیکنه چون هر بار که ازش استفاده میکنید، Join باید انجام بشه. تنها در صورتی View موثر خواهد بود که Indexed View داشته باشیم و Result از قبل آماده شده باشه.

مهدی کرامتی
چهارشنبه 20 آبان 1383, 15:10 عصر
در MySQL دستوری بنام Limit داریم که در انتهای Select اضافه میکنیم و تعداد رکوردهای خروجی را محدود میکنیم.

آیا این معادلی در SQL Server دارد، و اگر ندارد چطور میتوان با راه حل دیگری این نتیجه را بدست آورد؟

AminSobati
چهارشنبه 20 آبان 1383, 16:07 عصر
SELECT TOP 10 ....
یا

SET ROWCOUNT 10

Alireza83
جمعه 22 آبان 1383, 09:49 صبح
من چون ار adoquery استفاده می کردم از متد requery آن استقاده کردم که سریعتر از Refresh است و حتی رکورد جاری را نیز تغییر نمی دهد و فقط رکوردهایی که اضافه شده اند را fetch می کند.
با تشکر از تمامی دوستانی که جوان دادند
علیرضا