DynamoDB Filtre İfadeleri: Bilmeniz Gereken Her Şey

Dynamodb Filtre Ifadeleri Bilmeniz Gereken Her Sey



Filtre ifadeleri, SQL veritabanlarında yaygın olarak kullanılan WHERE yan tümceleri gibi No-SQL DynamoDB işlevinde kullanılır. Ancak, DynamoDB bir No-SQL veritabanı olduğundan, No-SQL veritabanlarının doğası ve yapısı nedeniyle filtre ifadeleri WHERE yan tümcelerinden oldukça farklı davranır.

Bu makale filtre ifadelerine odaklanmaktadır. Bu nedenle, filtre ifadelerini tanımlayıp, neden ve ne zaman uygulanabilir olduklarını açıklayacak ve ilgili örnekler üzerinden nasıl kullanılacağına dair adım adım bir kılavuz sunacağız.

Filtre İfadeleri Nedir?

Filtre ifadeleri, Sorgulama ve Tarama işlemleri sırasında DynamoDB'deki verileri filtrelemek için kullanılan popüler bir tekniktir. DynamoDB'de uygun veri modelleme ve düzenleme, filtrelemeye dayanır. Çoğu uygulamada her zaman tonlarca kayıtlı veri bulunurken, acilen büyük karmaşadan bir öğeye ihtiyacınız olabilir.







İhtiyacınız olduğunda doğru verileri alabilmeniz, veritabanınızın filtreleme özelliklerine bağlıdır ve filtre ifadelerinin yardımcı olduğu yer burasıdır. Geri kalan öğeleri atarken size döndürülmesini istediğiniz sonuçları sorgu öğesi içinde belirtirler.



Bir Sorgu işlemi tamamlandıktan sonra, ancak sunucu, Sorgu çağrınızın sonuçlarını geri getirmeden önce, sunucu tarafı filtrelerindeki filtre ifadelerini öğe özniteliklerine uygulayabilirsiniz. Bu, bir filtre ifadesi kullanıp kullanmadığınıza bakılmaksızın, Sorgunuzun hala aynı miktarda okuma kapasitesi kullandığı anlamına gelir.



Ayrıca, sıradan Sorgu işlemlerinde olduğu gibi, Sorgu işlemlerinde 1 MB veri sınırınız, filtre ifade işleminizin değerlendirilmesinden önce gerçekleşir. Bu işlemi, yükü azaltmak, belirli öğeleri aramak ve uygulama geliştirme sırasında basitliği ve okunabilirliği artırmak için kullanabilirsiniz.





Filtre İfade Sözdizimi ve Örnekler

Özellikle, hem filtre ifadeleri hem de anahtar ifadeler aynı sözdizimini kullanır. Ayrıca, filtre ifadeleri ve koşul ifadeleri aynı işlevleri, karşılaştırıcıları ve mantıksal işleçleri de kullanabilir.

İfadeleri filtreleyen diğer işleçler arasında CONTAINS işleci, OR işleci, eşit olmayan () İşleci, IN İşleci, BETWEEN işleci, BEGINS_WITH işleci, SIZE işleci ve EXISTS işleci sayılabilir.



Örnek 1: AWS CLI ve DynamoDB Birincil Anahtarlarını Kullanarak Sorgulama

Bu örnek, Müzik tablosunu belirli bir tür (bölüm anahtarı) ve belirli bir sanatçı (sıralama anahtarı) için sorgular. Yardımcı program, yalnızca en çok izlenen şarkılar için belirli bölüm anahtarı ve sıralama anahtarıyla eşleşen öğeler için bir sonuç getirir.

