NRT در Elasticsearch چیست؟

الاستیک سرچ (Elasticsearch) یک موتور جستجو است. این پلتفرم با خصوصیت NRT یا Near Real time شناخته می‌شود. اصطلاح Near Real time نیز به خاطر فاصله زمانی اندک بین Document کردن یک Index و اینکه بتوان آن را جستجو کرد به این پلتفرم داده شده است.

 

elasticsearch

Cluster در Elasticsearch به چه معناست؟

مفهوم Cluster شامل مجموعه‌ای از Node ها یا سرورهایی است که همگی داده‌های شما را در خود نگهداری می‌کنند. یک Cluster باعث می‌شود تا شما بتوانید بر روی تمامی Node ها، Indexing و سرچ کنید. نام Cluster باید یک نام خاص انتخاب شود زیرا برای اینکه بتوان یک Node را در یک Cluster قرار داد، نیاز به نام آن Cluster خاص داریم . انتخاب اینکه این نام بر چه اساسی انتخاب شود و شامل چه مقادیری باشد بسیار حائز اهمیت است. نام پیش فرض یک Cluster معمولا Elasticsearch است.

اصطلاح Node در Elasticsearch یعنی چی؟

یک Node در واقع تنها شامل یک سروری است که در Cluster قرار دارد. این Node هم در جستجو و Indexing در یک Cluster نقش دارد و هم از داده‌های ما نگهداری می‌کند. انتخاب نام برای یک Node نیز مانند Cluster مهم است. نام پیش فرض یا UUID در هنگام ساخته شدن یک Node به صورت رندم تعیین می‌شود و شما می‌توانید بعدا آن را به دلخواه خود تغییر دهید. برای ادمین سایت ( Administration )، نام Node بسیار ارزشمند است زیرا برای نظارت بر یک سرور خاص، حتما باید نام آن را در اختیار داشته باشد. نام Node وابسته به نام Cluster است به طوری که اگر نام پیش فرض یک Cluster را که Elasticsearch است تغییر ندهیم، Node نیز به همین نام نمایش داده خواهد شد.

با Index در Elasticsearch آشنا شوید

یک index شامل مجموعه‌ای از document هایی است که ویژگی‌های مشابهی دارند که در مقاله همه چیز درباره‌ی Elasticsearch پارت 2 به آن اشاره کردیم. تمامی index ها باید با حروف کوچک نوشته شوند و شما می‌توانید به هر میزان که تمایل دارید بر روی یک Cluster ، index نگهداری کنید. تمامی عملیات‌های delete ، update ، indexing و search بر روی یک index قابل اجرا هستند.

Type در Elasticsearch

یک Type یا نوع، در واقع برای دسته‌بندی یا همان پارتیشن بندی یک Index استفاده می‌شود. به طور مثال، شما با استفاده از Type بندی Document ها در یک Index می‌توانید برای پسوردها و یا پست‌های یک وبلاگ دسته بندی متفاوتی را ایجاد کنید.

elasticsearch4

Document در Elasticsearch چیست؟

یک Document ،سندی شامل مقادیری از اطلاعات است که قابلیت Index شدن را دارد. شما می‌توانید با Index / Type ، به هر تعدادی که تمایل دارید سند Document در Index ایجاد و نگهداری کنید. این Document ها به صورت JSON (اصطلاحی در برنامه نویسی وب که از آن برای ارسال داده از وب سرور به سمت یک صفحه وب استفاده می‌شود.) می‌باشند.

اصطلاح Shards & Replicas در Elasticsearch

یک Index قابلیت نگهداری مقادیر زیادی از اطلاعات را دارد اما این مقدار بی‌نهایت نیست و زمانی میرسد که طرفیت نهایی Node نیز پر شود. برای حل این مشکل می‌توان از قابلیت تقسیم شدن Index استفاده کرد. هر Index را می‌توان به بخش‌های کوچکتری که به هر کدام از آنها یک Shard گفته می‌شود تقسیم کرد. هر کدام از این قسمت‌ها به صورت مستقل از یکدیگر عمل میکنند به طوری که می‌توان هر قسمت از یک Index را بر روی قسمت دلخواهی از Node مستقر بر روی Cluster یک ذخیره نمود. قابلیت به 2 دلیل حائز اهمیت است.

1- به شما این امکان را می‌دهد که به صورت افقی، اطلاعات خود را تقسیم بندی کنید.

2- با استفاده از این قابلیت می‌توانید چندین عملیات را به صورت همزمان بر روی هر کدام از Shard ها انجام دهید. این قابلیت به ویژه در زمانی که Shard ها روی چند Node مختلف هستند بسیار کارآمد است. Elasticsearch نحوه توزیع Shard ها و اتصال Document به جستجوهای انجام شده را مدیریت می‌کند. در فضای مجازی، هر لحظه امکان از بین رفتن داده‌ها وجود دارد. برای جلوگیری از این اتفاق بهتر است از داده‌های خود یک نسخه پشتیبان تهیه کنید. Elasticsearch به شما این امکان را می‌دهد که هر تعداد نسخه کپی که نیاز دارید از Shard های خود تهیه کنید. به این نسخه‌ها Replica shard یا Replicas می‌گویند.

