Elasticsearch: Arama Performansını Artırma
giriiş
Travolic , birden fazla havayolu ve seyahat acentesinden alınan uçuş fiyatlarını toplayan, kullanıcılara seyahat düzenlemelerini karşılaştırmaları ve rezervasyon yaptırmaları için uygun ve güvenilir bir platform sağlayan bir meta arama motorudur. Ancak, kullanıcı sayısı ve sistemde depolanan veri hacmi artmaya devam ettikçe, veri doğruluğunun birinci öncelik olarak kalmasını sağlarken arama performansını optimize etme zorluğuyla karşı karşıya kaldık. Bu zorluğun üstesinden gelmek için havaalanları, şehirler ve istasyonlar hakkındaki bilgileri kapsayan arama yerleri verilerimizi MongoDB'den Elasticsearch'e taşımaya karar verdik. Bu makale, geçiş sürecini derinlemesine incelemeyi ve bunun Travolic'in genel performansı üzerindeki etkisini vurgulamayı amaçlamaktadır .
Arka plan
Travolic'te yer verileri, kullanıcıların en yakın havaalanlarını ve ilgili seyahat ayrıntılarını keşfetmelerini sağlayarak arama motorunda çok önemli bir rol oynar. MongoDB tatmin edici bir şekilde çalışmasına rağmen Travolic , özellikle yanıt süresi açısından arama performansını iyileştirmenin yollarını arıyordu.
Travolic'in ekibi, olağanüstü hızı ve dil yetenekleri nedeniyle Elasticsearch'ü umut verici bir çözüm olarak kabul etti. Elasticsearch, Apache Lucene arama kitaplığının üzerine inşa edilmiş açık kaynaklı bir arama motorudur. Platform, Travolic'in sürekli artan veri gereksinimleri için tam olarak ihtiyaç duyduğu çok büyük miktarda veriyi işlemek için özel olarak oluşturulmuştur. Ayrıca Elasticsearch, küresel bir izleyici kitlesine hizmet veren bir meta arama motoru platformu için gerekli olan kapsamlı bir dil desteği yelpazesi sunar.
Geçiş Süreci
Taşıma işlemi, yer verilerinin MongoDB'den Elasticsearch'e taşınmasını içeriyordu. Ekip, geçişin sorunsuz ve platform operasyonlarında herhangi bir aksama olmadan gerçekleştirilmesini sağlamak için Elasticsearch uzmanlarıyla yakın bir şekilde çalıştı.
Geçiş sürecini başlatmak için ekip, alanları MongoDB koleksiyonundan Elasticsearch'teki karşılık gelen alanlarıyla eşleyerek mevcut MongoDB şemasıyla uyumlu bir Elasticsearch şeması tasarladı. Ekip, şema tanımının ardından, verileri Elasticsearch'e aktarmak için Elasticsearch'ün toplu API'sinden yararlandı.
Ekip, yer verilerini MongoDB'den Elasticsearch'e taşırken belirli veri doğruluğu sorunlarıyla karşılaştı. Spesifik olarak, MongoDB koleksiyonundaki bazı veriler doğru şekilde normalleştirilmedi ve bu, Elasticsearch'e yüklendiğinde tutarsızlıklara neden oldu. Sonuç olarak, ekibin verileri Elasticsearch'e yüklemeden önce manuel olarak temizlemesi ve doğru şekilde normalleştirildiğinden emin olması gerekiyordu.
Ekibin taşıma işlemi sırasında karşılaştığı diğer bir engel de iç içe geçmiş belgelerle ilgiliydi. MongoDB bu yapıları desteklese de Elasticsearch desteklemez. Sonuç olarak, ekibin iç içe geçmiş verileri düzleştirmesi ve bunları Elasticsearch'te ayrı alanlar olarak depolaması gerekiyordu.
Performans Üzerindeki Etki
Travolic'in arama performansı, Elasticsearch'e geçişten önemli ölçüde etkilendi. Geçişten önce, arama sorgularının ortalama yanıt süresi yaklaşık 2-5 saniyeydi. Ancak geçişin ardından ortalama yanıt süresi 50-80 milisaniyeye yükseldi.
Geliştirilmiş performansa katkıda bulunan ana faktörlerden biri, Elasticsearch'ün hızıydı. Elasticsearch, büyük miktarda veriyi işlemek üzere tasarlanmıştır ve verileri hızlı bir şekilde indeksleyebilir ve arayabilir, bu da onu Travolic gibi seyahatle ilgili verilere hızlı erişim gerektiren bir platform için ideal bir çözüm haline getirir.
Geliştirilen performansa katkıda bulunan bir diğer faktör ise Elasticsearch'ün sunduğu dil desteği oldu. Elasticsearch, İngilizce, İspanyolca, Fransızca ve Almanca dahil birçok dil için yerleşik desteğe sahiptir. Bu , dünyanın her yerinden müşterilere hizmet veren ve çeşitli dilleri desteklemesi gereken Travolic gibi bir platform için özellikle önemlidir .
Geçiş Sonrası
MongoDB'den Elasticsearch'e geçiş tamamlandıktan sonra, Travolic'teki ekip için yeni bir zorluk ortaya çıktı : verilerin MongoDB ile Elasticsearch arasında nasıl senkronize tutulacağı. Spesifik olarak, MongoDB'deki havalimanları ve şehirler koleksiyonlarındaki belgelerde yapılan güncellemelerin veya silmelerin Elasticsearch'teki yerler dizinindeki ilgili belgelere de yansıtılmasını sağlamaları gerekiyordu.
Bu sorunu çözmek için ekip, MongoDB ile Elasticsearch arasındaki senkronizasyon sürecini yürütmek için bir mesaj kuyruğu sistemi, özellikle RabbitMQ kullanmaya karar verdi.
MongoDB'de gerçekleşen güncellemeler veya silmelerle birlikte bir olayı yayınlayacak bir hizmet yarattılar. Daha sonra, bu olayları tüketmek ve değişiklikleri Elasticsearch'teki yer dizinindeki ilgili belgelere uygulamak için başka bir hizmet oluşturuldu.
Bu senkronizasyon sürecini yürütmek için RabbitMQ'yu kullanan Travolic ekibi, MongoDB'deki verilerde yapılan herhangi bir değişikliğin, manuel müdahaleye veya güncellemeye gerek kalmadan Elasticsearch'teki ilgili belgelere hızlı bir şekilde yansıtılmasını sağlayabildi. Bu, platform genelinde verilerin bütünlüğünün ve doğruluğunun korunmasına yardımcı olarak kullanıcıların her zaman en güncel bilgilere erişebilmesini sağladı.
Çözüm
Travolic'in MongoDB'den Elasticsearch'e geçişi büyük bir başarı oldu. Geçiş süreci sorunsuz geçti ve arama sorguları için ortalama yanıt süresini 2-5 saniyeden 50-80 milisaniyeye düşürerek platformun performansını önemli ölçüde iyileştirdi. Elasticsearch'e geçiş, Travolic'i gelecekteki büyüme ve genişleme için de hazırlamıştır, çünkü Elasticsearch'ün yetenekleri onu platformun artan veri ihtiyaçlarını karşılamak için ölçeklenebilir bir çözüm haline getirmektedir.

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































