paint-brush
Arama ve Analizi DynamoDB'den Aktarmak için Elasticsearch'ü Kullanma: Artıları ve Eksileriile@rocksetcloud
4,401 okumalar
4,401 okumalar

Arama ve Analizi DynamoDB'den Aktarmak için Elasticsearch'ü Kullanma: Artıları ve Eksileri

ile Rockset8m2024/05/10
Read on Terminal Reader

Çok uzun; Okumak

Elasticsearch esnek ve son derece özelleştirilebilir olmasıyla bilinmesine rağmen, performansı korumak için küme ve dizin işlemleri ve yönetimini gerektiren karmaşık bir dağıtılmış sistemdir.
featured image - Arama ve Analizi DynamoDB'den Aktarmak için Elasticsearch'ü Kullanma: Artıları ve Eksileri
Rockset HackerNoon profile picture


DynamoDB'de Analitik

Mühendislik ekiplerinin genellikle DynamoDB'den gelen veriler üzerinde karmaşık filtreler, toplamalar ve metin aramaları yapması gerekir. Ancak DynamoDB, gerçek zamanlı analiz için değil, işlem işleme için optimize edilmiş operasyonel bir veritabanıdır. Sonuç olarak, birçok mühendislik ekibi DynamoDB'de analitik konusunda sınırlara ulaşıyor ve alternatif seçenekler arıyor.


Bunun nedeni operasyonel iş yüklerinin karmaşık analitik iş yüklerinden çok farklı erişim modellerine sahip olmasıdır. DynamoDB yalnızca sınırlı sayıda işlemi destekler, bu da analitiği zorlaştırır ve bazı durumlarda mümkün kılmaz. DynamoDB'nin arkasındaki şirket olan AWS bile şirketlere analitiği diğer amaca yönelik çözümlere aktarmayı düşünmelerini tavsiye ediyor. Yaygın olarak başvurulan çözümlerden biri, bugün inceleyeceğimiz Elasticsearch'tür.


DynamoDB, en popüler NoSQL veritabanlarından biridir ve oyun, sosyal medya, IoT ve finansal hizmetlerde birçok web ölçekli şirket tarafından kullanılmaktadır. DynamoDB, ölçeklenebilirliği ve basitliği nedeniyle tercih edilen veritabanıdır ve saniyede 20 milyon istek ölçeğinde tek haneli milisaniye performansı sağlar. Bu hıza geniş ölçekte ulaşmak için DynamoDB, bireysel veri kayıtlarında yüksek frekanslı, düşük gecikmeli işlemlerle operasyonel iş yüklerine yönelik performansı artırmaya odaklanmıştır.


Elasticsearch, Lucene üzerine kurulu, metin arama ve günlük analizi kullanım durumları için kullanılan açık kaynaklı, dağıtılmış bir arama motorudur. Elasticsearch, analitik gösterge tablolarına yönelik bir görselleştirme aracı olan Kibana'yı içeren daha büyük ELK yığınının bir parçasıdır. Elasticsearch esnek ve son derece özelleştirilebilir olmasıyla bilinmesine rağmen, performansı korumak için küme ve dizin işlemleri ve yönetimini gerektiren karmaşık bir dağıtılmış sistemdir. Elastic ve AWS'nin yönetilen yönetilen Elasticsearch teklifleri mevcuttur, dolayısıyla bunu EC2 bulut sunucularında kendiniz çalıştırmanıza gerek yoktur.


Utanmaz Fiş: Rockset , bulut için oluşturulmuş gerçek zamanlı bir analiz veritabanıdır. DynamoDB için yerleşik bir bağlayıcıya sahiptir ve bir saniyeden kısa sürede arama, toplama ve birleştirme için verileri alır ve dizine ekler. Ancak bu yazı, bu seçeneği keşfetmek istemeniz durumunda DynamoDB ve Elasticsearch'ün kullanım örneklerini vurgulamakla ilgilidir.

AWS Lambda Kullanarak DynamoDB'yi Elasticsearch'e Bağlama

