นิพจน์ตัวกรอง DynamoDB: ทุกสิ่งที่คุณต้องรู้

Niphcn Taw Krxng Dynamodb Thuk Sing Thi Khun Txng Ru



นิพจน์ตัวกรองใช้ในฟังก์ชัน No-SQL DynamoDB เช่นคำสั่ง WHERE ที่ใช้กันทั่วไปในฐานข้อมูล SQL อย่างไรก็ตาม เนื่องจาก DynamoDB เป็นฐานข้อมูล No-SQL นิพจน์ตัวกรองจึงทำงานค่อนข้างแตกต่างจากส่วนคำสั่ง WHERE เนื่องจากลักษณะและโครงสร้างของฐานข้อมูล No-SQL

บทความนี้มุ่งเน้นไปที่นิพจน์ตัวกรอง ดังนั้น เราจะกำหนดนิพจน์ตัวกรอง อธิบายว่าทำไมและเมื่อใดจึงเกี่ยวข้อง และให้คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีใช้ผ่านตัวอย่างที่เกี่ยวข้อง

นิพจน์ตัวกรองคืออะไร?

นิพจน์ตัวกรองเป็นเทคนิคยอดนิยมในการกรองข้อมูลใน DynamoDB ระหว่างการดำเนินการค้นหาและสแกน ใน DynamoDB การสร้างแบบจำลองข้อมูลและการจัดระเบียบที่เหมาะสมต้องอาศัยการกรอง แม้ว่าแอปพลิเคชันส่วนใหญ่จะมีข้อมูลที่บันทึกไว้มากมายอยู่เสมอ คุณอาจต้องการรายการจากความยุ่งเหยิงอย่างเร่งด่วน







ความสามารถของคุณในการดึงข้อมูลที่ถูกต้องเมื่อใดก็ตามที่คุณต้องการนั้นขึ้นอยู่กับความสามารถในการกรองของฐานข้อมูลของคุณ และนี่คือจุดที่นิพจน์ตัวกรองช่วยได้ พวกเขาระบุผลลัพธ์ภายในรายการเคียวรีที่คุณต้องการส่งคืนให้คุณขณะที่พวกเขาละทิ้งรายการที่เหลือ



คุณสามารถใช้นิพจน์ตัวกรองในตัวกรองฝั่งเซิร์ฟเวอร์ในแอตทริบิวต์ของรายการได้หลังจากการดำเนินการ Query เสร็จสิ้น แต่ก่อนที่เซิร์ฟเวอร์จะนำผลลัพธ์ของการเรียก Query ของคุณกลับมา ซึ่งหมายความว่า Query ของคุณยังคงใช้ความจุในการอ่านเท่าเดิม โดยไม่คำนึงว่าคุณจะใช้นิพจน์ตัวกรองหรือไม่



นอกจากนี้ เช่นเดียวกับการดำเนินการ Query ทั่วไป ขีดจำกัดข้อมูล 1 MB สำหรับการดำเนินการ Query จะเกิดขึ้นก่อนการประเมินการดำเนินการนิพจน์ตัวกรองของคุณ คุณสามารถใช้การดำเนินการนี้เพื่อลดเพย์โหลด ค้นหารายการเฉพาะ และปรับปรุงความเรียบง่ายและอ่านง่ายในระหว่างการพัฒนาแอปพลิเคชัน





กรองไวยากรณ์นิพจน์และตัวอย่าง

โดยเฉพาะอย่างยิ่ง นิพจน์ตัวกรองและนิพจน์คีย์ใช้ไวยากรณ์เดียวกัน นอกจากนี้ นิพจน์ตัวกรองและนิพจน์เงื่อนไขยังสามารถใช้ฟังก์ชัน ตัวเปรียบเทียบ และตัวดำเนินการเชิงตรรกะเดียวกันได้อีกด้วย

