ডায়নামডাবে স্ক্যান এবং ক্যোয়ারীর মধ্যে পার্থক্য কী? স্ক্যান / কোয়েরি কখন ব্যবহার করবেন?


85

ডায়নামোডিবি ডকুমেন্টেশনে উল্লিখিত একটি ক্যোয়ারী অপারেশন:

একটি ক্যোয়ারী অপারেশন কেবলমাত্র প্রাথমিক কী বৈশিষ্ট্যযুক্ত মানগুলিকে অনুসন্ধান করে এবং অনুসন্ধান প্রক্রিয়াটিকে পরিমার্জন করতে মূল বৈশিষ্ট্যের মানগুলিতে তুলনা অপারেটরগুলির একটি উপসেটকে সমর্থন করে।

এবং স্ক্যান অপারেশন:

একটি স্ক্যান অপারেশন পুরো টেবিলটি স্ক্যান করে। সম্পূর্ণ স্ক্যানের পরে, আপনাকে ফিরে আসা মানগুলি পরিশোধিত করতে ফলাফলগুলিতে প্রয়োগ করতে আপনি ফিল্টারগুলি নির্দিষ্ট করতে পারেন।

পারফরম্যান্স এবং ব্যয় বিবেচনার ভিত্তিতে যা সেরা।

উত্তর:


55

ডায়নামডব টেবিল তৈরি করার সময় প্রাথমিক কী এবং স্থানীয় মাধ্যমিক সূচক (এলএসআই) নির্বাচন করুন যাতে একটি ক্যোয়ারী ক্রিয়াকলাপ আপনার পছন্দসই আইটেম ফেরত দেয়।

অনুসন্ধানের ক্রিয়াকলাপগুলি কেবল প্রাথমিক কী এর সমান অপারেটরের মূল্যায়নকে সমর্থন করে তবে শর্তযুক্ত (=, <, <=,>,> =, এর মধ্যে, শুরু) বাছাই করুন কীতে।

স্ক্যান অপারেশনগুলি সাধারণত ধীর এবং বেশি ব্যয়বহুল হয় কারণ আপনার টেবিলের প্রতিটি আইটেমটির মাধ্যমে অপারেশনটি আপনাকে অনুরোধ করছে এমন আইটেমগুলি পেতে পুনরায় পুনরুক্ত হতে হয়।

উদাহরণ:

Table: CustomerId, AccountType, Country, LastPurchase

Primary Key: CustomerId + AccountType

এই উদাহরণস্বরূপ, আপনি এটি পেতে ক্যোয়ারী অপারেশনটি ব্যবহার করতে পারেন:

  1. অ্যাকাউন্ট টাইপে শর্তসাপেক্ষ ফিল্টার সহ একটি গ্রাহকআইডি

ফিরে আসার জন্য একটি স্ক্যান অপারেশন ব্যবহার করা প্রয়োজন:

  1. একটি নির্দিষ্ট অ্যাকাউন্ট টাইপ সহ সমস্ত গ্রাহক
  2. দেশ দ্বারা শর্তসাপেক্ষ ফিল্টার উপর ভিত্তি করে আইটেম, মার্কিন যুক্তরাষ্ট্র থেকে সমস্ত গ্রাহক
  3. লাস্টপ্যাচেজে শর্তসাপেক্ষ ফিল্টারগুলির উপর ভিত্তি করে আইটেমগুলি, অর্থাৎ সমস্ত গ্রাহক যা গত মাসে কেনাকাটা করেছে

স্থানীয় মাধ্যমিক সূচক (এলএসআই) বা গ্লোবাল মাধ্যমিক সূচক (জিএসআই) তৈরি করে ঘন ঘন ব্যবহৃত অপারেশনগুলিতে স্ক্যান অপারেশনগুলি এড়াতে।

উদাহরণ:

Table: CustomerId, AccountType, Country, LastPurchase

Primary Key: CustomerId + AccountType
GSI: AccountType + CustomerId
LSI: CustomerId + LastPurchase

এই উদাহরণে একটি ক্যোয়ারী অপারেশন আপনাকে পেতে অনুমতি দিতে পারে:

  1. অ্যাকাউন্ট টাইপে শর্তসাপেক্ষ ফিল্টার সহ একটি গ্রাহকআইডি
  2. [জিএসআই] একটি নির্দিষ্ট অ্যাকাউন্ট টাইপের জন্য গ্রাহকআইডসে একটি শর্তসাপেক্ষ ফিল্টার
  3. [এলএসআই] লাস্টপ্যাচেজে শর্তসাপেক্ষ ফিল্টার সহ একটি গ্রাহকআইডি

4
যদি প্রাথমিক কী: গ্রাহকআইডি + অ্যাকাউন্ট টাইপ (আমি বুঝতে পারি যে গ্রাহকআইডিটি পার্টিশন কী, এবং অ্যাকাউন্ট টাইপটি বাছাই কী) আমি মনে করি আপনি কেবল গ্রাহকআইডি বা গ্রাহকআইডি + অ্যাকাউন্ট টাইপ দ্বারা একটি অনুসন্ধান অপারেশন চালাতে পারবেন। আপনি যদি কেবল অ্যাকাউন্টটাইপ দ্বারা অনুসন্ধান করেন তবে এটি স্ক্যান হবে
আদিল

4
ধন্যবাদ @ অ্যাডিল আপনি সঠিক, আমি এটি প্রতিফলিত করতে আমার উত্তর সম্পাদনা করেছি।
কিন্মান


34

আপনার যেমন ডায়নামডব টেবিল পার্টিশন কী / প্রাথমিক কী রয়েছে customer_country। আপনি যদি কোয়েরি ব্যবহার করেন customer_countryতবে ক্যোয়ারী অপারেশন করা বাধ্যতামূলক ক্ষেত্র। সমস্ত ফিল্টার কেবলমাত্র সম্পর্কিত আইটেম তৈরি করা যেতে পারে customer_country

