Elasticsearch, verimli ve ölçeklenebilir veri depolama ve alma için popüler bir teknolojidir. Ancak performansını ve veri bütünlüğünü korumak, yeniden indeksleme adı verilen çok önemli bir uygulamayı gerektirir. Dizin oluşturma, Elasticsearch'e veri eklemenin ilk sürecidir; yeniden dizin oluşturma ise veri doğruluğunu korumak ve arama performansını optimize etmek için gereklidir.
İster tecrübeli bir Elasticsearch kullanıcısı olun ister yolculuğunuza yeni başlıyor olun, yeniden indekslemeyi anlamak verimli bir Elasticsearch kümesini sürdürmek için önemlidir. Bu makalede, Elasticsearch'ü yeniden indekslemenin temellerini, gerektiğinde yanıt vermeyi, nasıl tetikleneceğini ve Elasticsearch kümenizden en iyi şekilde yararlanmanızı sağlayacak en iyi uygulamaları ele alacağız.
Elasticsearch'te yeniden dizin oluşturma, veri bütünlüğünün korunmasına ve performansın artırılmasına yardımcı olur. Basitçe söylemek gerekirse, verileri bir dizinden diğerine kopyalama işlemidir. Bu basit gibi görünse de, doğru şekilde yapılmazsa, yavaş veri alımı ve hatta yanlış sonuçlar gibi sorunlara neden olabilir.
Elasticsearch dizinlerinizi iyi organize edilmiş kitaplıklar olarak hayal edin. Zamanla kitapların güncellenmesi, yeniden düzenlenmesi ve hatta değiştirilmesi gerekebilir. Yeniden indeksleme, kütüphane raflarını yeniden düzenlemeye veya her şeyi düzenli tutmak için kitapları güncellemeye benzer. Bu olmadan kitaplığınız dağınık hale gelebilir, bu da aramaların yavaşlamasına ve verilerinizde olası yanlışlıklara yol açabilir.
Bu benzetme, Elasticsearch'te yeniden indekslemeyi anlamanın önemini vurgulamaktadır. Bu yalnızca verilerin kopyalanmasıyla ilgili değil; etkili arama ve erişim için "kütüphanenizin" bütünlüğünü korumakla ilgilidir. Yeniden indekslemenin ne zaman gerekli olduğuna ve bunun üstesinden nasıl gelineceğine bir göz atalım.
Elasticsearch veri modellerinizde veya eşlemelerinizde değişiklikler meydana geldiğinde veya performans iyileştirmeleri aradığınızda, yeniden indeksleme gerekli hale gelir. Bu bölümde, yeniden dizin oluşturmanın neden gerekli olduğuna ilişkin nüansları anlamak için bu senaryoları daha ayrıntılı olarak inceleyeceğiz.
Veri modellerindeki yapısal değişiklikler, verilerin Elasticsearch'te nasıl yapılandırıldığına ilişkin değişiklikleri ifade eder. Bu değişiklikler, yeni alanların eklenmesi veya kaldırılması veya mevcut alanların veri türlerinin değiştirilmesi gibi şeyleri içerebilir.
Yeni alanların tanıtılması, Elasticsearch'ün o alanda depolanan verileri nasıl verimli bir şekilde arayacağını bilmesini sağlamak için genellikle bir yeniden dizin gerektirir. Veri türlerini yerinde değiştiremeyeceğiniz için, veri türlerini değiştirmek tamamen yeni bir dizin gerektirir. Değiştirilen veri türü için yeni eşleme oluşturulduktan sonra verilerin yeniden indekslenmesi gerekir.
Bu yapısal değişiklikler, Elasticsearch'ün yazma sırasında şema yaklaşımı nedeniyle yeniden indekslemeyi gerektirir. Elasticsearch, verileri alındıkça indeksler ve veri yapısında yapılan herhangi bir değişiklik, mevcut veriler ile yeni şemayla yazılan veriler arasında tutarsızlıklara yol açabilir. Sonuç olarak, yeniden indeksleme yapılmadığında, veri öğelerinin şema uyumsuzluğu nedeniyle arama sorguları beklenmedik veya hatalı sonuçlar verebilir. Bunun hem veri doğruluğu hem de arama performansı üzerinde etkisi olabilir.
Eşlemeler, verilerin Elasticsearch'te nasıl indekslendiğine ve sorgulandığına ilişkin plan görevi görür. Bu eşlemeler değiştirildiğinde genellikle yeniden indeksleme gerekir.
Eşlemeler, Elasticsearch'teki alanların veri türlerini ve özelliklerini tanımlar. Bu eşlemelerde yapılacak herhangi bir değişiklik, verilerin nasıl dizine eklendiğini, depolandığını ve alındığını etkiler. Örneğin, bir metin alanını tarih alanıyla değiştirmek, verilerin işlenme ve sorgulanma şeklini temelden değiştirir. Elasticsearch, haritalama tanımlarına dayalı olarak veri tutarlılığını zorunlu kılar. Eşlemelerde yapılan değişiklikler, veriler yeniden indekslenmezse mevcut veriler ile güncellenen şema arasında tutarsızlıklara yol açabilir.
Eşlemeler değiştirildiğinde, özellikle veri türlerinin veya alan özelliklerinin değiştirilmesini içeriyorsa, dolgu da önemli hale gelir. Geri doldurma, mevcut verileri yeni bir şema veya veri yapısıyla hizalamak için geriye dönük olarak doldurma veya güncelleme işlemidir. Bu, mevcut verilerin eşleme değişikliğinden sonra da verimli ve doğru bir şekilde sorgulanabileceği anlamına gelir.
Yeniden dizin oluşturma yalnızca rutin bir bakım görevi değildir, Elasticsearch'te arama performansını optimize etmek için güçlü bir araçtır. Örneğin, yeniden dizin oluşturma, bir dizindeki parça sayısını değiştirmenize olanak tanır. Parça sayısını ayarlamak veya yeniden parçalamak, verileri daha eşit bir şekilde dağıtabilir ve arama performansını iyileştirmek için belirli düğümlerdeki eşit olmayan iş yüklerini önleyebilir.
Yeniden indeksleme, indeksleri bir arada birleştirmek için de kullanılabilir. Diyelim ki aynı veri yapısını paylaşan ve sıklıkla birlikte sorgulanan birden fazla küçük endeksiniz var. Yeniden indeksleme bunları tek ve daha büyük bir indekste birleştirebilir. Bu, çok sayıda küçük endeksi yönetme yükünü azaltır ve bu da arama hızını artırabilir.
Son olarak, yönlendirmeyi iyileştirmek için yeniden indeksleme kullanılabilir. Yönlendirme stratejilerini etkili bir şekilde yeniden indeksleyerek ve uygulayarak, sorguları belirli parçalara yönlendirerek aranması gereken parça sayısını en aza indirebilirsiniz. Bu hedefe yönelik yaklaşım, verileriniz kullanıcı kimliği gibi belirli anahtarlar tarafından sık sık aranıyorsa, arama sorgularını önemli ölçüde hızlandırabilir.
Elasticsearch sürüm 6.X'ten 8.0'a (mevcut ana sürüm) ve sonraki sürümlere yükseltme yaparken, sürüm 6'da oluşturulan tüm endeksleri yeniden indekslemeniz gerekebilir. Elasticsearch'ün veri yapıları ve temel mekanizmaları, uyumluluk ve optimum performans için yeniden indeksleme gerektiren bu sürümler arasında önemli ölçüde değişti .
Yeniden indeksleme işlemi, eskiden yeniye sorunsuz bir şekilde geçiş yapabilmenizi sağlamak için verilerin güncellenmiş yapı ve yeni işlevlerle uyumlu olmasını sağlar. Elasticsearch, bu sürece yardımcı olması için yükseltme yardımcısını kullanmanızı önerir.
Elasticsearch'te yeniden indeksleme, Elasticsearch Reindex API aracılığıyla mümkün olmaktadır. Reindex API, mevcut dizininiz ile oluşturmak veya değiştirmek istediğiniz yeni dizin arasında köprü görevi görür. Birincil amacı, verilerin bir dizinden diğerine verimli bir şekilde aktarılmasını sağlamaktır; bunun yanı sıra şunları da yapabilirsiniz:
Belgeleri kaynak dizinden hedef dizine seçerek kopyalayın.
Alan yeniden adlandırma veya tür dönüştürmeleri gibi karmaşık veri dönüşümlerini uygulayın.
Verileri belirli kriterlere göre filtreleyin.
Kısıtlama ve yenileme aralıkları gibi seçeneklerle indeksleme sürecini kontrol edin.
Reindex API'yi kullanmadan önce verilerinizi taşımak veya dönüştürmek istediğiniz hedef dizinin oluşturulduğundan ve doğru şekilde yapılandırıldığından emin olun.
Yeniden indekslemeyi tetiklemek için, kaynak ve hedef indekslerin yanı sıra istenen dönüşümleri veya filtreleri belirterek _reindex
uç noktasına bir POST isteği formüle etmeniz gerekir. Örnek bir reindex POST isteği aşağıdaki gibi görünebilir.
POST /_reindex { "source": { "index": "source_index" }, "dest": { "index": "target_index" }, "script": { "source": "ctx._source.new_field = 'transformed value'" }, "query": { "term": { "category.keyword": "example" } } }
İsteğiniz oluşturulduktan sonra isteği Elasticsearch'e göndererek yeniden indeksleme sürecini başlatabilirsiniz. Elasticsearch, tanımladığınız talimatları izleyerek verileri kaynak dizinden hedef dizine kopyalamaya başlayacaktır.
Yeniden indeksleme tamamlandıktan sonra, beklentilerinize uygun olduğundan emin olmak için hedef indeksteki verileri kapsamlı bir şekilde test edin. Örneğin, yeniden dizin oluşturma sırasında alanların doğru şekilde eşlendiğini doğrulamak için kaynak ve hedef dizinler arasındaki alan eşlemelerini karşılaştırabilirsiniz. Ayrıca hem kaynak hem de hedef dizinlerden bir belge örneği alabilir ve verilerin doğru bir şekilde yeniden dizine eklendiğini doğrulamak için bunları karşılaştırabilirsiniz.
Elasticsearch'te yeniden indeksleme yaparken, yeniden indeksleme prosedürünün veri kaybı olmadan ve mevcut küme operasyonları üzerinde çok az etki yaratarak sorunsuz olmasını sağlamak için bu en iyi uygulamaları takip etmeye çalışmalısınız.
Herhangi bir yeniden dizin oluşturma etkinliğine başlamadan önce kümenizi yedeklemeniz önemlidir. Bu ihtiyati adım, yeniden indeksleme işlemi sırasında beklenmeyen sorunların ortaya çıkması durumunda orijinal duruma geri dönmenin bir yolunu sunan bir güvenlik ağı görevi görür.
Yeniden indeksleme sonrasında kaynak indeksi hala mevcut olmalıdır, ancak önemli değişiklikler yapmadan önce daima verilerinizin güvenilir bir kopyasına sahip olmak temel bir prensiptir.
Yeniden dizin oluşturma sırasındaki potansiyel riskleri ve zorlukları azaltmak için, işlemin öncelikle üretim öncesi bir ortamda gerçekleştirilmesi önerilir. Bunu yaparak, üretim sistemini etkilemeden öngörülemeyen sorunları tespit edebilir ve çözebilirsiniz. Prosedür üretim öncesi ortamda tamamlanıp doğrulandıktan sonra, üretimde güvenli bir şekilde çalıştırılabilir.
Altyapınızın zorlanmasını önlemek için yeniden indeksleme sırasında sistem kaynaklarını izlemek önemlidir. Yeniden indeksleme, özellikle daha büyük veri kümeleri için kaynak yoğun olabilir. CPU, bellek, disk kullanımı ve ağ etkinliğini yakından takip etmek, kaynak tahsisinin optimize edilmesine yardımcı olarak sürecin performans darboğazlarına neden olmadan verimli bir şekilde çalışmasını sağlayabilir. Kaynak kullanımını kontrol etmek için düğüm istatistikleri API'sini kullanabilirsiniz.
GET /_nodes/stats
Bu, aşağıdaki gibi görünen bir yanıt döndürecektir.
{ "_nodes": { "total": 2, "successful": 2, "failed": 0 }, "cluster_name": "my_cluster", "nodes": { "node_id1": { "name": "node_name1", "process": { "cpu": { "percent": 30, } }, "jvm": { "mem": { "heap_used_percent": 40.3, "heap_used_in_bytes": 123456789, "heap_max_in_bytes": 256000000 } } }, "node_id2": { "name": "node_name2", "process": { "cpu": { "percent": 50, } }, "jvm": { "mem": { "heap_used_percent": 60.8, "heap_used_in_bytes": 210987654, "heap_max_in_bytes": 256000000 } } } } }
Yeniden indekslemenin çok yoğun olduğunu düşünüyorsanız, yeniden indeksleme isteğini gönderirken requests_per_second
parametresini ayarlayarak süreci hızlandırabilirsiniz. Bu, gruplar arasında bir bekleme süresi sağlamak için, gruplar arasına parametre tarafından ayarlanan saniye sayısı kadar bir uyku ekleyecektir.
Yeniden indeksleme tamamlandıktan sonra, beklendiği gibi göründüğünden emin olmak için hedef indeksteki verileri doğrulamanız gerekir. Bu doğrulama süreci, belge sayımları, alan eşlemeleri ve arama sorguları dahil olmak üzere çeşitli testleri kapsamalıdır.
Elasticsearch, şüphesiz NoSQL arama ve analiz alanında öne çıkan bir çözüm olarak kendini kanıtlamıştır. Ancak veri indeksleme ve sorgulamaya benzersiz yaklaşımlar sunan, özellikle de Rockset gibi alternatif çözümleri keşfetmeye değer.
Rockset, Elasticsearch'e bulut tabanlı bir alternatiftir ve verileri indeksleme ve sorgulama konusunda farklı bir bakış açısı sunar. Elasticsearch'ün yazma sırasında şema yaklaşımından farklı olarak Rockset, şemasız alıma izin verir. Veriler, önceden şema tanımına gerek kalmadan alınabilir ve sorgulanabilir; bu da, yeniden indekslemeye gerek kalmadan sürekli gelişen veri kümelerinin işlenmesinde daha fazla esneklik sunar.
Endeks yönetimi alanında Rockset, veriler alınırken otomatik olarak bir satır indeksi, bir sütun indeksi ve bir arama indeksinin oluşturulduğu birleşik indeksleme modelinden yararlanır. Bu, dizinlerin kullanıcılar tarafından oluşturulduğu ve yapısal değişikliklerin sıklıkla zaman alan yeniden dizin oluşturma prosedürlerini gerektirdiği Elasticsearch ile çelişmektedir.
Elasticsearch çeşitli kullanım durumları için sağlam bir çözüm olmaya devam etse de Rockset gibi alternatifleri keşfetmek, özellikle de Elasticsearch'te yeniden indekslemenin sık yapılan bir aktivite haline geldiğini düşünüyorsanız faydalı olabilir.
Yeniden indeksleme, Elasticsearch'te temel bir süreçtir ve veri yapıları geliştikçe arama sonuçlarının verimliliğini ve doğruluğunu korumak açısından önemlidir.
Yeniden indekslemenin ekibiniz için sürekli bir zaman yükü haline geldiğini fark ederseniz Rockset gibi alternatif çözümleri keşfetmeye değer olabilir. Rockset, geliştiricilerin daha fazla katma değerli faaliyetlere odaklanmasını sağlayan daha akıcı bir dizin yönetimi süreci sunar.