مقیاسپذیر بودن Elasticsearch توسط مفهومی تخت عنوان Sharding تا حد زیادی رخ میدهد.
فرض کنید یک Index حاوی کلی اطلاعات دارید که حجم این Index به 1TB میرسد.
بهخودی خود این Index با این حجم بسیار ناپایدار بوده و نگهداری آن (بر روی سرور) به تنهایی سخت میباشد.
در این زمان مفهوم Sharding وارد عمل میشود. و به عنوان مثال این Index یک ترابایتی را به Shard هایی با حجم 256GB تقسیمبندی میکند.
با تعداد shardهای بیشتر به جای وجود یک Index ، کارایی سیستم یا Performance سیستم بالا میرود.
اطلاعات مربوط به یک Document درون Index ذخیره شده و آن اطلاعات در نهایت درون یک الی چند Shard قرار میگیرد.
زمانی که یک Query به سمت Elasticsearch فرستاده میشود ، سرچ به صورت همزمان و موازی درون Shard ها صورت میگیرد و این موضوع باعث افزایش کارایی و سرعت میشود.
Shard ها فقط در زمان به وجود آمدن یک Index قابل به وجود آمدن هستند.
به صورت پیشفرض به تعداد ۵ تا Shard برای یک Index به وجود میآید.
حال فرض کنید تعداد Shard های موجود برای یک Index کافی نیست و تصمیم بر این گرفته شده که حتما تعداد Shard های یک Index خاص افزایش یابد. برای حل این مشکل راهکاری که ارائه میشود این است که یک Index جدید و خام با تعداد Shard مورد نظر ساخته شده و اطلاعات و Data درون Index قبل را به Index جدید انتقال دهیم. در این صورت Index جدیدی خواهیم داشت که دارای اطلاعات قبلی ما بوده اما تعداد Shard ها در آن افزایش پیدا کرده است.
دلیل این که نمیتوان تعداد Shard ها را بعد از به وجود آمدن Index کم یا زیاد کرد این است که :
Document ها درون Shard ها ذخیره میشود.
پس به طور کلی یک Index میتواند دارای چندین Shard باشد و این Shard ها درون Node ها پخش شده باشد. در نهایت اطلاعات درون یک Index میتواند درون چندین Node پخش شده باشد.