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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: [ سؤال ] Redis چيست ؟  (دفعات بازدید: 8371 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
[ سؤال ] Redis چيست ؟
« : 16 شهریور 1392، 03:49 ب‌ظ »
سلام . ميخواستم بدونم كه Redis در كل چيه ؟ ويكى كردم اما نتونستم متوجه بشم . آيا يك ديتابيس مثل MySQL , MariaDB و MongoDB هستش ؟ چه مزيت هايى داره و چه نقطه ضعف هايى ؟

آفلاین جادی

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1610
    • در دفاع از آزادی بیان
پاسخ : [ سؤال ] Redis چيست ؟
« پاسخ #1 : 16 شهریور 1392، 04:53 ب‌ظ »
ردیس عملا چیز مستقلی است. یک جور ذخیره سازی موقت key, value. مثلا فرض کن من به ردیس می گم «تا بیست و چهار ساعت بعد یادت باشه که אוּרִיאֵל اجازه داره توی سایت لاگین کنه» و دیگه زمان و این نکته رو فراموش کنم و فقط بدونم که هر وقت بخوام می تونم از ردیس بپرسم «אוּרִיאֵל می تونه لاگین کنه؟» و جواب صحیح رو بگیرم. این «اطلاعات» خود به خود بعد از ساعت فلان منقضی می شه.
آزادی کیبورد حق هر انسان است - جادی

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
پاسخ : [ سؤال ] Redis چيست ؟
« پاسخ #2 : 16 شهریور 1392، 05:07 ب‌ظ »
ردیس عملا چیز مستقلی است. یک جور ذخیره سازی موقت key, value. مثلا فرض کن من به ردیس می گم «تا بیست و چهار ساعت بعد یادت باشه که אוּרִיאֵל اجازه داره توی سایت لاگین کنه» و دیگه زمان و این نکته رو فراموش کنم و فقط بدونم که هر وقت بخوام می تونم از ردیس بپرسم «אוּרִיאֵל می تونه لاگین کنه؟» و جواب صحیح رو بگیرم. این «اطلاعات» خود به خود بعد از ساعت فلان منقضی می شه.

پس يعنى تفاوت خيلى زيادى با چيزى مثل MySQL داره و نميشه ازش به عنوان ديتابيس استفاده كرد . درسته ؟
بهتره دقيقاً مشكلو توضيح بدم :
من ميخوام شروع كنم به ياد گيرى يه ديتابيس تا بتونم ازش تو پروژه هاى خودم استفاده كنم و خوب زبانه مورد استفادم Go هستش . واسم مهم نيست كه MySQL عمومى تره يا چيزى مثل اين بلكه ميخوام يه چيز كاربردى يادبگيرم نه يه چيز عمومى بين انواع ديتابيس ها هم به نظرم NoSQL => Graph DataBase ها كاربردى تر ، استفادشون ساده تر و قدرت بيشترى دارند البته با توجه به اين كه اطلاعات علمى دقيقى ندارم ممكنه اشتباه كنم در حال حاضر انتخاب هام محدود به اينا بوده :
Redis
MongoDB
Riak
FlockDB
كه نتونستم بسته اى واسه FlockDB براى Go پيدا كنم پس قاعدتاً بايد قيدشو بزنم و گرنه فكر كنم بهترين انتخاب بود .
اگر دوستان لطف كنند چيزاى بهتر هم معرفى كنند خيلى ممنون ميشم .

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : [ سؤال ] Redis چيست ؟
« پاسخ #3 : 27 شهریور 1392، 01:16 ب‌ظ »
خوب بذار مساله رو برات بازتر کنم.

دیتابیس (Database) مجموعه‌ای از داده هاست که با قاعده‌ی خاصی گرد هم قرار گرفتن.
چیزهایی مثل MySQL یا Postgres یک دیتابیس نیستن! اینها «نرم افزارهای مدیریت دیتابیس» هستن (DBMS) که اکثر اوقات برای
راحتی کار نویسنده و مخاطب اون ها رو دیتابیس هم خطاب میکنن. اما در اصل Database و DBMS دو مفهوم مستقل هستن.

امثال MySQL و Postgres به عنوان یک DBMS، دیتابیس های شما رو در دیسک ذخیره میکنن. البته نوع ذخیره سازی و یا جستجو در
دیتابیس میتونه از هر DBMS به DBMS بعدی متفاوت باشه. چند سال اخیر DBMS هایی تحت جنبش NoSQL فعال شدن که فرق اساسی اون
ها با امثال MySQL و Postgres در همین قواعد ذخیره سازی و جستجو هست، مثل MongoDB

اما هیچ قانونی وجود نداره که یک DBMS‌ حتما باید دیتابیس شما رو در دیسک ذخیره کنه. دیتابیس شما میتونه در RAM ذخیره بشه.
Redis یکی از این DBMS هاست که دیتابیس رو در رم ذخیره میکنه. البته Redis به طور کل یک DBMS‌ نیست، بلکه صرفا مهیا کننده
یک سرور برای کار با «ساختمان داده» های مستقل ار زبان هست. مهم ترین ساختمان داده در Redis جداول هش هستن که به صورت
key/value ذخیره میشن و بسیار کاربردی هستن. خوب ممکنه بپرسید که من هش ها رو در پایتون دارم (dict)، و در Go هم دارم (map)
پس چرا اصلا باید از همچین چیزی استفاده کنم؟

اینجاست که اون قسمت «مستقل از زبان بودن» وارد بازی میشه. به این حالت اگر شما در Redis یک جدول هش درست کنید، میتونید
از تمام زبان هایی که از Redis پشتیبانی میکنن به اون جدول هش دسترسی داشته باشید. شرکت های بزرگ چون قسمت های مختلف سیستم
هاشون در زبان های مختلف نوشته میشه، همچین چیزی براشون خیلی حیاتی هست. مثلا توی قسمتی از سیستم که با پایتون نوشته شده یک
جدول هش در Redis قرار میدید و در همون حین جای دیگه ای از سیستم که با جاوا نوشته شده میتونه از اون جدول هش استفاده کنه.

از طرفی چون تمام این داده ها در رم ذخیره میشن، سرعت بسیار بالایی به نسبت دیسک دارن و خوندن و نوشتن روی این داده ها با
تاخیر پایینی انجام میشه (گاها صد تا هزار برابر!). ناگفته نمونه همین دلیل (که همه چیز در رم هست) باعث میشه شما نتونید
داده های خودتون رو به صورت همیشگی ذخیره کنید چون رم داده ها به طور موقتی نگه داری میکنه. پس اگه فرضا قصدتون اینه که
اطلاعات یک شرکت رو ذخیره سازی کنید، Redis و امثال اون گزینه‌ی مناسیب نیستن.

یکی از مورد هایی که میتونه نمونه‌ی خوبی برای کاربرد چیزی مثل Redis باشه همونی هست که جادی مثال زد. ذخیره کوکی ها در سمت
سرور، ذخیره session ها، کنترل ورود و خروج کاربر،... از همه مهمتر اشتراک داده ها (توسط ساختمان های داده‌ي فراهم شده در Redis)
با دیگر قسمت های سیستم که هر کدوم ممکنه در زبان های مختلفی نوشته شده باشن.

کلا هر داده ایی که نیازی نیست به صورت دائم ذخیره بشه، بهتره با Redis‌ مدیریت بشه چون سرعت خواندن و نوشتن این داده ها بسیار
بالاتر میره. داده هایی هم که باید به صورت دائم ذخیره بشن، بهتره از امثال MySQL یا Postgres استفاده کنن.

چون شما میخواید از Go‌ استفاده کنید، Postgres ساپورت خیلی خوبی داره و یه گزینه‌ی عالی هست. و MongoDB رو حتی یکی از اعضای تیمشون
هم در جایی گفته بود که خودشون هم در 10gen میدونن که بهترین رابط برنامه نویسی MongoDB رو Go در اختیار داره (که از طرف کنونیکال توسعه داده میشه!)

در حال حاظر فکر میکنم Postgres یکی از قدرتمندترین و پایدارترین و سریعترین DBMS های موجود باشه که تقریبا رقابت باهاش برای
بقیه خیلی دشوار هست! مخصوصا در نسخه‌های جدیدش که قابلیت های DBMS های NoSQL رو هم اضافه کرده و تو این زمینه هم شاید از MongoDB
چیزی کم نداشته باشه. حتی شاید بتونیم بگیم که یکی از بهترین DBMS‌ های NoSQL هست!

اگر احیانا در جایی میشنوید که NoSQL ها سریع تر از DBMS های کلاسیک هستند، اول از همه باید بدونید که در موقعیت های مختلف عنصر
سرعت بسیار متغیر هست. و دوم هم اینکه از خودتون سوال کنید که چرا سرعتشون ممکنه بالاتر باشه؟ آیا از تکنیک خاصی استفاده کردن؟ آیا
ممکنه که قابلیت هایی رو فدای سرعت کرده باشن؟ آیا من میتونم همون تکنیک ها رو در DBMS‌های کلاسیک داشته باشم؟ بعد از مدتی تحقیق
به این نتیجه خواهید رسید که NoSQL‌ ها شاید دقیقا اون چیزی نباشن که تبلیغ میکنن! ;) این بحث البته خارج از حوصله این مطلب، و خود
من هست D:
« آخرین ویرایش: 27 شهریور 1392، 01:37 ب‌ظ توسط AmirrezaGhaderi »

