হ্যাশ এবং ব্যাপ্তি প্রাথমিক কী কী?


219

রেঞ্জের প্রাথমিক কীটি এখানে কী তা আমি বুঝতে সক্ষম হই না -

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

এবং এটি কিভাবে কাজ করে?

"হ্যাশ অ্যাট্রিবিউটে আনর্ডার্ড হ্যাশ ইনডেক্স এবং রেঞ্জ অ্যাট্রিবিউটে একটি সাজানো রেঞ্জ ইনডেক্স" বলতে কী বোঝায়?

উত্তর:


571

" হ্যাশ এবং ব্যাপ্তি প্রাথমিক কী " এর অর্থ হ'ল ডায়নামোডিবির একটি একক সারিতে হ্যাশ এবং ব্যাপ্তি কী উভয় সমন্বয়ে গঠিত একটি অনন্য প্রাথমিক কী রয়েছে। একটি হ্যাশ কী দিয়ে উদাহরণস্বরূপ এক্স এবং পরিসীমা কী ওয়াই , আপনার প্রাথমিক কী কার্যকরভাবে হয় XY । একই হ্যাশ কীটির জন্য আপনার একাধিক রেঞ্জ কী থাকতে পারে তবে XZ এবং XA এর মতো সংমিশ্রণটি অবশ্যই অনন্য হতে হবে । আসুন প্রতিটি ধরণের টেবিলের জন্য তাদের উদাহরণগুলি ব্যবহার করুন:

হ্যাশ প্রাথমিক কী - প্রাথমিক কীটি একটি বৈশিষ্ট্য, একটি হ্যাশ বৈশিষ্ট্য দ্বারা তৈরি made উদাহরণস্বরূপ, কোনও প্রোডাক্টগ্ল্যাজ টেবিলের প্রোডাক্টআইডি এটির প্রাথমিক কী হিসাবে থাকতে পারে। ডায়নামোডিবি এই প্রাথমিক কী অ্যাট্রিবিউটে একটি আনঅর্ডারার্ড হ্যাশ সূচক তৈরি করে।

এর অর্থ হ'ল প্রতিটি সারিতে এই মানটি বন্ধ করে দেওয়া হয়। ডায়নামোডিবিতে প্রতিটি সারির এই বৈশিষ্ট্যের জন্য প্রয়োজনীয়, অনন্য মান থাকবে । আনর্ডার্ড হ্যাশ সূচকটির অর্থ যা বলা হয় - ডেটা অর্ডার করা হয় না এবং কীভাবে ডেটা সংরক্ষণ করা হয় তার কোনও গ্যারান্টি দেওয়া হয় না। আপনি আনর্ডারড ইনডেক্সে কোয়েরি করতে সক্ষম হবেন না যেমন এক্স এর চেয়ে বেশি প্রোডাক্ট আইডি থাকা সমস্ত সারি আমাকে পান । আপনি হ্যাশ কী-এর উপর ভিত্তি করে আইটেম লিখুন এবং আনবেন। উদাহরণস্বরূপ, আমাকে সেই টেবিল থেকে সারিটি পান যা প্রোডাক্টআইডি এক্স রয়েছে । আপনি একটি আনর্ডারড ইনডেক্সের বিরুদ্ধে একটি কোয়েরি করছেন যাতে এর বিপরীতে আপনার পক্ষে মূলত মূল-মান অনুসন্ধান হয়, খুব দ্রুত হয় এবং খুব কম থ্রুপুট ব্যবহার করা হয়।


হ্যাশ এবং ব্যাপ্তি প্রাথমিক কী - প্রাথমিক কী দুটি বৈশিষ্ট্য দ্বারা তৈরি। প্রথম অ্যাট্রিবিউট হ্যাশ অ্যাট্রিবিউট এবং দ্বিতীয় বৈশিষ্ট্যটি হ'ল পরিসর বৈশিষ্ট্য। উদাহরণস্বরূপ, ফোরামের থ্রেড টেবিলটিতে ফোরামের নাম এবং সাবজেক্টটি এর প্রাথমিক কী হিসাবে থাকতে পারে, যেখানে ফোরামনাম হ্যাশ বৈশিষ্ট্য এবং বিষয়টি হ'ল পরিসীমা বৈশিষ্ট্য। ডায়নামোডিবি হ্যাশ অ্যাট্রিবিউটটিতে একটি সীমানাবিহীন হ্যাশ সূচক এবং পরিসীমা বৈশিষ্ট্যের উপর সাজানো রেঞ্জ সূচক তৈরি করে।

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