ตัวดำเนินการอื่นๆ ที่กรองนิพจน์สามารถใช้รวมถึงตัวดำเนินการ CONTAINS ตัวดำเนินการ OR ตัวดำเนินการไม่เท่ากับ () ตัวดำเนินการ IN ตัวดำเนินการ BETWEEN ตัวดำเนินการ BEGINS_WITH ตัวดำเนินการ SIZE และตัวดำเนินการ EXISTS



ตัวอย่างที่ 1: การสอบถามโดยใช้คีย์หลักของ AWS CLI และ DynamoDB

ตัวอย่างนี้ค้นหาตารางเพลงสำหรับประเภทเฉพาะ (คีย์พาร์ติชัน) และศิลปินเฉพาะ (คีย์การเรียงลำดับ) ยูทิลิตีนี้จะแสดงเฉพาะผลลัพธ์สำหรับรายการที่ตรงกับพาร์ติชันคีย์เฉพาะและคีย์การเรียงลำดับสำหรับเพลงที่มียอดวิวมากที่สุด

คุณสามารถระบุจำนวนการดู (#v) ในคำสั่ง ตัวอย่างเช่น เราติดแท็กขีดจำกัดขั้นต่ำไว้ที่ 1,000 วิว เพื่อแสดงเป็นนัยว่าเฉพาะเพลงที่มียอดวิวมากกว่า 1,000 ครั้งเท่านั้นที่จะกลับมา

แบบสอบถาม $ aws dynamodb \
--ตารางชื่อ ดนตรี \
--key-เงื่อนไขนิพจน์ 'ประเภท = :fn และ ศิลปิน = :sub' \
--ตัวกรองนิพจน์ '#v >= :num(1,000)' \
--expression-แอตทริบิวต์-ชื่อ '{'#v': 'มุมมอง'}' \
--expression-แอตทริบิวต์-ค่า ไฟล์: // ค่า json

ตัวอย่างที่ 2: การใช้ AWS CLI กับนิพจน์เงื่อนไข

เราสามารถปรับโครงสร้าง Query เดิมได้เหมือนในตัวอย่างที่แล้ว แต่ตอนนี้ใช้คีย์เงื่อนไขข้างตัวกรองของเรา ไม่รวมคีย์การเรียงลำดับ แต่จะดึงข้อมูลบันทึกทั้งหมดสำหรับศิลปินที่ระบุซึ่งมียอดดูมากกว่า 1,000 ครั้งแทน นอกจากนี้ยังสามารถสร้างใหม่เพื่อให้คำสั่งซื้อเหนือหมายเลขที่กำหนดสำหรับชื่อผู้ใช้เฉพาะ (customer_id)

แบบสอบถาม $ aws dynamodb \
--ตารางชื่อ ดนตรี \
--key-เงื่อนไขนิพจน์ 'ชื่อผู้ใช้ = :ชื่อผู้ใช้' \
--ตัวกรองนิพจน์ 'จำนวน > :จำนวน' \
--expression-แอตทริบิวต์-ค่า '{
':ชื่อผู้ใช้': { 'S': 'artist' },
':จำนวน': { 'N': '1000' }
}'
\
$ท้องถิ่น

ตัวอย่างของผลลัพธ์มีลักษณะดังนี้:

ภาพประกอบนี้แสดงให้เห็นว่าจาก 56 ชื่อเพลงของศิลปินคนเดียวกัน มีเพียง 7 เพลงเท่านั้นที่มียอดวิวมากกว่า 1,000 ครั้ง อย่างไรก็ตาม เราได้ตัดตัวเลขให้สั้นลงและรวมเฉพาะผลลัพธ์แรกและผลลัพธ์สุดท้ายในรายการ

ตัวอย่างที่ 3: การใช้นิพจน์ตัวกรองกับตัวดำเนินการ No-Equal ()