تهیه این نسخه‌های جایگزین 2مزیت دارد. اول اینکه در صورتی که یک Shard خراب شود، Node یک نسخه پشتیبان به شما می‌دهد. این پشتیبان هیچوقت بر روی همان Node ای که Shard اصلی روی آن قرار دارد، ذخیره نمی‌شود. دومین مزیت، افزایش دامنه جستجو بین Shard مختلف و Shard های اصلی و پشتیبان است. یک Shard می‌تواند با یا بدون نسخه پشتیبان باشد. به Shard اصلی، Shard original نیز می‌گویند.

elasticsearch1

تست سلامت Cluster در Elasticsearch

تست سلامت cluster در Elasticsearch به منظور تایید نحوه کارکرد صحیح آن انجام می‌شود. برای بررسی سلامت cluster می‌توان از یک Api مانند نمونه زیر استفاده کرد.

GET localhost:9200/_cat/health?v

در این حالت یک request فرستاده شده و از cluster یک response برمیگردد. برای مشخص کردن اینکه وضعیت سلامت cluster به چه صورت است، بهتر از رنگ این موضوع را مشخص کنیم. رنگ سبز status بیانگر کارکرد صحیح cluster است. در صورتی که رنگ status زرد باشد، یعنی همه big data ها و data های کوچکتر موجود هستند اما بعضی از replica ها هنوز ساخته نشده اند. در صورتی که قسمتی از data ها موجود نباشد و cluster تا اندازی عملکرد نرمال داشته باشد، رنگ status قرمز خواهد شد.

در صورتی که قصد دریافت تمامی node های موجود در یک cluster را داشته باشیم می‌توانیم از تست زیر استفاده کنیم.

 

GET localhost:9200/_cat/nodes?v

در این حالت نیز یک request فرستاده شده و یک response از cluster برمیگردد.

ساخت یک Index در Cluster

جهت ساخت ایندکس cluster در Elasticsearch با استفاده از دستور زیر یک index به نام customer می‌سازیم.

PUT /customer?pretty

پس از آن با استفاده از دستور زیر، لیستی شامل تمامی‌های موجود در را مشاهده می‌کنیم.

GET /_cat/indices?v

در دو مثالی که در بالا آورده شده است مشاهده میکنید که در دستور PUT /customer?pretty، اضافه کردن Pretty، باعث می‌شود تا Json، پاسخ درخواست مطرح شده از سمت شما را با فرمتی زیبایی ارسال کند. علاوه بر این موضوع، پاسخ دریافتی ما از GET /_cat/indices?v بیانگر این است که این Index، دارای ۵ فایل Primary Shard میباشد، و همچنین یک Replica از آن موجود میباشد( با توجه به ستون های Pri و Rep). همچنین Docs.Count نیز بیانگر این نکته است که Index موجود فاقد هر گونه فایل Document است.
همانطور که مشاهده می‌کنید، رنگ Status در جدول زرد می‌باشد. دلیل این موضوع نشناختن Replica داخل Node موجود در Index است. با انتقال یک کپی از Replica به یک Node دیگر، رنگ Status سبز خواهد شد.

elasticsearch6

 

 

Index وQuery یک Document

برای index یک customer document، ابتدا مقدار id را برابر 1 قرار داده سپس از طریق دستور زیر اینکار را انجام می‌دهیم.

PUT /customer/_doc/1?pretty
{
“name”: “John Doe”
{

برای خواندن مقالات بیشتر در زمینه DevOps اینجا کلیک کنید.

نمونه :

سپس با استفاده از api و id ، همان document ای را که index کردیم از طریق دستور زیر دریافت میکنیم.

GET /customer/_doc/1?pretty

پاسخ این درخواست به صورت زیر میباشد:

 

پاک کردن یک Index در Cluster

برای پاک کردن یک index از api زیر استفاده میکنیم.

DELETE /customer?pretty

مثال :

در این مثال یک index با نام customer را پاک کردیم و همانطور که مشاهده می‌کنید، پس از حذف customer، لیست index های موجود را دریافت کردیم و index ای با نام customer در آن موجود نبود.

elasticsearch3

برای مشاهده قسمت دوم :

قسمت دوم

 

و در آخر

وبسایت میربزرگی قصد دارد تا با ارائه مقاله‌ها و تجربه‌های کاربردی شما را در زمینه یادگیری و رفع اشکالاتتان کمک کند. در صورت وجود هرگونه سوالی به من ایمیل بزنید.

ارسال دیدگاه

16 + دوازده =

این جا قراره با هم زبان برنامه نویسی جاوا رو یاد بگیریم. اگه جواب سوالتو توی مقاله ها پیدا نکردی، میتونی بهم ایمیل بزنی تا راهنماییت کنم. اگر موضوعاتی رو پیشنهاد داری حتما برام بفرست. منتظر ایمیلتم

پیام با موفقیت ثبت شد.
خطایی رخ داده است.