আমার নিম্নলিখিত সমস্যা রয়েছে: আমার কাছে 2 মিলিয়নেরও বেশি রেকর্ডযুক্ত একটি ডাটাবেস রয়েছে have প্রতিটি রেকর্ডের স্ট্রিং ফিল্ড এক্স থাকে এবং আমি রেকর্ডের একটি তালিকা প্রদর্শন করতে চাই যার জন্য ক্ষেত্র এক্সের একটি নির্দিষ্ট স্ট্রিং রয়েছে। প্রতিটি রেকর্ডটি আকারে প্রায় 500 বাইট।
এটি আরও কংক্রিট করার জন্য: আমার আবেদনের জিইউআইতে আমার একটি পাঠ্য ক্ষেত্র রয়েছে যেখানে আমি একটি স্ট্রিং প্রবেশ করতে পারি। পাঠ্য ক্ষেত্রের উপরে আমার কাছে টেবিল রয়েছে (প্রথম এন, উদাহরণস্বরূপ 100) রেকর্ডগুলি যা পাঠ্য ক্ষেত্রে স্ট্রিংয়ের সাথে মেলে। আমি যখন পাঠ্য ক্ষেত্রে একটি অক্ষর টাইপ করি বা মুছি, তখন টেবিলের সামগ্রীটি ফ্লাইতে আপডেট করা উচিত।
আমি অবাক হই যে উপযুক্ত সূচক কাঠামো এবং / অথবা ক্যাশে ব্যবহার করে এটি করার কোনও কার্যকর উপায় আছে কিনা। উপরে বর্ণিত হিসাবে, আমি কেবল প্রথম এন আইটেমগুলি প্রদর্শন করতে চাই যা ক্যোয়ারির সাথে মেলে। অতএব, এন যথেষ্ট পরিমাণে ছোট, এটি ডাটাবেস থেকে ম্যাচিং আইটেমগুলি লোড করা কোনও বড় সমস্যা হওয়া উচিত নয়। এছাড়াও, প্রধান মেমরির আইটেমগুলি ক্যাচিং দ্রুত পুনরুদ্ধার করতে পারে।
আমি মনে করি যে প্যাটার্নের স্ট্রিংয়ের সাথে মিল রেখে কীভাবে মেলা আইটেমগুলি দ্রুত খুঁজে পাওয়া যায় সেটাই মুখ্য সমস্যা। আমি কি কিছু ডিবিএমএস সুবিধাগুলির উপর নির্ভর করতে পারি, বা আমাকে নিজের মধ্যে কিছু স্মৃতি সূচক তৈরি করতে হবে? কোন ধারনা?
সম্পাদনা
আমি প্রথম পরীক্ষা চালিয়েছি। আমি রেকর্ডগুলি বিভিন্ন পাঠ্য ফাইলগুলিতে বিভক্ত করেছি (প্রতি ফাইল প্রতি 200 টি রেকর্ড) এবং ফাইলগুলি বিভিন্ন ডিরেক্টরিতে রেখেছি (ডিরেক্টরি ট্রি নির্ধারণ করার জন্য আমি একটি ডেটা ফিল্ডের সামগ্রী ব্যবহার করেছি)। আমি প্রায় 40000 ডিরেক্টরিতে প্রায় 50000 ফাইল দিয়ে শেষ করি। আমি তখন ফাইলগুলি সূচী করতে Lucene চালিয়েছি। Lucene ডেমো প্রোগ্রামের সাথে একটি স্ট্রিং অনুসন্ধান করা খুব দ্রুত। বিভক্তকরণ এবং সূচকে কয়েক মিনিট সময় লেগেছে: এটি আমার পক্ষে সম্পূর্ণ গ্রহণযোগ্য কারণ এটি একটি স্থিতিশীল ডেটা সেট যা আমি জিজ্ঞাসা করতে চাই।
পরবর্তী পদক্ষেপটি হ'ল লুসিনকে মূল প্রোগ্রামে সংহত করা এবং লুসিনের ফিরে আসা হিটগুলি প্রাসঙ্গিক রেকর্ডগুলি মূল স্মৃতিতে লোড করতে ব্যবহার করা।