احسان رضایی

یک توسعه دهنده

اصطلاحات پایه در elasticsearch

در big data , پایگاه داده , / تاریخ ارسال 19-09-1395 / 1 نظر / آخرین ویرایش 15-10-1402
مهم!
از تاریخ انتشار این مطلب زمان زیادی میگذره و میدونیم در حرفه ما سرعت پیشرفت و توسعه چقدر زیاده. من این مطلب قدیمی رو پاک نکردم چون ممکنه همچنان برای شما مفید باشه اما به خاطر داشته باشید در حال حاضر شاید نسخه های جدید و تغییرات این نوشته رو از دور خارج کرده باشن.

تعدادی اصطلاح در elasticsearch وجود دارد که دانستن آنها در ابتدا به فرایند یادگیری بسیار کمک میکند.

 Near Realtime (NRT)

 elasticsearch یک بستر جستجوی نزدیک به زمان واقعی است، به این معنی که از زمان شاخص گذاری یک سند تا قابلیت جستجو در آن تاخیر کمی وجود دارد(معمولا یک ثانیه).

cluster

یک cluster مجموعه ای از یک یا چند node است(server) که با هم تمام اطلاعات را نگه داشته و شاخص گذاری و قابلیت جستجو را در بین تمام node فراهم میکنند.

node

یک node یک server تکی و قسمتی از cluster میباشد. که در ذخیره سازی داده های خود و شاخص گذای و فراهم کردن قابلیت جستجو شرکت میکند.

index

یک index مجموعه ای از document است که تا حدودی دارای ویژگی های مشابهی هستند، به عنوان مثال شما میتوانید یک index برای اطلاعات مشتریان، یک index از فهرست محصولات و یک index از اطلاعات سفارشات داشته باشید.

index به وسیله ی نام خود شناخته میشود، که باید حروف لاتین کوچک باشد. این نام در زمان شاخص گذاری، جستجو، ویرایش و حذف مورد استفاده قرار میگیرد.

در یک cluster تکی شما میتوانید هر چقدر index نیاز دارید تعریف کنید. 

types

داخل index شما میتوانید یک یا چند type تعریف کنید. میتوان گفت type ها دسته بندی های ما داخل index ها هستند. به عنوان مثال فرض کنید در حال راه اندازی یک بستر وبلاگ نویسی هستیم و تمام اطلاعات خود را در یک index با عنوان blogging ذخیره میکنیم. در این index میتوانیم یک type برای اطلاعات کاربر، یک type برای مطالب و یک type هم برای نظرات داشته باشیم.

document

یک document واحد اصلی اطلاعات است که میتواند شاخص گذاری شود. شما میتوانید یک document برای یک مشتری داشته باشید و همچنین یک document برای یک محصول و یک document هم برای یک سفارش. document ها در قالب json قابل استفاده هستند.

Shards & Replicas

در یک index میتوان اطلاعات زیادی را ذخیره کرد که این اندازه بیشتر از محدودیت node باشد. به عنوان مثال یک index شامل یک بیلیون document که بیشتر از 1TB فضای ذخیره سازی نیاز دارد. ممکن است یک node چنین فضایی نداشته یا ذخیره سازی این اطلاعات در یک node باعث شود تا به تنهایی نتواند به حجم درخواست های جستجو پاسخ دهد.

برای حل این مساله elasticsearch قابلیت طبقه بندی کردن index را به قطعات متعددی با عنوان shards فراهم میکند. shard کاملا مستقل است و میتواند در هر node داخل cluster قرار گیرد.

shards به دو دلیل مهم است

 1) اجازه میدهد تا حجم محتوای خود را تقسیم کنید.

 2) اجازه توزیع شدن و انجام عملیات به صورت موازی بین shard ها فراهم میشود.

در یک محیط شبکه شکست یا خطا میتواند در هر لحظه اتفاق بیوفتد و بسیار مفید و توصیه شده است که یک مکانیزم عدم موفقیت برای مدیریت مواقعی که به هر دلیلی shard/node از بین رفت داشته باشیم. به این منظور elasticsearch اجازه میدهد یک یا چند کپی از index’s shards بسازید که به آن replicas گفته میشود.

 replicas به دو دلیل مهم است

 1) پایداری بالا در هنگام بروز خطا در یک shard/node فراهم میشود. به این دلیل باید بدانید که یک replica به همان node که نسخه اصلی shard داخلش قرار دارد اختصاص داده نمیشود.

 2) افزایش توان عملیاتی جستجو چون میتواند روی replica جستجو خود را انجام دهد.

پیشنهاد

کتاب‌ها

کتاب الگوهای طراحی به بیان ساده(design patterns / دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

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

کتاب refactoring / ریفکتورینگ

Refactoring مجموعه‌ای از تکنیک‌هاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام می‌شود.

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.

ارسال نظر

میثم در تاریخ 1397/06/24 - 22:23 نوشته
سلام آقای رضایی ممنون بابت مطالب مفیدتون
پاسخ احسان:

خواهش میکنم میثم جان. موفق باشی.