ردیس (Redis) بانک اطلاعاتی NoSQL مقیم در حافظه

by مجتبی بنائی - سه شنبه 23 مهر 1392 - گروه : تخصصی - مشاهده : 6
برچسب‌ها: #تخصصی‌نرم‌افزار #تجربیات #تخصصی #ردیس #کاساندرا

s: تجربیات | تخصصی | ردیس | کاساندرا دفعه اولی که با بانک اطلاعاتی ردیس به عنوان یکی از رایجترین بانکهای اطلاعاتی NoSQL در گروه بانکهای کلید/مقدار از سر کنجکاوی کار کردم ، برایم تجربه ای لذت بخش همراه با علامت سوالی بزرگ بود . لذت بخش از این باب که دیدم این دیتابیس دو دستور اصلی بیشتر ندارد یکی set  و یکی هم get . با دستور set یک شناسه (یک کلید یا مقدار منحصر بفرد) به همراه یک مقدار را ذخیره می کنیم و با دستور get و دادن کلید مورد نیاز، مقدار متناظر توسط ردیس به ما برگشت داده می شود. علامت سوالم هم بابت این بود که دیتابیسی با این قابلیت ساده (البته در نگاه اول) چه کاربردی می تواند داشته باشد . گذشت و گذشت تا برای یک سایت خبری دنبال راه حلی بودیم که درخواستهای ما را از کاساندرا کمتر کند و سریعتر بتوانیم به درخواستهای کاربران جواب بدهیم . ابتدا به ذهنم رسید که خاصیت حافظه نهان (cache) کاساندرا را فعال کنم که آنهم فقط روی کلید ها و سطرها فعال می شود اما متوجه شدم مشکل فقط درون حافظه نگهداشتن کلیدها یا بعضی سطرهای پردرخواست نیست بلکه نتیجه یک جست و جو در بانک اطلاعاتی باید در حافظه نهان ذخیره شود . توضیح بیشتر اینکه در این سایت اخبار بر اساس کشور ، زبان ، گروه و ساعت جستجو می شود و خود عمل جستجو با این پارامترها زمان بر است . حال اگر کاربران زیادی همزمان این درخواستها را داشته باشند ، فشار بسیار زیادی به کاساندرا (یا هربانک دیگری که ذخیره اخبار را برعهده دارد ) وارد می شود اما اگر بتوانیم نتیجه جستجو را در بازه زمانی مثلا پنج دقیقه در حافظه نگه داریم و تمام کاربرانی که از یک کشور و با یک زبان اخبار گروه خاصی را در آن بازه جستجو کنند نتیجه جستجوی قبلی به آنها برگشت داده شود، سرعت بسیار بالا خواهد رفت . اینجا بود که کاربرد اصلی ردیس را به عینه مشاهده کردم به این صورت که به ازای هر جستجو پارامترهای آن یعنی کشور، زبان ، ساعت و گروه را به هم می چسبانیم که کلید جستجو را شکل دهد و نتیجه جستجو ، مقدار این کلید می شود که در ردیس با زمان حذف پنج دقیقه ذخیره می شود . حال به ازای هر جستجو ، ابتدا بسته به پارامترهای آن کلید مربوطه را پیدا کرده و از ردیس مقدار مربوطه را بازیابی و به کاربر نمایش می دهیم . اگر مقداری برای آن کلید یافت نشد، آنگاه به دیتابیس اصلی وصل شده ، جستجو را انجام می دهیم ، نتیجه را در ردیس ذخیره کرده و به کاربر هم نشان می دهیم .... هر چند ردیس قابلیت ذخیره مقادیر در حافظه اصلی یا هارد سیستم را هم دارد اما برای ما همان ذخیره موقت اطلاعات در حافظه گره گشا بود ... به عنوان تتمه بحث اینکه علاوه بر ردیس ، بانک اطلاعاتی MemCached هم همین کار را انجام میدهد اما امکانات ردیس مانند پشتیبانی از لیست و ساختمان داده های دیگر ، باعث شد این دیتابیس را انتخاب کنیم ...

Comments