Komutta görüntüleme sayısını (#v) belirleyebilirsiniz. Örneğin, yalnızca 1000'den fazla izlenen şarkıların sonuçlarının geri geleceğini ima etmek için minimum sınırımızı 1.000 görüntüleme olarak etiketliyoruz.

$ aws dynamodb sorgusu \
--Tablo ismi müzik \
--key-koşul-ifadesi 'Tür = :fn ve Sanatçı = :sub' \
--filtre-ifadesi '#v >= :say(1000)' \
--ifade-öznitelik-adları '{'#v': 'Görüntülemeler'}' \
--ifade-öznitelik-değerleri dosya: // değerler.json

Örnek 2: AWS CLI'yi Koşul İfadesiyle Kullanma

Önceki örnekte olduğu gibi aynı Sorguyu yeniden yapılandırabiliriz, ancak şimdi filtrelerimizin yanında koşul anahtarlarıyla. Sıralama anahtarını içermez. Bunun yerine, belirtilen sanatçının 1.000'den fazla görüntülemeye sahip tüm kayıtlarını alır. Belirli bir kullanıcı adı (müşteri_kimliği) için belirli bir sayının üzerinde sipariş vermek üzere yeniden yapılandırılabilir.

$ aws dynamodb sorgusu \
--Tablo ismi müzik \
--key-koşul-ifadesi 'Kullanıcı adı = : kullanıcı adı' \
--filtre-ifadesi 'Miktar > :miktar' \
--ifade-öznitelik-değerleri '{
':username': { 'S': 'sanatçı' },
':miktar': { 'N': '1000' }
}'
\
$YEREL

Sonucun bir örneği şöyle görünür:

Verilen çizim, aynı sanatçının 56 şarkı adından yalnızca yedi şarkının 1.000'den fazla görüntülendiğini gösteriyor. Bununla birlikte, kısaltma amacıyla rakamı kısalttık ve listeye yalnızca ilk ve son sonuçları dahil ettik.

Örnek 3: Eşit Olmayan () İşleci ile Filtre İfadelerini Kullanma

Aşağıdaki Java yardımcı programında, “Movie X” e eşit olmayan tüm filmler için tablomuzu (Film Koleksiyonu) sorgulamak istiyoruz. Aşağıda gösterildiği gibi, ifade öznitelik değerinin (:ad) yanında özniteliği (#ad) olan bir filtre ifadesi kullandığınızdan emin olun:

sabit AWS = gerektir ( 'aws-sdk' ) ;
AWS.config.update ( { bölge: 'ab-batı-1' } ) ;
const dynamodb = yeni AWS.DynamoDB.DocumentClient ( ) ;

var parametreler = {
Tablo ismi: 'film koleksiyonu' ,
Anahtar Koşul İfadesi: '#PK = :PK' ,
Filtre İfadesi : '#ad  :ad' , ( filtre ifadesi )
ExpressionAttributeNames: { '#PK' : 'PK' , '#isim' : 'isim' } , ( koşul ifadesi )
ExpressionAttributeValues: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':isim' : 'X Filmi'
}
} ;

dinamodb.query ( parametreler, işlev ( hata, veri ) {
Eğer ( hata ) konsol.log ( hata ) ;
Başka konsol.log ( veri ) ;
} ) ;

Örnek 4: Tarama Operatörü ile Filtre İfadelerini Kullanma

Önceki komut, yalnızca Movie X adlı film adına eşit olmayan öğeleri getirmek için <> kullanırken, burada filtre ifadesiyle birlikte temel koşul ifadelerini kullandığınızdan emin olun. Bunun nedeni, bir anahtar koşul ifadesi kullanmadan Sorgu işlecindeki verileri filtrelemenin mümkün olmamasıdır.

var parametreler = {
Tablo ismi: 'film koleksiyonu' ,
Filtre İfadesi : 'PK = :PK ve #name  :name' ,
ExpressionAttributeNames: { '#isim' : 'isim' } ,
ExpressionAttributeValues: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':isim' : 'X Filmi'
}
} ;

dynamodb.scan ( parametreler, işlev ( hata, veri ) {
Eğer ( hata ) konsol.log ( hata ) ;
Başka konsol.log ( veri ) ;
} ) ;

Çözüm

Filtre ifadeleriyle ilgili DynamoDB eğitimimizin sonu budur. Bir dizi tercih edilen veriyi almak, bir tarama veya sorgudan sonra alınan verileri filtrelemek veya bir istemciye bir dizi veri döndürmek için filtre ifadelerini kullanabilirsiniz. Bir dizi araçla uygulanabilir olsa da, filtre ifadelerini kullanmanın uygun olmadığı durumlar vardır. Örneğin, bunları yalnızca uygun bir veri modeliniz varsa, bir birincil anahtar kullanırken ve büyük miktarda veriyi ayıklarken kullanabilirsiniz.