PDA

View Full Version : سوال: آیا برای نوشتن در بانک اطلاعاتی لازم است چیزی را lock کنیم؟



irandg
سه شنبه 12 خرداد 1388, 18:18 عصر
با سلام.
من همیشه در برخورد با بانکهای اطلاعاتی یک ترس داشتم که اگر تعداد کاربران سیستم زیاد شود و تعداد کاربرانی که همزمان درخواست نوشت روی بانک اطلاعاتی را می دهند زیاد باشد، در این صورت چه خواهد شد. حلا میخواستم از دوستان آگاه بپرسم. اصولاً زمانی که میخواهیم داخل یک بانک اطلاعاتی چیزی بنویسیم یا تغییر دهیم، لازم است تا چیزی را lock کنیم تا از ایجاد مشکل در نوشتن همزمان داده روی یک جدول جلوگیری شود؟ (مثل کاری که هنگام تغییر متغییرهای application انجام میدهیم) یا نیازی نیست و این کار را خود بانک اطلاعاتی انجام میدهد؟
در ضمن میخواستم بدونم اصولا بانک اطلاعاتی Access تا چه حدی در تعدد کاربران پاسخگو هست؟

kashaneh
سه شنبه 12 خرداد 1388, 18:45 عصر
دوست عزیز معمولا تنها هنگامی که اطلاعات می خواهند در بانک ذخیره شوند (لحظه ثبت در بانک) آن رکورد یا رکوردهای مربوطه قفل شده و بعد از اینکه کار کاربر با بانک تمام شد، دسترسی به آن رکورد یا رکوردها برای سایر کاربران جهت ویرایش امکان پذیر می شود... به این نوع قفل گذاری اصطلاحا خوش بینانه یا optimistic گفته می شود و در اغلب موارد مناسبترین روش است...
در ضمن بانک اطلاعاتی اکسس در مورد سایتهای کوچک و متوسط به پایین مناسب می باشد وگرنه در حجم اتصال بالا، ضریب اطمینان آن در حد سایر بانک های اطلاعای نیست... موفق باشی

irandg
سه شنبه 12 خرداد 1388, 18:59 عصر
متشکر از پاسخ شما ولی نفرمودید که من در برنامه خود بایستی چیزی برای انجام این قفل گذاری خوش بینانه انجام دهم یا خیر؟
اگر پاسخ مثبت است، در ASP چه کار باید بکنم دقیقاً؟

kashaneh
سه شنبه 12 خرداد 1388, 19:12 عصر
دوست عزیز شما قبل از بازکردن اتصال به بانک اطلاعاتی، باید قابلیت locktype را تنظیم کنید...

به جدول زیر و توضیحات آن دقت کنید :

adLockUnspecified ---> معادل عدد 1- ---> Unspecified type of lock. Clones inherits lock type from the original Recordset.

adLockReadOnly ---> معادل عدد 1 ---> Read-only records.

adLockPessimistic ---> معادل عدد 2 ---> Pessimistic locking, record by record. The provider lock records immediately after editing

adLockOptimistic ---> معادل عدد 3 ---> Optimistic locking, record by record. The provider lock records only when calling update

adLockBatchOptimistic ---> معادل عدد 4 ---> Optimistic batch updates. Required for batch update mode

موفق باشی

irandg
یک شنبه 17 خرداد 1388, 14:27 عصر
متشکرم از پاسختان. ممکن است دقیقاً بفرمایید که با کد ASP چگونه این کار را انجام دهم؟ و اینکه به صورت پیش فرض locktype چه خواهد بود؟ آیا واقعاً لازم است برای مسئاله ای که من گفتم (یعنی استفاده چندین کاربر از یک بانک اطلاعاتی برای نوشتن و خواندن) نیاز هست؟

kashaneh
دوشنبه 18 خرداد 1388, 12:22 عصر
دوست عزیز LockType به صوزت پیش فرض از نوع فقط خواندنی adLockReadOnly یا معادل عددی 1 می باشد... در مورد اینکه برای اینکه همزمان چند نفر بخواهند فقط اطلاعات را بخوانند خب معلوم است که نیازی به تنظیم این مورد ندارید چون نوشتنی در کار نیست!
اما در مورد نحوه استفاده به مورد زیر به عنوان مثال توجه کنید :


strSQL = "SELECT tblWebsites.* FROM tblWebsites"
rsAddURL.LockType = 1 OR 2 OR 3 OR 4
rsAddURL.Open strSQL, adoCon

نکته 1 : بانک اطلاعاتی اکسس مقدار 4 را نمی تواند بپذیرد و این ویژگی منحصر به بانک های MS Sql و My Sql و Oracel و ... می باشد...
نکته 2 : سعی کنید از معادل های عددی به جای نوشتن نوع قفل گذاری استفاده کنید...

موفق باشی