آفلاین אוּרִיאֵל

  • High Sr. Member
  • *
  • ارسال: 641
  • جنسیت : پسر
  • bin/Matin/ !#
    • bin/Matin/ !#
پاسخ : [ سؤال ] Redis چيست ؟
« پاسخ #4 : 27 شهریور 1392، 02:05 ب‌ظ »
خوب بذار مساله رو برات بازتر کنم.

دیتابیس (Database) مجموعه‌ای از داده هاست که با قاعده‌ی خاصی گرد هم قرار گرفتن.
چیزهایی مثل MySQL یا Postgres یک دیتابیس نیستن! اینها «نرم افزارهای مدیریت دیتابیس» هستن (DBMS) که اکثر اوقات برای
راحتی کار نویسنده و مخاطب اون ها رو دیتابیس هم خطاب میکنن. اما در اصل Database و DBMS دو مفهوم مستقل هستن.

امثال MySQL و Postgres به عنوان یک DBMS، دیتابیس های شما رو در دیسک ذخیره میکنن. البته نوع ذخیره سازی و یا جستجو در
دیتابیس میتونه از هر DBMS به DBMS بعدی متفاوت باشه. چند سال اخیر DBMS هایی تحت جنبش NoSQL فعال شدن که فرق اساسی اون
ها با امثال MySQL و Postgres در همین قواعد ذخیره سازی و جستجو هست، مثل MongoDB