অনুসন্ধানের ফলাফলগুলি সর্বদা রেঞ্জ কী দ্বারা বাছাই করা হয়। যদি রেঞ্জ কীটির উপাত্তের ধরণ সংখ্যা হয় তবে ফলাফলগুলি সংখ্যায়িতভাবে ফিরে আসে; অন্যথায়, ফলাফলগুলি ASCII অক্ষর কোডের মান অনুসারে প্রত্যাবর্তিত হয়। ডিফল্টরূপে, সাজানোর ক্রমটি আরোহী is অর্ডারটি বিপরীত করতে, স্ক্যানইন্ডেক্স ফরওয়ার্ড প্যারামিটারটিকে মিথ্যাতে সেট করুন

আমি টাইপ করার সময় আমি সম্ভবত কিছু জিনিস মিস করেছি এবং আমি কেবল পৃষ্ঠটি আঁচড়েছি। আছে অনেক বেশি যখন DynamoDB টেবিল নিয়ে কাজ বিবেচনা করা দিক (থ্রুপুট, দৃঢ়তা, ক্ষমতা, অন্যান্য সূচকের, কী বন্টন, ইত্যাদি)। উদাহরণগুলির জন্য আপনার নমুনা সারণী এবং ডেটা পৃষ্ঠাটি একবার দেখে নেওয়া উচিত ।


53
এটি আমি সবচেয়ে পড়া স্ট্যাক ওভারফ্লো উত্তরগুলির মধ্যে একটি।
টমি

7
কেন কেবল হ্যাশ ছাড়াই ব্যাপ্তি ব্যবহারের বিকল্প নেই? উদাহরণস্বরূপ, যদি আমার সমস্ত ডেটা তাদের টাইমস্ট্যাম্পের সাথে প্রাথমিক কী হিসাবে সংরক্ষণ করা হয় তবে আমি "10/15/2015 তে 2 থেকে 4
অপরাহ্নের

3
@ টিফ্রস্টাস, হ্যাশ কীটি আইটেম (গুলি) ধারণ করে এমন পার্টিশন সনাক্ত করতে ব্যবহৃত হয়। এটি ব্যতীত ডায়নামোডিবি কোন বিভাজনটি দেখতে পাবে না where কোথা থেকে সন্ধান করা হবে তা কোয়েরিকে পরাস্ত করে না, এবং এটি কোনও স্ক্যানের জন্য ব্যবহারের ক্ষেত্রে (বা গ্লোবাল সেকেন্ডারি ইনডেক্স) তবে এটি আপনার সময় ব্যতীত অন্য কিছু ব্যবহারের ক্ষেত্রে উপযুক্ত নয় nothing ডেটা নির্বাচন করার জন্য সিরিজ)।
শেলডন

1
@ এমকোবিট কি কোনও উপায় আছে যা আমি স্ক্যান না করে পার্টিশন কী প্রদত্ত সমস্ত কী কী পুনরুদ্ধার করতে পারি?
অজানা

1
@ ভিএনআর আমি নিশ্চিত না যে ডায়নামোডিবি-র প্রসঙ্গে আমি আপনার প্রশ্নটি বুঝতে পেরেছি। আপনি কি হ্যাশ কী সরবরাহ করার সময় সমস্ত হ্যাশ + রেঞ্জ কীগুলি বলছেন?
এমকোবিট

19

পুরো জিনিসটি মিশ্রিত হওয়ার সাথে সাথে এটির কনসিসলি কী অর্থ তা অনুকরণ করার জন্য এটির কার্যকারিতা এবং কোডটি দেখুন

শুধুমাত্র একটি সারিতে পেতে পথ প্রাথমিক কী মারফত

getRow(pk: PrimaryKey): Row

প্রাথমিক কী ডেটা কাঠামো এটি হতে পারে:

// If you decide your primary key is just the partition key.
class PrimaryKey(partitionKey: String)

// and in thids case
getRow(somePartitionKey): Row

তবে আপনি সিদ্ধান্ত নিতে পারেন যে আপনার প্রাথমিক কীটি পার্টিশন কী + সাজানোর কী এই ক্ষেত্রে:

// if you decide your primary key is partition key + sort key
class PrimaryKey(partitionKey: String, sortKey: String)

getRow(partitionKey, sortKey): Row
getMultipleRows(partitionKey): Row[]

