डायनमोडीबी - स्कैन
स्कैन ऑपरेशंस सभी टेबल आइटम या सेकेंडरी इंडेक्स पढ़ते हैं। इसके डिफ़ॉल्ट फ़ंक्शन के परिणामस्वरूप किसी इंडेक्स या टेबल के भीतर सभी आइटम्स की सभी डेटा विशेषताएँ वापस आ जाती हैं। को रोजगार देंProjectionExpression फ़िल्टरिंग विशेषताओं में पैरामीटर।
कोई भी मैच नहीं मिलने पर भी हर स्कैन एक परिणाम सेट देता है, जिसके परिणामस्वरूप एक खाली सेट होता है। स्कैन डेटा को फ़िल्टर करने के विकल्प के साथ स्कैन 1 एमबी से अधिक नहीं लेते हैं।
Note - स्कैन के पैरामीटर और फ़िल्टरिंग भी क्वेरी पर लागू होते हैं।
स्कैन ऑपरेशन के प्रकार
Filtering- स्कैन ऑपरेशन फ़िल्टर एक्सप्रेशंस के माध्यम से ठीक फ़िल्टरिंग प्रदान करते हैं, जो स्कैन, या प्रश्नों के बाद डेटा को संशोधित करते हैं; परिणाम लौटने से पहले। अभिव्यक्ति तुलना ऑपरेटरों का उपयोग करते हैं। उनके सिंटैक्स प्रमुख विशेषताओं के अपवाद के साथ स्थिति के भावों से मिलते-जुलते हैं, जो फ़िल्टर अभिव्यक्तियों को अनुमति नहीं देते हैं। आप किसी फ़िल्टर एक्सप्रेशन में पार्टीशन या सॉर्ट कुंजी का उपयोग नहीं कर सकते।
Note - 1 एमबी सीमा फ़िल्टरिंग के किसी भी आवेदन से पहले लागू होती है।
Throughput Specifications- स्कैन, थ्रूपुट का उपभोग करते हैं, हालांकि, खपत लौटे डेटा के बजाय आइटम के आकार पर केंद्रित है। खपत वही रहती है चाहे आप प्रत्येक विशेषता या केवल कुछ का अनुरोध करते हैं, और फ़िल्टर अभिव्यक्ति का उपयोग करना या नहीं करना भी खपत को प्रभावित नहीं करता है।
Pagination- डायनेमोडीबी परिणामों के विशिष्ट पृष्ठों में विभाजन का कारण बनता है। 1MB सीमा लौटे परिणामों पर लागू होती है, और जब आप इसे पार करते हैं, तो बाकी डेटा इकट्ठा करने के लिए एक और स्कैन आवश्यक हो जाता है। LastEvaluatedKeyमान आपको बाद में स्कैन करने की अनुमति देता है। बस मान को लागू करेंExclusiveStartkey। जबLastEvaluatedKeyमान शून्य हो जाता है, ऑपरेशन ने डेटा के सभी पृष्ठ पूरे कर लिए हैं। हालांकि, एक गैर-शून्य मान का मतलब यह नहीं है कि अधिक डेटा शेष है। केवल एक शून्य मान स्थिति को इंगित करता है।
The Limit Parameter- सीमा पैरामीटर परिणाम आकार का प्रबंधन करता है। डायनामो डीबी डेटा वापस करने से पहले संसाधित करने के लिए वस्तुओं की संख्या को स्थापित करने के लिए इसका उपयोग करता है, और दायरे से बाहर काम नहीं करता है। यदि आप x का मान सेट करते हैं, तो DynamoDB पहला x मिलान आइटम लौटाता है।
LastEvalittedKey मान आंशिक परिणाम देने वाले सीमा मापदंडों के मामलों में भी लागू होता है। इसका उपयोग स्कैन पूरा करने के लिए करें।
Result Count - प्रश्नों और स्कैन के जवाबों से संबंधित जानकारी भी शामिल है ScannedCountऔर गणना करें, जो स्कैन की गई / queried वस्तुओं को निर्धारित करती है और लौटाई गई वस्तुओं की मात्रा निर्धारित करती है। यदि आप फ़िल्टर नहीं करते हैं, तो उनके मूल्य समान हैं। जब आप 1 एमबी से अधिक हो जाते हैं, तो गणना केवल संसाधित किए गए भाग का प्रतिनिधित्व करती है।
Consistency- क्वेरी परिणाम और स्कैन के परिणाम अंततः सुसंगत रूप से पढ़े जाते हैं, हालांकि, आप दृढ़ता से सुसंगत रूप से भी पढ़ सकते हैं। उपयोगConsistentRead इस सेटिंग को बदलने के लिए पैरामीटर।
Note - लगातार पढ़ी गई सेटिंग्स प्रभाव क्षमता का दोगुना उपयोग करके तब प्रभाव डालती हैं, जब दृढ़ता से संगत होती हैं।
Performance- पूर्ण तालिका या द्वितीयक सूचकांक क्रॉलिंग स्कैन के कारण क्वेरी स्कैन की तुलना में बेहतर प्रदर्शन प्रदान करती हैं, जिसके परिणामस्वरूप सुस्त प्रतिक्रिया और भारी थ्रूपुट की खपत होती है। स्कैन छोटी तालिकाओं के लिए सबसे अच्छा काम करता है और कम फिल्टर के साथ खोज करता है, हालांकि, आप कुछ सर्वोत्तम प्रथाओं जैसे कि अचानक से बचने, त्वरित गतिविधि पढ़ने और समानांतर स्कैन का दोहन करके दुबला स्कैन डिजाइन कर सकते हैं।
किसी क्वेरी में दी गई स्थिति को संतुष्ट करने वाली कुंजियों की एक निश्चित श्रृंखला मिलती है, प्रदर्शन के साथ-साथ यह डेटा की मात्रा द्वारा निर्धारित होता है जो कुंजी की मात्रा के बजाय पुनर्प्राप्त करता है। ऑपरेशन के मापदंडों और मैचों की संख्या विशेष रूप से प्रदर्शन को प्रभावित करती है।
समानांतर स्कैन
स्कैन ऑपरेशन डिफ़ॉल्ट रूप से क्रमिक रूप से प्रसंस्करण करते हैं। फिर वे 1MB भागों में डेटा लौटाते हैं, जो अगले हिस्से को लाने के लिए एप्लिकेशन को संकेत देता है। इसके परिणामस्वरूप बड़ी तालिकाओं और सूचकांकों के लिए लंबे स्कैन होते हैं।
इस विशेषता का यह भी मतलब है कि स्कैन हमेशा उपलब्ध थ्रूपुट का पूरी तरह से शोषण नहीं कर सकता है। डायनेमोबीडी कई विभाजनों में तालिका डेटा वितरित करता है; और स्कैन थ्रूपुट अपने एकल-विभाजन ऑपरेशन के कारण एकल विभाजन तक सीमित रहता है।
इस समस्या का एक समाधान तार्किक रूप से टेबल या इंडेक्स को खंडों में विभाजित करने से आता है। तब "कार्यकर्ता" समानांतर (समवर्ती) स्कैन खंडों। यह सेगमेंट के मापदंडों और का उपयोग करता हैTotalSegments कुछ श्रमिकों द्वारा स्कैन किए गए सेगमेंट को निर्दिष्ट करने और संसाधित किए गए सेगमेंट की कुल मात्रा निर्दिष्ट करने के लिए।
कार्यकर्ता संख्या
सबसे अच्छा अनुप्रयोग प्रदर्शन प्राप्त करने के लिए आपको कार्यकर्ता मानों (सेगमेंट पैरामीटर) के साथ प्रयोग करना चाहिए।
Note- श्रमिकों के बड़े सेट के साथ समानांतर स्कैन संभवतः सभी थ्रूपुट का उपभोग करके थ्रूपुट को प्रभावित करता है। इस समस्या को सीमा पैरामीटर के साथ प्रबंधित करें, जिसका उपयोग आप किसी भी कार्यकर्ता को सभी थ्रूपुट के उपभोग से रोकने के लिए कर सकते हैं।
निम्नलिखित एक गहरी स्कैन उदाहरण है।
Note- निम्न प्रोग्राम पहले से बनाए गए डेटा स्रोत को मान सकता है। निष्पादित करने का प्रयास करने से पहले, सहायक पुस्तकालयों का अधिग्रहण करें और आवश्यक डेटा स्रोत बनाएं (आवश्यक विशेषताओं के साथ तालिकाओं, या अन्य संदर्भित स्रोत)।
यह उदाहरण ग्रहण आईडीई, AWS क्रेडेंशियल फ़ाइल और AWS टूलकिट का उपयोग ग्रहण Ase Java प्रोजेक्ट के भीतर भी करता है।
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.ItemCollection;
import com.amazonaws.services.dynamodbv2.document.ScanOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
public class ScanOpSample {
static DynamoDB dynamoDB = new DynamoDB(
new AmazonDynamoDBClient(new ProfileCredentialsProvider()));
static String tableName = "ProductList";
public static void main(String[] args) throws Exception {
findProductsUnderOneHun(); //finds products under 100 dollars
}
private static void findProductsUnderOneHun() {
Table table = dynamoDB.getTable(tableName);
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":pr", 100);
ItemCollection<ScanOutcome> items = table.scan (
"Price < :pr", //FilterExpression
"ID, Nomenclature, ProductCategory, Price", //ProjectionExpression
null, //No ExpressionAttributeNames
expressionAttributeValues);
System.out.println("Scanned " + tableName + " to find items under $100.");
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toJSONPretty());
}
}
}