Analitik amacıyla DynamoDB verilerini Elasticsearch'e sürekli olarak yüklemek için AWS Lambda'yı kullanabilirsiniz. İşte nasıl çalışıyor:


  • DynamoDB akışındaki her güncellemeyi Elasticsearch'e senkronize etmek için bir lambda işlevi oluşturun
  • Mevcut DynamoDB tablosunun anlık görüntüsünü almak ve bunu Elasticsearch'e göndermek için bir lambda işlevi oluşturun. DynamoDB tablo içeriğini okumak için bir EC2 komut dosyası veya Amazon Kinesis akışı kullanabilirsiniz.



Verileri Elasticsearch'e senkronize etmek için DynamoDB için Logstash Eklentisini içeren alternatif bir yaklaşım vardır, ancak şu anda desteklenmemektedir ve yapılandırılması karmaşık olabilir.

Elasticsearch Kullanarak DynamoDB Verilerinde Metin Arama

Metin arama, en alakalı sonuçları bulmak için bir belgenin içindeki metnin aranmasıdır. Çoğu zaman, en iyi sonucu bulmak için bir kelimenin bir bölümünü, kelimenin eşanlamlısını veya zıt anlamlısını veya bir kelime dizisini birlikte aramak isteyeceksiniz. Hatta bazı uygulamalar, önemlerine göre arama terimlerini farklı şekilde ağırlıklandıracaktır.


DynamoDB, verilerin filtrelenmesine yardımcı olmak için yalnızca bölümlendirmeyi kullanarak bazı sınırlı metin arama kullanım örneklerini destekleyebilir. Örneğin, bir e-ticaret sitesiyseniz DynamoDB'deki verileri bir ürün kategorisine göre bölümlendirebilir ve ardından aramayı bellekte çalıştırabilirsiniz. Görünen o ki, Amazon.com perakende bölümü birçok metin arama kullanım durumunu bu şekilde ele alıyor. DynamoDB ayrıca belirli bir veri alt dizesini içeren bir dize bulmanızı sağlayan bir içerme işlevini de destekler.



Bir e-ticaret sitesi, verileri ürün kategorisine göre bölümlendirebilir. Aranan verilerle birlikte marka ve renk gibi ek özellikler gösterilebilir.


Tam metin aramanın uygulamanızın temelini oluşturduğu senaryolarda, Elasticsearch gibi alaka düzeyi sıralamasına sahip bir arama motoru kullanmak isteyeceksiniz. Elasticsearch'te metin aramanın yüksek düzeyde nasıl çalıştığı aşağıda açıklanmıştır:


  • İlgililik sıralaması : Elasticsearch'ün, arama sonuçlarına kullanıma hazır olarak verdiği bir alaka sıralaması vardır veya sıralamayı özel uygulama kullanım durumunuz için özelleştirebilirsiniz. Elasticsearch varsayılan olarak terim sıklığı, ters belge sıklığı ve alan uzunluğu normuna dayalı bir sıralama puanı oluşturacaktır.


  • Metin analizi : Elasticsearch, verileri indekslemek için metni jetonlara böler ve buna tokenleştirme adı verilir. Analizciler daha sonra arama sonuçlarını geliştirmek için normalleştirilmiş terimlere uygulanır. Varsayılan standart çözümleyici, genel, çoklu dil desteği sağlamak için metni Unicode Konsorsiyumuna göre böler.


Elasticsearch ayrıca bulanık arama, otomatik tamamlama araması gibi kavramlara da sahiptir ve uygulamanızın özelliklerini karşılayacak şekilde daha da gelişmiş alaka düzeyi yapılandırılabilir.

Elasticsearch Kullanarak DynamoDB Verilerinde Karmaşık Filtreler

Sonuç kümesini daraltmak ve böylece verilere daha hızlı ve daha verimli bir şekilde ulaşmak için karmaşık filtreler kullanılır. Birçok arama senaryosunda, birden çok filtreyi birleştirmek veya belirli bir süre boyunca olduğu gibi bir dizi veriyi filtrelemek isteyeceksiniz.


DynamoDB verileri bölümlere ayırır ve iyi bir bölüm anahtarı seçmek, verilerin filtrelenmesini daha verimli hale getirmeye yardımcı olabilir. DynamoDB ayrıca ikincil dizinleri de destekler; böylece verilerinizi çoğaltabilir ve ek filtreleri desteklemek için farklı bir birincil anahtar kullanabilirsiniz. Verileriniz için birden fazla erişim modeli olduğunda ikincil dizinler yararlı olabilir.