সুতরাং নীচের লাইন:

  1. সিদ্ধান্ত নিয়েছে যে আপনার প্রাথমিক কীটি কেবলমাত্র পার্টিশন কী? পার্টিশন কী দ্বারা একক সারি পান।

  2. সিদ্ধান্ত নিয়েছে যে আপনার প্রাথমিক কীটি পার্টিশন কী + বাছাই কী? ২.১ (পার্টিশন কী, বাছাই কী) দ্বারা একক সারি পান বা (পার্টিশন কী) দ্বারা সারিগুলির পরিসীমা পান

উভয় উপায়েই আপনি প্রাথমিক কী দ্বারা একটি একক সারি পাবেন কেবলমাত্র প্রশ্নটি যদি আপনি সেই প্রাথমিক কীটিকে কেবলমাত্র পার্টিশন কী বা পার্টিশন কী + বাছাই কী হিসাবে নির্ধারণ করেন

বিল্ডিং ব্লকগুলি হ'ল:

  1. টেবিল
  2. পদ
  3. কেভি অ্যাট্রিবিউট।

আইটেমটিকে একটি সারি হিসাবে এবং কেভি অ্যাট্রিবিউটকে সেই সারির কক্ষ হিসাবে ভাবেন।

  1. আপনি প্রাথমিক কী দ্বারা একটি আইটেম (একটি সারি) পেতে পারেন।
  2. আপনি নির্দিষ্ট করে (একাধিক সারি) একাধিক আইটেম (একাধিক সারি) পেতে পারেন (হ্যাশকি, রেঞ্জকিউকিউয়ারি)

আপনি (2) কেবল তখনই করতে পারেন যদি আপনি স্থির করেন যে আপনার পিকে (হ্যাশকি, সোর্টকি) গঠিত।

আরও জটিলভাবে এর জটিল হিসাবে, আমি যেভাবে দেখছি:

+----------------------------------------------------------------------------------+
|Table                                                                             |
|+------------------------------------------------------------------------------+  |
||Item                                                                          |  |
||+-----------+ +-----------+ +-----------+ +-----------+                       |  |
|||primaryKey | |kv attr    | |kv attr ...| |kv attr ...|                       |  |
||+-----------+ +-----------+ +-----------+ +-----------+                       |  |
|+------------------------------------------------------------------------------+  |
|+------------------------------------------------------------------------------+  |
||Item                                                                          |  |
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+         |  |
|||primaryKey | |kv attr    | |kv attr ...| |kv attr ...| |kv attr ...|         |  |
||+-----------+ +-----------+ +-----------+ +-----------+ +-----------+         |  |
|+------------------------------------------------------------------------------+  |
|                                                                                  |
+----------------------------------------------------------------------------------+

+----------------------------------------------------------------------------------+
|1. Always get item by PrimaryKey                                                  |
|2. PK is (Hash,RangeKey), great get MULTIPLE Items by Hash, filter/sort by range     |
|3. PK is HashKey: just get a SINGLE ITEM by hashKey                               |
|                                                      +--------------------------+|
|                                 +---------------+    |getByPK => getBy(1        ||
|                 +-----------+ +>|(HashKey,Range)|--->|hashKey, > < or startWith ||
|              +->|Composite  |-+ +---------------+    |of rangeKeys)             ||
|              |  +-----------+                        +--------------------------+|
|+-----------+ |                                                                   |
||PrimaryKey |-+                                                                   |
|+-----------+ |                                       +--------------------------+|
|              |  +-----------+   +---------------+    |getByPK => get by specific||
|              +->|HashType   |-->|get one item   |--->|hashKey                   ||
|                 +-----------+   +---------------+    |                          ||
|                                                      +--------------------------+|
+----------------------------------------------------------------------------------+

সুতরাং উপরে কি ঘটছে। নিম্নলিখিত পর্যবেক্ষণ লক্ষ্য করুন। যেমনটি আমরা বলেছিলাম যে আমাদের ডেটা (টেবিল, আইটেম, কেভিআট্রিবিউট) এর অন্তর্গত। তারপরে প্রতিটি আইটেমের একটি প্রাথমিক কী থাকে। এখন আপনি কীভাবে সেই প্রাথমিক কীটি রচনা করেছেন তা কীভাবে আপনি ডেটা অ্যাক্সেস করতে পারবেন তার অর্থপূর্ণ।

