উচ্চ কার্ডিনালিটি কলামগুলিতে কেন ক্যাসান্ড্রা সূচক তৈরির বিরুদ্ধে সুপারিশ করে?


10

ক্যাসান্দ্রার ডকুমেন্টেশনে বলা হয়েছে,

এই পরিস্থিতিতে একটি সূচক ব্যবহার করবেন না:

  • উচ্চ কার্ডিনালিটি কলামগুলিতে কারণ আপনি অল্প সংখ্যক ফলাফলের জন্য রেকর্ডের একটি বিশাল পরিমাণের ক্যোয়ারী। নীচে একটি উচ্চ কার্ডিনালিটি কলাম সূচক ব্যবহার করে সমস্যাগুলি দেখুন।

এটি চলতে থাকে,

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

তবে সত্যই কখনই এই প্রশ্নের উত্তর দেয় না: কেন এটি অদক্ষ? "কোনও সূচকের ফর্ম হিসাবে ম্যানুয়ালি টেবিলটি বজায় রাখা" এর অর্থ কী তা আমার কোনও ধারণা নেই। তবে তারপরে এটি কিছুটা নিজেকে "এর সাথে স্ববিরোধী করে তোলে ... কোয়েরি ভলিউমটি মাঝারি হওয়া অবধি সুবিধার জন্য কোনও সূচক ব্যবহার করা কখনও কখনও সূক্ষ্ম কর্মক্ষমতা অনুযায়ী হয় ..."

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

তবে যদি আমার কাছে এমন একটি বাজিলিয়ান আইটেম রয়েছে যা - বিরল উপলক্ষে - একটি ভিন্ন তবে প্রায় অনন্য বৈশিষ্ট্যটি দেখানো দরকার ... এটি একটি উপযুক্ত ব্যবহার, তাই না?

¹Every? IDK যদি প্রতিলিপিটির অর্থ এটি 3 এর একটি প্রতিরূপ ফ্যাক্টরের জন্য ক্লাস্টারের 1/3 টি হিট করতে পারে?

উত্তর:


6

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

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

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

আশাকরি এটা সাহায্য করবে!


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

হ্যাঁ, একটি নিম্ন কার্ডিনালিটির কলাম একই পরিণতি ভোগ করবে। আমার চিন্তাভাবনাটি সেখানে কিছুটা অস্পষ্ট ছিল, আমি স্বীকার করি। আমি ধরেই নিয়েছিলাম যে একটি উচ্চ কার্ডিনালিটি সূচক উচ্চতর পরিবর্তনের হারের সম্ভাবনা বেশি (এভাবে ভুয়া ইতিবাচক / নেতিবাচক ফলাফলগুলি প্রদর্শিত হওয়ার সম্ভাবনা বেশি); এটি পরিবর্তনের হার (পটভূমির সূচক প্রক্রিয়াটির তুলনায়) যা সবচেয়ে প্রাসঙ্গিক, মূল নয় inal
কাস্টাগলিয়া

2

কিছু পরিভাষা: অভিভাবক সারণি হ'ল সারণি যার উপরে একটি সূচক তৈরি হয়। সেকেন্ডারি ইনডেক্স টেবিলটি এমন সারণি যা অন্য টেবিলে একটি সূচি বজায় রাখতে তৈরি করা হয়।

মাধ্যমিক সূচক টেবিলের ডেটা একই নোডে প্যারেন্ট টেবিলের ডেটা হিসাবে সংরক্ষণ করা হয়। ক্যাসান্দ্রা পার্টিশনকারী সূচি সারণীর ডেটা ভাগ করে না এবং বিতরণ করে না। সুতরাং আপনি যদি কোনও সূচক কলামে অনুসন্ধান করতে চান তবে সমস্ত নোডগুলি অনুসন্ধান করা হয়, কেবলমাত্র ডেটাযুক্ত রেপ্লিকা নোড নয়। (কো-অর্ডিনেটর নোড জানেন না যে ডেটা কোথায় রয়েছে) https://www.datastax.com/dev/blog/cassandra-native-secondary-index-DP-dive

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

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