Laravel query optimize for large database
ধরেন আপনার ডাটাবেসে ১ বিলিয়ন ইউনিক ডাটা (ইমেইল | ইউজার নেম ) আছে। প্রতিবার ডাটা ইন্সসার্ট করার সময় চেক করতে হয় ডুপ্লিকেট ইউজার নেম আছে কিনা।
যদি নরমাল ডাটাবেস কুয়েরি করেন সেটা খুবই আনিফিশিয়েন্ট এবং টাইম কন্সিউমিং হবে। আপনি বলতে পারেন ভাই আমি ক্যাশ ইউজ করবো ডিবিতে কুয়েরি করবোনা তাইলে তো টাইম কম লাগবে। হুম আপনি ক্যাশ ইউজ করতে পারেন যেটা ইন-মেমোরিতে ডাটা রাখবে। এখানে একটা প্রব্লেম আছে, ধরেন একজন ইউজার এর জন্য ১০ কেভি করে জায়গা নিচ্ছে মেমোরিতে। হিসাব করেন ১ বিলিয়ন ইউজারের জন্য কত জায়গা নিবে? ১ বিলিয়ন ইউজার না হয়ে ১০ বিলিয়ন ইউজার হলে কি হবে ?
কাশিং অথবা ডিবিতেও কুয়েরি না করে আমরা এই সমস্যা ( Bloom filter) ব্লুম ফিল্টার ডেটা স্ট্রাকচার (Data Structure) ব্যাবহার করে সল্ভ করতে পারি।
Bloom Filter একটি প্রোবাবিলিস্টিক (Data Structure) ডেটা স্ট্রাকচার, যেটা বলে দিতে পারে কোনো আইটেম (যেমন ইউজারনেম বা ইমেইল) একটি সেটে আছে কিনা।এটি সাধারণত hashing techniques ব্যবহার করে ডেটা সংরক্ষণ করে।Bloom Filter ডেটাবেস কুয়েরির চেয়ে অনেক দ্রুত কাজ করে। এটি (Hashing ) হ্যাশিং ব্যবহার করার কারণে ইন-মেমোরি অপারেশন মাইক্রোসেকেন্ডের মধ্যে শেষ হয়।
ব্লুমিং ফিল্টার (Data Structure) কিভাবে কাজ করে ,সেটা পরে বিস্তারিত আলোচনা করবো।
No comments