আমি এই দুটি মাধ্যমিক সূচক এবং তাদের মধ্যে পার্থক্য সম্পর্কে কৌতূহলী। এটি কেমন দেখাচ্ছে তা কল্পনা করা শক্ত। এবং আমি মনে করি, এটি কেবল আমার চেয়ে বেশি লোককে সহায়তা করবে।
আমি এই দুটি মাধ্যমিক সূচক এবং তাদের মধ্যে পার্থক্য সম্পর্কে কৌতূহলী। এটি কেমন দেখাচ্ছে তা কল্পনা করা শক্ত। এবং আমি মনে করি, এটি কেবল আমার চেয়ে বেশি লোককে সহায়তা করবে।
উত্তর:
স্থানীয় মাধ্যমিক সূচকগুলি এখনও মূল হ্যাশ কী-তে নির্ভর করে। আপনি যখন হ্যাশ + রেঞ্জের সাথে একটি সারণী সরবরাহ করেন তখন এলএসআই সম্পর্কে হ্যাশ + রেঞ্জ 1, হ্যাশ + রেঞ্জ 2 .. হ্যাশ + রেঞ্জ 6 হিসাবে ভাবেন। আপনি জিজ্ঞাসা করতে আরও 5 টি পরিসীমা বৈশিষ্ট্য পান। এছাড়াও, কেবলমাত্র একটি বিধানিত থ্রুপুট রয়েছে।
গ্লোবাল সেকেন্ডারি সূচকগুলি একটি নতুন দৃষ্টান্তকে সংজ্ঞায়িত করে - প্রতিটি সূচকে পৃথক হ্যাশ / রেঞ্জ কীগুলি।
এটি প্রতি টেবিলের জন্য একটি হ্যাশ কী ব্যবহার করে আসল ব্যবহার ভঙ্গ করে। এ কারণেই জিএসআই সংজ্ঞায়িত করার সময় আপনাকে প্রতি সূচক অনুযায়ী একটি বিধানিত থ্রুপুট যুক্ত করতে হবে এবং এর জন্য অর্থ প্রদান করতে হবে।
জিএসআই ঘোষণায় পার্থক্য সম্পর্কে আরও বিস্তারিত তথ্য পাওয়া যাবে
এখানে নথি থেকে আনুষ্ঠানিক সংজ্ঞা দেওয়া হল:
গ্লোবাল সেকেন্ডারি ইনডেক্স - হ্যাশ এবং রেঞ্জ কী সহ একটি সূচক যা টেবিলের থেকে পৃথক হতে পারে। একটি গ্লোবাল মাধ্যমিক সূচককে "গ্লোবাল" হিসাবে বিবেচনা করা হয় কারণ সূচকের প্রশ্নগুলি সমস্ত পার্টিশন জুড়ে একটি টেবিলের সমস্ত ডেটা বিস্তৃত করতে পারে।
স্থানীয় মাধ্যমিক সূচক - এমন একটি সূচক যা টেবিলে একই হ্যাশ কী, তবে একটি পৃথক রেঞ্জের কী। স্থানীয় গৌণ সূচকটি "স্থানীয়" এই অর্থে যে স্থানীয় গৌণ সূচকের প্রতিটি বিভাজনটি একটি টেবিল বিভাজনে স্ক্যাপ করা হয় যা একই হ্যাশ কী রয়েছে।
যাইহোক, পার্থক্যগুলি মূল সংজ্ঞাগুলির ক্ষেত্রে সম্ভাবনার বাইরে চলে যায়। সূচকগুলি বজায় রাখার জন্য ব্যয় এবং প্রচেষ্টাকে সরাসরি প্রভাবিত করবে এমন কয়েকটি গুরুত্বপূর্ণ বিষয়গুলি নীচে সন্ধান করুন:
স্থানীয় মাধ্যমিক সূচকগুলি টেবিল থেকে থ্রুপুট গ্রাস করে। আপনি যখন স্থানীয় সূচকের মাধ্যমে রেকর্ডগুলি জিজ্ঞাসা করেন, অপারেশনটি সারণী থেকে পঠন ক্ষমতা ইউনিট গ্রহণ করে। যখন আপনি একটি স্থানীয় সূচকযুক্ত টেবিলে একটি লিখন অপারেশন (তৈরি, আপডেট, মুছুন) সম্পাদন করেন, তখন দুটি রাইটিং অপারেশন থাকবে, একটি সূচকের জন্য টেবিলের জন্য অন্যটি। উভয় অপারেশন টেবিল থেকে লেখার ক্ষমতা ইউনিট গ্রাস করবে।
গ্লোবাল সেকেন্ডারি ইনডেক্সগুলির নিজস্ব বিধানিত থ্রুপুট রয়েছে, যখন আপনি সূচকটি জিজ্ঞাসা করবেন তখন অপারেশন সূচকটি থেকে পড়ার ক্ষমতা গ্রহণ করবে, যখন আপনি একটি বৈশ্বিক সূচকযুক্ত একটি সারণীতে একটি রাইটিং অপারেশন (তৈরি, আপডেট, মুছুন) সম্পাদন করবেন, সেখানে দুটি থাকবে অপারেশন লিখুন, সূচকের জন্য টেবিলের জন্য একটির জন্য।
* গ্লোবাল সেকেন্ডারি ইনডেক্সের জন্য বিধানিত থ্রুপুট সংজ্ঞায়িত করার সময়, নিশ্চিত হয়ে নিন যে আপনি নিম্নলিখিত প্রয়োজনীয়তার প্রতি বিশেষ মনোযোগ দিয়েছেন:
কোনও টেবিল রচনাকে সফল করার জন্য, সারণীর জন্য বিধানিত থ্রুপুট সেটিংস এবং এর সমস্ত গ্লোবাল মাধ্যমিক সূচকগুলিতে লেখার সামঞ্জস্য করার জন্য পর্যাপ্ত লেখার ক্ষমতা থাকতে হবে; অন্যথায়, টেবিলের লিখনটি থ্রটলড হবে।
স্থানীয় সেকেন্ডারি সূচকগুলি কেবল তখনই তৈরি করা যেতে পারে যখন আপনি টেবিলটি তৈরি করবেন, বিদ্যমান সারণিতে স্থানীয় গৌণ সূচক যুক্ত করার কোনও উপায় নেই, একবার আপনি সূচি তৈরি করলে আপনি এটি মুছতে পারবেন না।
আপনি টেবিলটি তৈরি করার সময় এবং বিদ্যমান টেবিলটিতে যুক্ত করার পরে গ্লোবাল সেকেন্ডারি সূচকগুলি তৈরি করা যেতে পারে, বিদ্যমান গ্লোবাল সেকেন্ডারি সূচক মুছে ফেলার অনুমতি রয়েছে।
স্থানীয় মাধ্যমিক সূচকগুলি শেষ বা দৃ strong় ধারাবাহিকতা সমর্থন করে, যদিও গ্লোবাল সেকেন্ডারি সূচক কেবল ইভেন্টের ধারাবাহিকতা সমর্থন করে।
স্থানীয় মাধ্যমিক সূচকগুলি সূচকগুলিতে প্রত্যাশিত নয় এমন বৈশিষ্ট্যগুলি পুনরুদ্ধার করতে দেয় (যদিও অতিরিক্ত ব্যয় সহ: কর্মক্ষমতা এবং গ্রাসকৃত ক্ষমতা ইউনিট)। গ্লোবাল সেকেন্ডারি ইনডেক্সের সাহায্যে আপনি কেবল সূচকে অনুমান করা বৈশিষ্ট্যগুলি পুনরুদ্ধার করতে পারেন।
গৌণ সূচকে সংজ্ঞায়িত কীগুলির স্বতন্ত্রতা সম্পর্কে বিশেষ বিবেচনা:
একটি স্থানীয় মাধ্যমিক সূচকগুলিতে, প্রদত্ত হ্যাশ কী মানটির জন্য পরিসরের মূল মানটি অনন্য হওয়ার দরকার নেই, একই জিনিসটি গ্লোবাল মাধ্যমিক সূচকগুলিতে প্রযোজ্য, মূল মানগুলি (হ্যাশ এবং ব্যাপ্তি) অনন্য হওয়ার দরকার নেই need
সূত্র: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html
এগুলি সূচকের দ্বারা সম্ভাব্য অনুসন্ধানগুলি:
কোনও সারণির হ্যাশ এবং ব্যাপ্তি সূচক: এগুলি অ্যামাজন এডাব্লুএস এসডিকে পূর্ববর্তী সংস্করণগুলির স্বাভাবিক সূচকগুলি।
গ্লোবাল এবং লোকাল ইনডেক্স: টেবিলের বিদ্যমান হ্যাশ এবং রেঞ্জ সূচকগুলি ছাড়াও এগুলি একটি 'টেবিলে' অতিরিক্ত 'সূচকগুলি তৈরি করা হয়। গ্লোবাল ইনডেক্স হ্যাশের মতোই। বিন্যাস সূচক পরিসীমা টেবিলের হ্যাশ সঙ্গে ব্যবহার সূচক আচরণ একভাবে। আপনার কোডে আপনার সত্তা মডেলটিতে, প্রাপ্তিটিকে অবশ্যই এইভাবে টীকায়িত করা উচিত:
বৈশ্বিক সূচকের জন্য:
@DynamoDBIndexHashKey(globalSecondaryIndexName = INDEX_GLOBAL_RANGE_US_TS)
@DynamoDBAttribute(attributeName = PROPERTY_USER)
public String getUser() {
return user;
}
গ্লোবাল সূচকের সাথে সম্পর্কিত পরিসীমা সূচকের জন্য:
@DynamoDBIndexRangeKey(globalSecondaryIndexName = INDEX_GLOBAL_RANGE_US_TS)
@DynamoDBAttribute(attributeName = PROPERTY_TIMESTAMP)
public String getTimestamp() {
return timestamp;
}
এছাড়াও, আপনি যদি কোনও গ্লোবাল সূচক দ্বারা কোনও সারণীটি পড়েন তবে এটি অবশ্যই একটি শেষ পঠনযোগ্য (নিয়মিত পড়তে হবে না):
queryExpression.setConsistentRead(false);
এটি দেওয়ার একটি উপায় হ'ল:
এলএসআই - "ফিল্টার" করতে বা ক্যোয়ারিকে সীমাবদ্ধ করার জন্য একাধিক ভিন্ন বৈশিষ্ট্য ব্যবহার করার সময় আপনাকে একটি একক হ্যাশ-কীতে কোয়েরি করতে দেয়।
জিএসআই - আপনাকে একটি টেবিলের একাধিক হ্যাশ-কীগুলিতে ক্যুরিগুলি সম্পাদনের অনুমতি দেয় তবে ফলস্বরূপ থ্রুপুটে অতিরিক্ত ব্যয় হয়।
টেবিলের ধরণের এবং আরও কীভাবে তারা কাজ করে তার আরও বিস্তৃত ভাঙ্গন:
কেবল হ্যাশ
আপনি সম্ভবত ইতিমধ্যে জানেন; ইতিমধ্যে উপস্থিত একটি হ্যাশ-কীতে লেখার জন্য হ্যাশ-কী নিজেই অনন্য হতে হবে যা বিদ্যমান ডেটাটিকে ওভাররাইট করে।
হ্যাশ + + বিন্যাস
একটি হ্যাশ-কী + রেঞ্জ-কী আপনাকে একাধিক হ্যাশ কী একইরকম রাখতে দেয়, যতক্ষণ না তাদের কাছে আলাদা রেঞ্জের কী থাকে। এই ক্ষেত্রে, আপনি যদি ইতিমধ্যে বিদ্যমান একটি হ্যাশ-কীতে লিখেন তবে ইতিমধ্যে সেই হ্যাশ-কী ব্যবহার না করে এমন একটি রেঞ্জ-কী ব্যবহার করেন, এটি একটি নতুন আইটেম তৈরি করে, অন্যদিকে যদি একই হ্যাশ + রেঞ্জ সংমিশ্রণযুক্ত কোনও আইটেম থাকে ইতিমধ্যে বিদ্যমান, এটি ম্যাচিং আইটেমটি ওভাররাইট করে।
এটি ভাববার আরেকটি উপায় হ'ল বিন্যাসযুক্ত ফাইলের মতো। আপনার ফর্ম্যাট (পরিসর) যতক্ষণ না আলাদা, ততক্ষণ একই ফোল্ডারে (টেবিল) একই নাম (হ্যাশ) সহ অন্য কোনও ফাইল থাকতে পারে। তেমনি, আপনার একই নামের একাধিক ফাইল থাকতে পারে যতক্ষণ না তাদের নাম আলাদা থাকে different
LSI
একটি এলএসআই মূলত হ্যাশ-কী + রেঞ্জ-কী হিসাবে সমান এবং আইটেমগুলি তৈরি করার সময় এটি একই নিয়মগুলি অনুসরণ করে, এ ছাড়া, আপনাকে অবশ্যই এলএসআইগুলির জন্য মান প্রদান করতে হবে; এগুলি খালি / নাল ছেড়ে দেওয়া যাবে না।
একটি এলএসআই বলতে "রেঞ্জ-কী 2" বলা সম্পূর্ণরূপে সঠিক নয় কারণ আপনার কাছে (আগের থেকে আমার ফাইল এবং ফর্ম্যাট সাদৃশ্যটি ব্যবহার করে) নামের একটি ফাইল থাকতে পারে না: file.format.lsi
এবং file.format.lsi2
। আপনি করতে পারেন, তবে, আছে file.format.lsi
এবং file.format2.lsi
বা file.format.lsi
এবং file2.format.lsi
।
মূলত, একটি এলএসআই হ'ল একটি "ফিল্টার-কী", আসল রেঞ্জ-কী নয়; আপনার বেস হ্যাশ এবং ব্যাপ্তির মান সংমিশ্রণটি এখনও অনন্য হওয়া উচিত যখন এলএসআই মানগুলি অনন্য হতে হবে না। এটিকে দেখার সহজ উপায় হতে পারে এলএসআইকে ফাইলগুলির মধ্যে ডেটা হিসাবে ভাবা। আপনি কোড লিখতে পারতেন যা "PROJECT101" নামে সমস্ত ফাইল সন্ধান করে তা নির্বিশেষে কোয়েরিতে fileFormat
কী অন্তর্ভুক্ত করা উচিত এবং কোনটি বাদ দেওয়া উচিত তা নির্ধারণ করার জন্য ভিতরে তথ্যটি পড়ে। এটি মূলত এলএসআই কীভাবে কাজ করে (কেবলমাত্র ফাইলের সামগ্রীগুলি পড়ার জন্য অতিরিক্ত ওভারহেড ছাড়াই) works
GSI
জিএসআইয়ের জন্য, আপনি প্রতিটি জিএসআইয়ের জন্য মূলত অন্য একটি টেবিল তৈরি করছেন, তবে তাদের মধ্যে ডেটা মিরর করে এমন একাধিক পৃথক টেবিল বজায় রাখার ঝামেলা ছাড়াই; এ কারণেই তারা বেশি থ্রুপুট ব্যয় করে।
সুতরাং একটি জিএসআইয়ের জন্য, আপনি fileName
আপনার বেস হ্যাশ-কী fileFormat
হিসাবে এবং আপনার বেস রেঞ্জ-কী হিসাবে উল্লেখ করতে পারেন । তারপরে আপনি একটি জিএসআই নির্দিষ্ট করতে পারেন যার একটি হ্যাশ-কী fileName2
এবং একটি রেঞ্জ-কী রয়েছে fileFormat2
। তারপরে আপনি LSI এর বিপরীতে যেখানে আপনি কেবল জিজ্ঞাসা করতে পারবেন তা পছন্দ করতে পারেন fileName
বা fileName2
আপনি যদি চান তা করতে পারেন fileName
।
প্রধান সুবিধাগুলি হ'ল আপনাকে কেবল 2 এর পরিবর্তে কেবল একটি টেবিল বজায় রাখতে হবে এবং যে কোনও সময় আপনি প্রাথমিক হ্যাশ / রেঞ্জ বা জিএসআই হ্যাশ / রেঞ্জ (গুলি) এর কাছে লিখলে অন্য (গুলি) স্বয়ংক্রিয়ভাবে আপডেট হবে, যাতে আপনি একাধিক-টেবিল সেটআপ সহ অন্যান্য টেবিল (গুলি) আপডেট করতে "ভুলে যেতে" পারবেন না। এছাড়াও, একটিকে আপডেট করার পরে এবং অন্যটি আপডেট করার আগে কোনও সংযোগ হারিয়ে যাওয়ার কোনও সম্ভাবনা নেই, যেমন মাল্টি-টেবিল সেটআপ রয়েছে।
অতিরিক্তভাবে, একটি জিএসআই বেস হ্যাশ / রেঞ্জের সংমিশ্রণটি "ওভারল্যাপ" করতে পারে। তাই আপনি যদি আপনার সাথে একটি টেবিল করতে চেয়েছিলেন fileName
এবং fileFormat
আপনার বেস হ্যাশ / বিন্যাস এবং filePriority
এবং fileName
আপনার GSI হিসাবে, আপনি যা করতে পারেন।
সবশেষে, একটি জিএসআই হ্যাশ + রেঞ্জ সংমিশ্রণটি অনন্য হতে হবে না, তবে বেস হ্যাশ + রেঞ্জের সমন্বয়টি অনন্য হতে হবে be এটি এমন একটি জিনিস যা দ্বৈত / বহু সারণী সেটআপ দিয়ে সম্ভব নয়, তবে জিএসআইয়ের সাথে। ফলস্বরূপ, আপডেট করার সময় আপনাকে বেস এবং জিএসআই হ্যাশ + রেঞ্জ উভয়ের জন্য মান সরবরাহ করতে হবে; এই মানগুলির কোনওটিই শূন্য / শূন্য হতে পারে না।
ব্যাখ্যা করার আরেকটি উপায়: এলএসআই আপনাকে একই হ্যাশ কী সহ আইটেমগুলিতে অতিরিক্ত অনুসন্ধান করতে সহায়তা করে। জিএসআই আপনাকে "সারণী জুড়ে" আইটেমগুলিতে অনুরূপ ক্যোয়ারী করতে সহায়তা করে। তাই খুব দরকারী।
আপনার যদি ব্যবহারকারীর প্রোফাইল সারণী থাকে: অনন্য-আইডি, নাম, ইমেল। এখানে যদি আপনার নাম, ইমেলের উপর সারণীটি জিজ্ঞাস্য করে তোলা দরকার - তবে তাদের একমাত্র উপায় হ'ল তাদের জিএসআই করা (এলএসআই অভ্যাস সহায়তা)
এই দস্তাবেজটি বেশ ভাল ব্যাখ্যা দেয়:
https://aws.amazon.com/blogs/aws/now-available-global-secondary-indexes-for-amazon-dynamodb/
আমি এই প্রশ্নে মন্তব্য করতে পারিনি, তবে লেখার এবং পড়ার পারফরম্যান্সের ক্ষেত্রে এটি আরও ভাল:
(টেবিলের সাথে স্থানীয় সূচী 100 টি পড়ুন এবং লেখার মাধ্যমে থ্রুপুট লিখুন) বা (50 এর পঠন / লেখার মাধ্যমে 50 এর পাঠ্য / লেখার থ্রুপুট সহ গ্লোবাল সূচক?)
আমার ব্যবহারের ক্ষেত্রে পৃথক পার্টিশন কী দরকার নেই, তাই প্রয়োজনীয় কার্যকারিতার জন্য স্থানীয় সূচি যথেষ্ট হওয়া উচিত।
ধারাবাহিক পাঠ্যের জন্য জিএসআই ব্যবহার করা যাবে না।
LSI গুলি ধারাবাহিক পাঠের জন্য ব্যবহার করা যেতে পারে তবে তারা মূল পার্টিশনের আকারটি 10GB এর মধ্যে সীমাবদ্ধ রাখবে। এছাড়াও এলএসআইগুলি কেবল সারণী তৈরিতে তৈরি করা যায়।