এই প্রশ্নটি আসলে আপনার ডেটা মডেলটিকে একের মধ্যে নিয়ে আসে এমন একগুচ্ছ বিষয়। আপনার একবারে একবারে সেগুলি বন্ধন করা শুরু করা উচিত। আপনি ধাঁধাটির প্রতিটি টুকরো সহজ করার চেষ্টা করার সাথে আরও প্রাকৃতিক, স্বজ্ঞাত সমাধানগুলি নেমে আসবে।
সমস্যা 1: আপনি ডিবি অর্ডারের উপর নির্ভর করতে পারবেন না
আপনার ডেটা বাছাই করার বিবরণগুলি পরিষ্কার নয়।
- সর্বাধিক সম্ভাব্য সমস্যাটি হ'ল আপনি কোনও
ORDER BY
ক্লজের মাধ্যমে আপনার ডাটাবেসে একটি স্পষ্ট বাছাই নির্দিষ্ট করছেন না । যদি আপনি এটি ব্যয়বহুল বলে মনে করেন না, তবে আপনার প্রোগ্রামটিতে একটি বাগ রয়েছে । ডাটাবেসগুলিকে কোনও আদেশে ফলাফল ফেরত দেওয়ার অনুমতি দেওয়া হয় যদি আপনি একটি নির্দিষ্ট করে না থাকেন; আপনি এর উপর নির্ভর করতে পারবেন না কাকতালীয়ভাবে ক্রমে ডেটা ফিরিয়ে দেওয়ার কারণে আপনি কয়েকবার ক্যোয়ারী চালিয়েছেন এবং এটি সেভাবে দেখায়। অর্ডার পরিবর্তন হতে পারে কারণ সারিগুলি ডিস্কে পুনরায় সাজানো হয়, বা কিছু মুছে ফেলা হয় এবং নতুন তাদের স্থান নেয় বা একটি সূচক যুক্ত হয়। আপনাকে অবশ্যইORDER BY
কোনও ধরণের একটি ধারা উল্লেখ করতে হবে । গতি নির্ভুলতা ছাড়া মূল্যহীন।
- সন্নিবেশ আদেশের বিষয়টি দ্বারা আপনি কী বোঝাতে চাইছেন তাও পরিষ্কার নয়। আপনি নিজেই ডাটাবেস সম্পর্কে কথা বলছেন, আপনি অবশ্যই একটি কলাম থাকতে হবে যা এটি সত্যই ট্র্যাক করবে এবং এটি অবশ্যই আপনার
ORDER BY
ধারাতে অন্তর্ভুক্ত করা উচিত । অন্যথায়, আপনি বাগ আছে। যদি এই জাতীয় কলামটি এখনও বিদ্যমান না থাকে, তবে আপনাকে একটি যুক্ত করতে হবে। এটির মতো কলামগুলির জন্য সাধারণ বিকল্পগুলি একটি সন্নিবেশ টাইমস্ট্যাম্প কলাম বা একটি স্বয়ং-বৃদ্ধিকরণ কী হবে। স্বতঃবৃদ্ধি কী আরও নির্ভরযোগ্য।
সমস্যা 2: মেমরি সাজানোর দক্ষ করে তোলা
একবার আপনি নিশ্চিত করুন যে এটি এর নিশ্চয়তা প্রকারের অর্ডার আশা, আপনি মেমরি করতে এই সত্য লিভারেজ করতে পারেন তথ্য ফেরার করা অনেক আরও দক্ষ। শুধু একটি বা যোগ করুনrow_number()
dense_rank()
আপনার প্রশ্নের ফলাফলের সেটটিতে কলাম (বা আপনার ডাটাবেসের সমতুল্য) যুক্ত করুন। এখন প্রতিটি সারিতে একটি সূচক রয়েছে যা আপনাকে অর্ডার হওয়ার কথা বলে এর সরাসরি ইঙ্গিত দেবে এবং আপনি এটিকে মেমরির সাথে তুচ্ছভাবে বাছাই করতে পারেন। কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি সূচকে একটি অর্থপূর্ণ নাম দিয়েছেন (যেমন sortedBySomethingIndex
)।
ভায়োলা। এখন আপনাকে আর ডাটাবেস ফলাফল সেট আদেশ উপর নির্ভর করতে হবে না।
সমস্যা 3: আপনি কি কোডে এই প্রক্রিয়াজাতকরণ করার প্রয়োজন?
এসকিউএল আসলেই শক্তিশালী। এটি একটি আশ্চর্যজনক ঘোষণামূলক ভাষা যা আপনাকে আপনার ডেটাতে প্রচুর রূপান্তর করতে এবং একত্রিত করতে দেয়। বেশিরভাগ ডিবি এমনকি আজকাল ক্রস সারির অপারেশনগুলিকে সমর্থন করে। তাদের উইন্ডো বা বিশ্লেষণমূলক ফাংশন বলা হয়:
আপনি এমনকি না প্রয়োজন ভালো মেমরিতে আপনার ডেটা টান কিভাবে? অথবা উইন্ডো ফাংশন ব্যবহার করে আপনি এসকিউএল কোয়েরিতে সমস্ত কাজ করতে পারেন? আপনি যদি ডিবিতে সমস্ত কাজ (বা সম্ভবত এমনকি একটি উল্লেখযোগ্য অংশ) করতে পারেন, দুর্দান্ত! আপনার কোড সমস্যা চলে যায় (বা অনেক সহজ হয়ে যায়)!
সমস্যা 4: আপনি এটি কি করছেন data
?
ধরে নিচ্ছি আপনি ডিবিতে এটি সবই করতে পারবেন না, আমাকে এই সোজা করে দেওয়া যাক। আপনি মানচিত্র হিসাবে ডেটা নিচ্ছেন (যা আপনি সাজানোর জন্য চান না এমন জিনিস দ্বারা কীড করা হয়), তারপরে আপনি এটি সন্নিবেশ ক্রমে পুনরাবৃত্তি করছেন এবং কিছু কীগুলির মান প্রতিস্থাপন করে এবং মানচিত্রটি পরিবর্তিত করে সংযোজন করে যোগ করছেন নতুন একটি?
আমি দুঃখিত, কিন্তু হেক কি?
কলকারীদের এই সমস্ত সম্পর্কে চিন্তা করা উচিত নয় । আপনার তৈরি করা সিস্টেমটি অত্যন্ত নাজুক। কিছুটা ভুল পরিবর্তন করার জন্য এটি কেবল একটি বোবা ভুল করতে পারে (এমনকি নিজের দ্বারা তৈরিও করা হয়েছে, যেমন আমরা সবাই করেছি) এবং পুরো জিনিসটি কার্ডের ডেকের মতো ধসে যায়।
এখানে সম্ভবত আরও ভাল ধারণা:
- আপনার ফাংশন একটি গ্রহণ করতে
List
।
- অর্ডার করার সমস্যাটি আপনি পরিচালনা করতে পারেন এমন কয়েকটি উপায় রয়েছে।
- ব্যর্থ দ্রুত প্রয়োগ করুন। তালিকার ক্রমটি ক্রমের প্রয়োজন অনুসারে না থাকলে একটি ত্রুটি নিক্ষেপ করুন। (দ্রষ্টব্য: আপনি সমস্যা 2 থেকে বাছাই সূচকটি এটি কিনা তা জানাতে পারেন))
- নিজেকে বাছাই করা অনুলিপি তৈরি করুন (আবার সমস্যা 2 থেকে সূচকটি ব্যবহার করুন)।
- যাতে মানচিত্রটি নিজেই ক্রমানুসারে তৈরি করার উপায় খুঁজে বের করুন।
- অভ্যন্তরীণভাবে ফাংশনে আপনার প্রয়োজনীয় মানচিত্রটি তৈরি করুন, যাতে কলারটিকে এটির যত্ন নেওয়ার দরকার নেই।
- আপনার কাছে অর্ডার উপস্থাপনায় যাই হোক না কেন তার পুনরাবৃত্তি করুন এবং আপনার যা করতে হবে তা করুন।
- মানচিত্রটি ফিরিয়ে দিন, বা এটিকে একটি উপযুক্ত ফেরতের মান হিসাবে রূপান্তর করুন
বাছাই করা উপস্থাপনা তৈরি করা এবং তারপরে সূচকের কী মানচিত্র তৈরি করা সম্ভব সম্ভাব্য প্রকরণ হতে পারে । দুর্ঘটনাক্রমে সদৃশগুলি তৈরি না করেই এটি আপনাকে আপনার সাজানো অনুলিপিটি জায়গায় জায়গায় পরিবর্তন করতে দেবে।
বা হতে পারে এটি আরও অর্থবোধ করে: data
প্যারামিটারটি থেকে মুক্তি পান এবং processData
আসলে তার নিজস্ব ডেটা আনুন fet তারপরে আপনি নথিটি তৈরি করতে পারেন যে আপনি এটি করছেন কারণ এতে ডেটা আনার পথে খুব নির্দিষ্ট প্রয়োজনীয়তা রয়েছে। অন্য কথায়, ফাংশনটি নিজস্ব করুন কেবলমাত্র এক টুকরো নয়, পুরো প্রক্রিয়াটির করুন; আন্ত-নির্ভরতা খুব যুক্তিযুক্ত যুক্তিটিকে ছোট অংশগুলিতে বিভক্ত করতে। (প্রক্রিয়াটির ফাংশনের নাম পরিবর্তন করুন))
সম্ভবত এটি আপনার পরিস্থিতির জন্য কাজ করবে না। আমি সমস্যার পুরো বিবরণ ছাড়া জানি না। আমি যখন শুনি তবে আমি একটি নাজুক এবং বিভ্রান্তিকর নকশা জানি।
সারাংশ
আমি মনে করি যে এখানে সমস্যাটি শেষ পর্যন্ত শয়তানটি বিশদে রয়েছে। আমি যখন এইরকম সমস্যায় পড়তে শুরু করি তখন এটি সাধারণত কারণ আমি যে সমস্যার সমাধান করতে চাইছি তার জন্য আমার ডেটাগুলির অনুপযুক্ত উপস্থাপনা রয়েছে । সর্বোত্তম সমাধানটি একটি আরও ভাল উপস্থাপনা খুঁজে পাওয়া যায় এবং তারপরে আমার সমস্যাটি সমাধান করা সহজ (সম্ভবত সহজ নয়, তবে সহজ))
এই পয়েন্টটি পেয়ে এমন কাউকে খুঁজুন: আপনার কাজ হ'ল আপনার সমস্যা হ'ল সাধারণ, সোজাসাপ্টা সেটগুলিতে সেটাকে কমিয়ে আনা। তারপরে আপনি দৃust়, স্বজ্ঞাত কোড তৈরি করতে পারেন। তাদের সাথে কথা বল. ভাল কোড এবং ভাল ডিজাইন আপনাকে মনে করে যে কোনও নির্বোধ তাদের ভাবতে পারে, কারণ তারা সহজ এবং সোজা। হতে পারে এমন একজন প্রবীণ বিকাশকারী যার সেই মানসিকতা রয়েছে যার সাথে আপনি কথা বলতে পারেন।