ในยูทิลิตี้ Java ต่อไปนี้ เราต้องการสอบถามตารางของเรา (คอลเลคชันภาพยนตร์) สำหรับภาพยนตร์ทั้งหมดที่ไม่เท่ากับ “ภาพยนตร์ X” ตรวจสอบว่าคุณใช้นิพจน์ตัวกรองที่มีแอตทริบิวต์ (#name) ข้างค่าแอตทริบิวต์ของนิพจน์ (:name) ดังที่แสดงต่อไปนี้:

Const AWS = ต้องการ ( 'aws-sdk' ) ;
AWS.config.update ( { ภูมิภาค: 'eu-west-1' } ) ;
const dynamodb = AWS.DynamoDB.DocumentClient ใหม่ ( ) ;

วาร์ พารามส์ = {
  ชื่อตาราง: 'คอลเลกชันภาพยนตร์' ,
การแสดงออกของเงื่อนไขคีย์: '#พีเค = :พีเค' ,
การแสดงออกของตัวกรอง: “#ชื่อ :ชื่อ” , ( การแสดงออกของตัวกรอง )
ExpressionAttributeName: { “#พีเค” : 'พีเค' , '#ชื่อ' : 'ชื่อ' } , ( การแสดงออกของเงื่อนไข )
ExpressionAttributeค่า: {
':พีเค' : 'อจฮฮรชส453HGD4Ht44' ,
':ชื่อ' : 'หนังเอ็กซ์'
}
} ;

dynamodb.query ( พารามิเตอร์ การทำงาน ( ผิดพลาดข้อมูล ) {
ถ้า ( ผิดพลาด ) คอนโซล.ล็อก ( ผิดพลาด ) ;
อื่น คอนโซล.ล็อก ( ข้อมูล ) ;
} ) ;

ตัวอย่างที่ 4: การใช้นิพจน์ตัวกรองกับตัวดำเนินการสแกน

ในขณะที่คำสั่งก่อนหน้านี้ใช้ <> เพื่อดึงเฉพาะรายการที่ไม่เท่ากับชื่อภาพยนตร์ที่ชื่อว่า Movie X ตรวจสอบให้แน่ใจว่าคุณใช้นิพจน์เงื่อนไขหลักที่นี่ร่วมกับนิพจน์ตัวกรอง เนื่องจากเป็นไปไม่ได้ที่จะกรองข้อมูลในตัวดำเนินการ Query โดยไม่ใช้นิพจน์เงื่อนไขหลัก

วาร์ พารามส์ = {
ชื่อตาราง: 'คอลเลกชันภาพยนตร์' ,
การแสดงออกของตัวกรอง: 'PK = :PK และ #ชื่อ :ชื่อ' ,
ExpressionAttributeName: { '#ชื่อ' : 'ชื่อ' } ,
ExpressionAttributeค่า: {
':พีเค' : 'อจฮฮรชส453HGD4Ht44' ,
':ชื่อ' : 'หนังเอ็กซ์'
}
} ;

dynamodb.scan ( พารามิเตอร์ การทำงาน ( ผิดพลาดข้อมูล ) {
ถ้า ( ผิดพลาด ) คอนโซล.ล็อก ( ผิดพลาด ) ;
อื่น คอนโซล.ล็อก ( ข้อมูล ) ;
} ) ;

บทสรุป

นั่นคือจุดสิ้นสุดของบทช่วยสอน DynamoDB เกี่ยวกับนิพจน์ตัวกรอง คุณสามารถใช้นิพจน์ตัวกรองเพื่อดึงชุดข้อมูลที่ต้องการ กรองข้อมูลที่ดึงมาหลังจากการสแกนหรือแบบสอบถาม หรือส่งคืนชุดข้อมูลไปยังไคลเอ็นต์ แม้ว่าจะใช้ได้กับอาร์เรย์ของเครื่องมือ แต่ก็มีบางกรณีที่ใช้นิพจน์ตัวกรองไม่ได้ผล ตัวอย่างเช่น คุณจะใช้ได้ก็ต่อเมื่อคุณมีโมเดลข้อมูลที่เหมาะสม เมื่อใช้คีย์หลัก และเมื่อแยกข้อมูลส่วนใหญ่