اما هیچ قانونی وجود نداره که یک DBMS‌ حتما باید دیتابیس شما رو در دیسک ذخیره کنه. دیتابیس شما میتونه در RAM ذخیره بشه.
Redis یکی از این DBMS هاست که دیتابیس رو در رم ذخیره میکنه. البته Redis به طور کل یک DBMS‌ نیست، بلکه صرفا مهیا کننده
یک سرور برای کار با «ساختمان داده» های مستقل ار زبان هست. مهم ترین ساختمان داده در Redis جداول هش هستن که به صورت
key/value ذخیره میشن و بسیار کاربردی هستن. خوب ممکنه بپرسید که من هش ها رو در پایتون دارم (dict)، و در Go هم دارم (map)
پس چرا اصلا باید از همچین چیزی استفاده کنم؟

اینجاست که اون قسمت «مستقل از زبان بودن» وارد بازی میشه. به این حالت اگر شما در Redis یک جدول هش درست کنید، میتونید
از تمام زبان هایی که از Redis پشتیبانی میکنن به اون جدول هش دسترسی داشته باشید. شرکت های بزرگ چون قسمت های مختلف سیستم
هاشون در زبان های مختلف نوشته میشه، همچین چیزی براشون خیلی حیاتی هست. مثلا توی قسمتی از سیستم که با پایتون نوشته شده یک
جدول هش در Redis قرار میدید و در همون حین جای دیگه ای از سیستم که با جاوا نوشته شده میتونه از اون جدول هش استفاده کنه.

از طرفی چون تمام این داده ها در رم ذخیره میشن، سرعت بسیار بالایی به نسبت دیسک دارن و خوندن و نوشتن روی این داده ها با
تاخیر پایینی انجام میشه (گاها صد تا هزار برابر!). ناگفته نمونه همین دلیل (که همه چیز در رم هست) باعث میشه شما نتونید
داده های خودتون رو به صورت همیشگی ذخیره کنید چون رم داده ها به طور موقتی نگه داری میکنه. پس اگه فرضا قصدتون اینه که
اطلاعات یک شرکت رو ذخیره سازی کنید، Redis و امثال اون گزینه‌ی مناسیب نیستن.