Örneğin, öğeleri teslimat durumlarına göre filtrelemek için bir lojistik uygulaması tasarlanabilir. Bu senaryoyu DynamoDB'de modellemek için, Item_ID bölüm anahtarına, Status sıralama anahtarına ve alıcı, ETA ve SLA niteliklerine sahip bir lojistik için temel tablo oluşturacağız.


Teslimat gecikmelerinin SLA'yı aşması durumunda DynamoDB'de ek bir erişim modelini de desteklememiz gerekiyor. DynamoDB'deki ikincil dizinlerden yalnızca SLA'yı aşan teslimatları filtrelemek için yararlanılabilir.


Zaten temel tabloda bulunan ETA özniteliğinin bir kopyası olan ETADelayedBeyondSLA alanında bir dizin oluşturulacaktır. Bu veriler yalnızca ETA, SLA'yı aştığında ETADelayedBeyondSLA dahil edilir. İkincil dizin, sorguda taranması gereken veri miktarını azaltan seyrek bir dizindir. buyer bölüm anahtarıdır ve sıralama anahtarı ETADelayedBeyondSLA .




İkincil dizinler, karmaşık filtreler içeren erişim modelleri de dahil olmak üzere uygulamadaki çoklu erişim modellerini desteklemek için kullanılabilir.


DynamoDB, bir ifadeyle eşleşmeyen sonuçları filtrelemek için Sorgu ve Tarama API'sinde bir ifade filtreleme işlemine sahiptir. filterexpression yalnızca bir sorgu veya tablo tarama işleminden sonra uygulanır; böylece sorgu için hâlâ 1 MB'lık veri sınırına bağlı kalırsınız. Bununla birlikte, filterexpression , uygulama mantığını basitleştirmede, yanıt yükü boyutunu azaltmada ve yaşam süresinin sona ermesini doğrulamada yardımcı olur. Özetle, verilerinizi yine de uygulamanızın erişim modellerine göre bölümlendirmeniz veya DynamoDB'deki verileri filtrelemek için ikincil dizinler kullanmanız gerekecektir.


DynamoDB, hızlı veri alımı için verileri anahtarlar ve değerler halinde düzenler ve karmaşık filtreleme için ideal değildir. Karmaşık filtrelere ihtiyaç duyduğunuzda, Elasticsearch gibi bir arama motoruna geçmek isteyebilirsiniz, çünkü bu sistemler samanlıkta iğne arama sorguları için idealdir.


Elasticsearch'te veriler, sütun değerinin bir kayıt listesi olarak saklandığı belgelerin listesi anlamına gelen bir arama dizininde saklanır. Bir yüklemi olan herhangi bir sorgu (yani: WHERE user=A), yüklemi karşılayan belgelerin listesini hızlı bir şekilde getirebilir. Gönderme listeleri sıralandığından, tüm filtreleme kriterlerinin karşılanması için sorgu sırasında hızlı bir şekilde birleştirilebilirler. Elasticsearch ayrıca sık erişilen karmaşık filtre sorgularının alma sürecini hızlandırmak içinbasit önbelleğe alma özelliğini kullanır.


Elasticsearch'te genellikle puanlamasız sorgular olarak adlandırılan filtre sorguları, verileri metin arama sorgularından daha hızlı ve daha verimli bir şekilde alabilir. Bunun nedeni, bu sorgular için alaka düzeyinin gerekli olmamasıdır. Ayrıca Elasticsearch, aralık sorgularını da destekleyerek üst ve alt sınır (yani 0-5 age arası) arasında hızlı bir şekilde veri almayı mümkün kılar.

Elasticsearch Kullanarak DynamoDB Verilerinde Toplamalar

Toplamalar, verilerin iş zekası veya trend analizi için toplanıp bir özet biçiminde ifade edilmesidir. Örneğin uygulamanızın kullanım ölçümlerini gerçek zamanlı olarak göstermek isteyebilirsiniz.


DynamoDB toplu işlevleri desteklemez. AWS tarafından önerilen geçici çözüm, bir DynamoDB tablosundaki verilerin toplu görünümünü korumak için DynamoDB ve Lambda kullanmaktır.