যদি আপনি স্থির করেন যে আপনার প্রাইমারি কে কেবল একটি হ্যাশ কী হয় তবে দুর্দান্ত আপনি এটি থেকে একটি আইটেম পেতে পারেন। তবে আপনি যদি স্থির করেন যে আপনার প্রাথমিক কী হ্যাশকি + সোর্টকি হয় তবে আপনি আপনার প্রাথমিক কীতেও একটি ব্যাপ্তি ক্যোয়ারী করতে পারেন কারণ আপনি আপনার আইটেমগুলি পেয়ে যাবেন (হ্যাশকি + সামোর্যাঞ্জ ফাংশন (রেঞ্জ কীটিতে))। সুতরাং আপনি আপনার প্রাথমিক কী ক্যোয়ারী সহ একাধিক আইটেম পেতে পারেন।

দ্রষ্টব্য: আমি গৌণ সূচকগুলি উল্লেখ করিনি।


4

একটি এমপ্লাইটি উত্তর ইতিমধ্যে @ এমকোবিট দ্বারা দেওয়া হয়েছে, তবে আমি রেঞ্জ কী এবং হ্যাশ কীটির একটি বড় ছবি যুক্ত করব।

একটি সাধারণ কথায় range + hash key = composite primary key ডায়নামডব এর কোর কম্পোনেন্টস এখানে চিত্র বর্ণনা লিখুন

একটি প্রাথমিক কী একটি হ্যাশ কী এবং একটি alচ্ছিক রেঞ্জ কী দ্বারা গঠিত। ডায়নামোডিবি পার্টিশন নির্বাচন করতে হ্যাশ কী ব্যবহার করা হয়। পার্টিশনগুলি টেবিলের তথ্যের অংশ। পার্টিশনের আইটেমগুলির উপস্থিতি উপস্থিত থাকলে সেগুলি সারণী করতে রেঞ্জ কীগুলি ব্যবহার করা হয়।

সুতরাং উভয়ের আলাদা উদ্দেশ্য রয়েছে এবং একসাথে জটিল জিজ্ঞাসা করতে সহায়তা করে। উপরের উদাহরণে hashkey1 can have multiple n-range.পরিসীমা এবং হ্যাশকিটির আরেকটি উদাহরণ গেম, ইউজারএ এনগেম (hashkey)খেলতে পারে(range)

এখানে চিত্র বর্ণনা লিখুন

সারণী, আইটেম এবং বৈশিষ্ট্যগুলিতে বর্ণিত সংগীত টেবিলটি একটি সমন্বিত প্রাথমিক কী (শিল্পী এবং গানের শিরোনাম) সহ একটি সারণীর উদাহরণ। আপনি যদি সেই আইটেমটির জন্য শিল্পী এবং গানের শিরোনামের মান সরবরাহ করেন তবে আপনি সরাসরি সংগীত টেবিলের যে কোনও আইটেম অ্যাক্সেস করতে পারবেন।

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

এখানে চিত্র বর্ণনা লিখুন

https://www.slideshare.net/InfoQ/amazon-dynamodb-design-patterns-best-practices https://www.slideshare.net/AmamaWebServices/awsome-day-2016-module-4-databases-amazon-dynamodb -আর-অ্যামাজন-আরডিএস https://ceyhunozgun.blogspot.com/2017/04/implementing-object-persistance-with-dynamodb.html


Musicটেবিলের সাথে উদাহরণের সাথে একজন শিল্পী একই শিরোনাম সহ দুটি গান তৈরি করতে পারে না, তবে অবাক করে দেয় - ভিডিও গেমসে আমাদের ১৯৯৩ সালের ডুম এবং একই সাথে "শিল্পী" দিয়ে ডায়েম করা হয়েছে en.wikedia.org/wiki/Doom_ ( ফ্র্যাঞ্চাইজি) ( ডেভেলপার): id Software
ভাইটালি জাদানেভিচ

0

@vnr আপনি পার্টশন কী ব্যবহার করে কোয়েরিটি ব্যবহার করে একটি পার্টিশন কী সম্পর্কিত সমস্ত বাছাই কী পুনরুদ্ধার করতে পারেন। স্ক্যানের দরকার নেই। এখানে বিন্দুটি একটি ক্যোয়ারিতে পার্টিশন কী বাধ্যতামূলক। বাছাই কী কেবলমাত্র ডেটার ব্যাপ্তি পেতে ব্যবহৃত হয়

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