یکی از مورد هایی که میتونه نمونه‌ی خوبی برای کاربرد چیزی مثل Redis باشه همونی هست که جادی مثال زد. ذخیره کوکی ها در سمت
سرور، ذخیره session ها، کنترل ورود و خروج کاربر،... از همه مهمتر اشتراک داده ها (توسط ساختمان های داده‌ي فراهم شده در Redis)
با دیگر قسمت های سیستم که هر کدوم ممکنه در زبان های مختلفی نوشته شده باشن.

کلا هر داده ایی که نیازی نیست به صورت دائم ذخیره بشه، بهتره با Redis‌ مدیریت بشه چون سرعت خواندن و نوشتن این داده ها بسیار
بالاتر میره. داده هایی هم که باید به صورت دائم ذخیره بشن، بهتره از امثال MySQL یا Postgres استفاده کنن.

چون شما میخواید از Go‌ استفاده کنید، Postgres ساپورت خیلی خوبی داره و یه گزینه‌ی عالی هست. و MongoDB رو حتی یکی از اعضای تیمشون
هم در جایی گفته بود که خودشون هم در 10gen میدونن که بهترین رابط برنامه نویسی MongoDB رو Go در اختیار داره (که از طرف کنونیکال توسعه داده میشه!)

در حال حاظر فکر میکنم Postgres یکی از قدرتمندترین و پایدارترین و سریعترین DBMS های موجود باشه که تقریبا رقابت باهاش برای
بقیه خیلی دشوار هست! مخصوصا در نسخه‌های جدیدش که قابلیت های DBMS های NoSQL رو هم اضافه کرده و تو این زمینه هم شاید از MongoDB
چیزی کم نداشته باشه. حتی شاید بتونیم بگیم که یکی از بهترین DBMS‌ های NoSQL هست!

اگر احیانا در جایی میشنوید که NoSQL ها سریع تر از DBMS های کلاسیک هستند، اول از همه باید بدونید که در موقعیت های مختلف عنصر
سرعت بسیار متغیر هست. و دوم هم اینکه از خودتون سوال کنید که چرا سرعتشون ممکنه بالاتر باشه؟ آیا از تکنیک خاصی استفاده کردن؟ آیا
ممکنه که قابلیت هایی رو فدای سرعت کرده باشن؟ آیا من میتونم همون تکنیک ها رو در DBMS‌های کلاسیک داشته باشم؟ بعد از مدتی تحقیق
به این نتیجه خواهید رسید که NoSQL‌ ها شاید دقیقا اون چیزی نباشن که تبلیغ میکنن! ;) این بحث البته خارج از حوصله این مطلب، و خود
من هست D:

واقعاً ممنونم كه اين همه وقت گذاشتيد و بنده رو از گمراهى در اورديد :دى
راستش من هيچ گونه شناختى از هيچ كدوم از اينا ندارم و ميخوام چيزى رو ياد بگيرم كه بعداً از كار كردن باهاش لذت ببرم نه اين كه باش پول در بيارم و نه اين كه معروف باشه و … و تنها چيزى كه نيازم هست ذخيره كردن يه سرى اطلاعات يه سرى روابط و بعداً استفاده كردن ازشون هست در حال حاضر اما ميخوام چيزى رو ياد بگيرم واسه اينا كه بعداً كه نياز هاى مختلف ديگه اى پيدا كردم نياز به ياد گيرى چيز جديدى نداشته باشم Go كه شما بهم معرفى كرديدش و نياز هاى من رو كاملاً پاسخ گو هست و واقعاً دارم ازش لذت ميبرم چون من نميخوام كه تبديل بشم به يه آچار فرانسه بلكه ميخوام تمركزم رو رروى اون چيزى كه بهش علاقه دارم بزارم .
و خوب براى انتخاب ديتابيس يا مديريت ديتابيس و … با توجّه به اين كه اطلاعات خيلى خيلى كمى دارم به صورت كاملاً غير منطقى تصميم گيرى كردم ( البته تصميم گيرى نهايى هنوز نه ) به اين صورت كه بر اساس خصوصيات ذكر شده از اون ها توى ويكى بود و اين كه از اون خصوصيات خوشم مياد يا نه :دى چون اطلاعاتم رو بازم ميگم خيلى كمه براى مثال چون postgresql يك ordbms هست ازش دورى كردم ( كلاً با هر چيزى كه Object توش باشه مشكل دارم بخاطر برداشت مطمئناً غلط خودم از حرف هاى شما سعى ميكنم از هر شىء و شىء گرايى دورى كنم . ) از يه طرف هم mongodb در زبان C++ نوشته شده ولى postgresql در زبان C كه چون C++ قابليت شىء گرايى داره ازش دورى ميكنم و براى خودم هم دو تا خصوصيت خوب در نظر گرفتم Graph DataBase و بالطبع NoSQL بودن كه باعث شد دو تا انتخاب ديگه هم داشته باشم يكى Redis و ديگرى Riak كه تا اينجا بخاطر راهنمايى هاى مفيد شما تصميم بر اين شد در صورت نياز موقت به داده ها حتماً از Redis استفاده كنم اما ميمونه Riak در مقايسه با MogoDB و PostgreSQL آيا شما در مورد Riak اطلاعى داريد و اين كه پشتيبانى Go از Riak به چه صورت است ؟ و يك سؤال ديگه اونم اين كه آيا هر چهار تاى اين ها Graph DB رو پشتيبانى ميكنند يا بنده اشتباه ميكنم ؟

آفلاین AmirrezaGhaderi

  • Jr. Member
  • *
  • ارسال: 90
  • جنسیت : پسر
    • حساب تویتر من
پاسخ : [ سؤال ] Redis چيست ؟
« پاسخ #5 : 27 شهریور 1392، 02:39 ب‌ظ »
ای دوست، ای دوست... منو یاد خودم میندازی در قدیم ها :) دوست من، با توجه به چیزهایی که میگی، و نحوه‌ی گفتنشون،
راه درازی برای طی کردن داری... کاری از دست من بر نمیاد چون این جاده ایی هست که خودت باید تنها ازش گذر کنی :)
با وقت، مطالعه، و پشتکار، خودت به جواب تمام سوال هایی که داری میرسی... فعلا به نظرم فکرت خیلی آشفته هست و روی
چیزهای زیادی در یک زمان داری وقت میذاری. ذهنت رو بخش بندی کن و در هر زمان فقط روی یه بخشش وقت بذار.

آفلاین ngc0der

  • Full Member
  • *
  • ارسال: 106
پاسخ : [ سؤال ] Redis چيست ؟
« پاسخ #6 : 28 شهریور 1392، 10:53 ب‌ظ »
برای هر کاری باید ابزار مناسب رو استفاده کرد مثلا بعید میدونم هیچ بانکی تراکنشهاش رو روی دیتابیسهای nosql ذخیره کنه و معمولا از اوراکل و DB2 استفاده می کنن و بعد از اون از mysql و postgresql اگه نخوان پول لایسنس بدن.همه این دیتابیسها مفهومی رو ساپورت می کنن که به ACID معروفه http://en.wikipedia.org/wiki/ACID که به طور ساده میشه گفت یعنی اطمینان از انجام درست transactionها مثلا اگه برق یکدفعه قطع بشه میشه پیش بینی کرد که دیتابیس یا عملیات رو انجام داده یا نداده و حد وسط وجود نداره.ورژنهای قبلی mongodb مشکلاتی در این زمینه داشت که فکر می کنم الان تا حد زیادی حل شده یا حداقل با اعمال یک سری تنظیمات و قربانی کردن سرعت میشه قابلیت اطمینانش رو افزایش داد.مورد بعدی امنیت هست که معمولا در rdbms ها بیشتره.nosql ها بیشتر در جایی کاربرد دارن که حجم زیادی اطلاعات معمولا متنی باید ایندکس بشن و در زمان کوتاهی در دسترس باشن مثلا امکان استفاده از هیچ نوع rdbmsی برای کاری که گوگل داره انجام میده وجود نداره(ایندکس حجم زیادی از صفحات وب و پردازش سریع جستجوها) و به همین دلیل چیزی رو به اسم bigtable توسعه داده که برای این منظور استفاده می کنه که بیشتر به nosqlها شباهت داره.