Örnek olarak Twitter gibi bir sosyal medya sitesindeki beğenilerin toplanmasını kullanalım. tweet_ID birincil anahtar yapacağız ve ardından sıralama anahtarını, beğenileri topladığımız zaman penceresi yapacağız. Bu durumda, DynamoDB akışlarını etkinleştireceğiz ve bir Lambda işlevi ekleyeceğiz, böylece tweet'ler beğenildikçe (veya beğenilmedikçe) bir zaman damgasıyla like_count tablolaştırılacak (ör.: last_ updated ).



Bu senaryoda, DynamoDB akışları ve Lambda işlevleri, like_count'u tabloda bir öznitelik olarak tablolaştırmak için kullanılır.


Diğer bir seçenek ise toplamaları Elasticsearch gibi başka bir veritabanına aktarmaktır. Elasticsearch, özünde bir arama dizini olup, toplama işlevlerini desteklemek için ek uzantılara sahiptir. Bu uzantılardan biri, belge değerlerini sütun odaklı bir şekilde depolamak için dizin zamanında oluşturulmuş bir yapı olan doc value'dur . Yapı, varsayılan olarak belge değerlerini destekleyen alanlara uygulanır ve belge değerleriyle birlikte gelen bazı depolama şişkinlikleri vardır. Yalnızca DynamoDB verilerindeki toplamalar için desteğe ihtiyacınız varsa geniş veri kümeleri üzerindeki analitik sorgular için verileri verimli bir şekilde sıkıştırabilen bir veri ambarı kullanmak daha uygun maliyetli olabilir.


Elasticsearch'ün toplama çerçevesine üst düzey bir genel bakış:


  • Kova toplamaları : Paketlemeyi SQL veritabanları dünyasındaki GROUP BY benzer şekilde düşünebilirsiniz. Belgeleri alan değerlerine veya aralıklara göre gruplandırabilirsiniz. Elasticsearch paket toplamaları aynı zamanda birleştirme desteği eksikliğinin yaygın geçici çözümleri olan iç içe toplamayı ve üst-alt toplamayı da içerir.

  • Metrik toplamalar: Metrikler, bir dizi belge üzerinde SUM , COUNT , AVG , MIN , MAX vb. gibi hesaplamalar yapmanıza olanak tanır. Metrikler aynı zamanda bir paket toplamaya ilişkin değerleri hesaplamak için de kullanılabilir.

  • Boru hattı toplamaları : Boru hattı toplamalarına ilişkin girdiler, belgelerden ziyade diğer toplamalardır. Yaygın kullanımlar arasında ortalamalar ve bir metriğe dayalı sıralama yer alır.


Toplamaları kullanırken, özellikle de Elasticsearch'ü ölçeklendirirken performansla ilgili sonuçlar ortaya çıkabilir.

DynamoDB'de Arama, Toplama ve Birleştirmeler için Elasticsearch'e Alternatif

Elasticsearch, DynamoDB'den gelen veriler üzerinde karmaşık arama ve toplama işlemleri yapmak için bir çözüm olsa da, birçok sunucusuz destekçisi bu seçimle ilgili endişelerini dile getirdi. Mühendislik ekipleri DynamoDB'yi, sunucusuz olması ve çok az operasyonel ek yük ile uygun ölçekte kullanılabildiği için seçiyor. Kurulum kolaylığı, bakım, sorgu yeteneği ve gecikmeye ilişkin Athena, Spark ve Rockset dahil olmak üzere DynamoDB'deki analizlere yönelik diğer birkaç seçeneği başka bir blogda değerlendirdik.


Rockset, Elasticsearch'e bir alternatiftir ve Alex DeBrie, Rockset'te SQL kullanarak sorguların filtrelenmesi ve toplanması konusunda ayrıntılı bilgi vermiştir. Rockset , DynamoDB'ye yerleşik bir bağlayıcıya sahip, bulutta yerel bir veritabanıdır ve karmaşık birleştirmeleri içeren kullanım senaryoları da dahil olmak üzere analitik kullanım senaryolarını başlatmayı ve ölçeklendirmeyi kolaylaştırır. Rockset'i, Elasticsearch'e alternatif olarak 300 $ krediyle ücretsiz denememizde keşfedebilirsiniz.