আপনি যদি টেবিল স্ক্যান করেন তবে ফিল্টারটি সমস্ত পার্টিশন কী / প্রাথমিক কীতে সঞ্চালিত হবে। প্রথমে এটি সমস্ত ডেটা নিয়ে আসে এবং টেবিল থেকে আনার পরে ফিল্টার প্রয়োগ করে।

যেমন:

এখানে customer_countryহয় পার্টিশন কী / প্রাথমিক কী এবং idহয় sort_key

-----------------------------------

customer_country | name   | id

-----------------------------------
VV               | Tom    | 1

VV               | Jack   | 2

VV               | Mary   | 4

BB               | Nancy  | 5

BB               | Lom    | 6

BB               | XX     | 7

CC               | YY     | 8

CC               | ZZ     | 9

------------------------------------
  • আপনি যদি ক্যোয়ারী অপারেশন করেন তবে এটি কেবলমাত্র মানটিতে প্রযোজ্য customer_country। মানটি সমান অপারেটর (=) হওয়া উচিত।

  • সুতরাং কেবলমাত্র পার্টিশন কী / প্রাথমিক কী মানের সমান আইটেমগুলি এনেছে।

  • আপনি যদি স্ক্যান অপারেশন সম্পাদন করেন তবে এটি সেই টেবিলের সমস্ত আইটেম নিয়ে আসে এবং সেই ডেটা নেওয়ার পরে ডেটা ফিল্টার করে।

দ্রষ্টব্য: স্ক্যান অপারেশন করবেন না এটি আপনার আরসিইউ ছাড়িয়ে গেছে।


আপনি কি আপনার উত্তরের উত্স বলতে পারবেন?
অ্যালিকেলজিন-কিলাকা

4
@ অ্যালিকেলজিন-কিলাকা সূত্র: ডকস.ওএস.মাজোন.com
amazondynamodb

10

অনুসন্ধান স্ক্যানের চেয়ে পারফরম্যান্স ওয়াইসের চেয়ে অনেক ভাল। নাম হিসাবে বোঝা যায় স্ক্যান পুরো টেবিলটি স্ক্যান করবে। আপনি কোয়েরিটি ব্যবহার করতে পারেন তা জানতে আপনাকে অবশ্যই সারণী কী, বাছাই কী, সূচী এবং সম্পর্কিত সারণি সূচকগুলি সম্পর্কে ভালভাবে অবগত থাকতে হবে। আপনি যদি আপনার জিজ্ঞাসাটি ব্যবহার করে ফিল্টার করেন:

  • মূল
  • কী ও কী বাছাই করুন
  • সূচক
  • সূচক এবং এটি সম্পর্কিত বাছাই কী

ক্যোয়ারী ব্যবহার করুন! অন্যথায় স্ক্যান ব্যবহার করুন যা কোন কলামগুলি আপনি ফিল্টার করতে পারবেন সে সম্পর্কে আরও নমনীয়।

আপনি জিজ্ঞাসা করতে পারবেন না যদি:

  • ফিল্টারের আরও 2 টি ক্ষেত্র (যেমন কী, বাছাই এবং সূচি)
  • কেবল বাছাই করুন (প্রাথমিক কী বা সূচকের)
  • নিয়মিত ক্ষেত্র (কী, সূচক বা সাজান নয়)
  • মিশ্র সূচক এবং সাজান (সূচি 1 এর সূচক 2 সহ) \
  • ...

একটি ভাল ব্যাখ্যা: https://medium.com/@amos.shahar/dynamodb-query-vs-scan-sql-syntax-and-join-tables-part-1-371288a7cb8f


9

পারফরম্যান্সের ক্ষেত্রে, আমি মনে করি অ্যাপ্লিকেশনগুলির Queryপরিবর্তে আপনার টেবিলটি ডিজাইন করা ভাল অভ্যাস Scan। কারণ কোনও স্ক্যান অপারেশন সর্বদা পুরো টেবিলটি পছন্দসই মানগুলি ফিল্টার করার আগে স্ক্যান করে, যার অর্থ পড়ার, লেখার এবং মুছার মতো ডেটা অপারেশন প্রক্রিয়া করতে আরও সময় এবং স্থান লাগে space আরও তথ্যের জন্য দয়া করে অফিসিয়াল ডকুমেন্টটি দেখুন


7

এটি সম্পর্কিত সম্পর্কিত ডাটাবেসের মতোই।

শর্তে queryআপনি একটি প্রাথমিক কী ব্যবহার করছেন তা পান where, গণনা জটিলতা হ'ল log(n)সর্বাধিক মূল কাঠামো বাইনারি ট্রি।

scanক্যোয়ারির সময় আপনাকে পুরো টেবিলটি স্ক্যান করতে হবে তারপরে rowসঠিক ফলাফলটি খুঁজতে প্রতিটি এককটিতে ফিল্টার প্রয়োগ করুন । পারফরম্যান্স হয় O(n)। আপনার টেবিলটি বড় হলে এটি অনেক ধীর er

সংক্ষেপে, getআপনি যদি প্রাথমিক কী জানেন তবে ব্যবহার করার চেষ্টা করুন । শুধুমাত্র scanসবচেয়ে খারাপ ক্ষেত্রে।

এছাড়াও, পারফরম্যান্সের উদ্দেশ্য অর্জনের জন্য বিভিন্ন কীগুলিতে বিভিন্ন ধরণের প্রশ্নকে সমর্থন করার জন্য গ্লোবাল মাধ্যমিক সূচক সম্পর্কে ভাবুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.