কম্পিউটার টিউটোরিয়াল

MongoDB টিপস: পার্ট ১ - উন্নত ডেটাবেস ব্যবস্থাপনার জন্য অপরিহার্য কৌশল

মূলত Tricore দ্বারা প্রকাশিত: ২ আগস্ট, ২০১৭

MongoDB-এ শুরু করা সহজ হলেও, অ্যাপ্লিকেশন তৈরি করার সময় আরও জটিল সমস্যা উত্থান হয়। আপনি নিচের প্রশ্নগুলো নিয়ে চিন্তা করতে পারেন:

  • রিপ্লিকা সেটে একটি রিপ্লিকা সদস্যকে কীভাবে রি-সিঙ্ক করব?
  • ক্র্যাশের পর MongoDB কীভাবে রিকভার করব?
  • MongoDB-এর GridFS স্পেসিফিকেশন কখন ব্যবহার করব ফাইল সংরক্ষণ ও পুনরুদ্ধারের জন্য?
  • দূষিত ডেটা কীভাবে ফিক্স করব?

এই ব্লগ পোস্টে MongoDB ব্যবহার করার সময় এই পরিস্থিতিগুলো হ্যান্ডল করার জন্য কিছু টিপ শেয়ার করা হয়েছে।

টিপ ১: আপনার ডেটা রিকভার করতে repair কমান্ডের উপর নির্ভর করবেন না

যদি আপনার ডেটাবেস ক্র্যাশ করে এবং আপনি –journal ফ্ল্যাগ ছাড়া চালাচ্ছেন, তবে সেই সার্ভারের ডেটা ব্যবহার করবেন না।

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

টিপ ২: একটি রিপ্লিকা সেটের সদস্যকে রি-সিঙ্ক করুন

একটি রিপ্লিকা সেটের সদস্যকে রি-সিঙ্ক করতে, নিশ্চিত করুন যে কমপক্ষে একটি সেকেন্ডারি সদস্য এবং একটি প্রাইমারি সদস্য চালু আছে। তারপর নিশ্চিত করুন যে আপনি Oracle নামে ইউজার হিসেবে লগ ইন করেছেন এবং MongoDB সার্ভিস বন্ধ করুন।

MongoDB নামে ইউজার হিসেবে লগ ইন করুন এবং ব্যাকআপ ফোল্ডারের সব ডেটা ফাইল সরিয়ে দিন যাতে সমস্যা হলে সেগুলো রিস্টোর করা যায়। পুরনো ফাইল ব্যাকআপ ফোল্ডারে থাকলে সেগুলো মুছে দিন। আপনি যদি নিশ্চিত না হন ডেটা ফাইল কোথায় পাবেন, তবে /etc/mongod.conf ফাইলে দেখুন। Oracle ইউজার হিসেবে MongoDB সার্ভিস চালু করুন।

ডেটাবেসে লগ ইন করে যাচাই করুন। সদস্য রিপ্লিকা সেটে সিঙ্ক হওয়া পর্যন্ত ডেটাবেস অ্যাক্সেস করার জন্য আপনাকে অথেন্টিকেট করার দরকার নেই।

রিপ্লিকেশন প্রক্রিয়া সম্পূর্ণ হলে, স্ট্যাটাস STARTUP2 থেকে SECONDARY-এ পরিবর্তিত হবে।

টিপ ৩: ছোট বাইনারি ডেটার জন্য GridFS ব্যবহার করবেন না

MongoDB বড় ফাইল সংরক্ষণ ও পুনরুদ্ধারের জন্য GridFS স্পেসিফিকেশন ব্যবহার করে। মূলত GridFS বড় বাইনারি অবজেক্টগুলো ভাঙে এবং ডেটাবেসে সংরক্ষণ করে। GridFS-এর দুটি কোয়ারি লাগে: একটি ফাইলের মেটাডেটা ফেচ করার জন্য এবং অন্যটি এর কন্টেন্ট ফেচ করার জন্য। তাই যদি আপনি ছোট ফাইল সংরক্ষণের জন্য GridFS ব্যবহার করেন, তবে আপনার অ্যাপ্লিকেশনের কোয়ারি সংখ্যা দ্বিগুণ হয়ে যাবে।

MongoDB টিপস: পার্ট ১ - উন্নত ডেটাবেস ব্যবস্থাপনার জন্য অপরিহার্য কৌশল

সোর্স: https://www.slideshare.net

GridFS বড় ডেটা সংরক্ষণের জন্য ডিজাইন করা হয়েছে, অর্থাৎ এমন ডেটা যা একটি ডকুমেন্টে ফিট না করতে পারে। একটা থাম্ব রুল হিসেবে, যা ক্লায়েন্টে লোড করার জন্য খুব বড়, সেটা সম্ভবত সার্ভারে একসাথে লোড করার জন্য আপনি চাওবেন না। বিকল্প হচ্ছে স্ট্রিমিং। যা আপনি ক্লায়েন্টে স্ট্রিম করার পরিকল্পনা করছেন, সেটা GridFS-এর জন্য ভালো ক্যান্ডিডেট।

টিপ ৪: ডিস্ক অ্যাক্সেস কমিয়ে দিন

ডেভেলপাররা জানেন যে RAM থেকে ডেটা অ্যাক্সেস করা দ্রুত এবং ডিস্ক থেকে ডেটা অ্যাক্সেস করা ধীর।

আপনি হয়তো জানেন যে ডিস্ক অ্যাক্সেসের সংখ্যা কমানো একটি দুর্দান্ত অপ্টিমাইজেশন টেকনিক, কিন্তু কীভাবে করবেন সেটা জানতে পারেন না।

একটি উপায় হচ্ছে স olid-state drive (SSD) ব্যবহার করা। SSD অনেক কাজে ট্রাডিশনাল হার্ড ডিস্ক ড্রাইভ (HDD) চেয়ে অনেক দ্রুত পারফর্ম করে। এছাড়া MongoDB-এর সাথে খুব ভালো কাজ করে। অন্যদিকে, এগুলো প্রায়শই ছোট এবং ব্যয়বহুল।

নিচের ছবিতে SSD এবং HDD-এর তুলনা দেখানো হয়েছে।

MongoDB টিপস: পার্ট ১ - উন্নত ডেটাবেস ব্যবস্থাপনার জন্য অপরিহার্য কৌশল

সোর্স: https://www.serverintellect.com

ডিস্ক অ্যাক্সেস কমানোর অন্য উপায় হচ্ছে আরও RAM যোগ করা। তবে এই পদ্ধতি একটি সীমা পর্যন্তই কাজ করবে, কারণ শেষে আপনার RAM আপনার ডেটার আকার ধারণ করতে পারবে না।

প্রশ্ন হচ্ছে, কিভাবে টেরাবাইট বা পেটাবাইট ডেটা ডিস্কে সংরক্ষণ করব, এমন একটি অ্যাপ্লিকেশন প্রোগ্রাম করব যা অধিকাংশ সময় কম অনুরোধ করা ডেটা মেমরিতে অ্যাক্সেস করবে, এবং ডিস্ক থেকে মেমরিতে ডেটা যতটা কম হলেও সরানো যাবে?

যদি আপনি আপনার সব ডেটা রিয়েল টাইমে র‍্যান্ডমলি অ্যাক্সেস করেন, তো উত্তর হচ্ছে আপনার অনেক RAM লাগবে। কিন্তু অধিকাংশ অ্যাপ্লিকেশন এইভাবে কাজ করে না। সাম্প্রতিক ডেটা পুরনো ডেটার চেয়ে বেশি অ্যাক্সেস করা হয়, কিছু ইউজার অন্যদের চেয়ে বেশি সক্রিয়, এবং কিছু অঞ্চলে অন্যদের চেয়ে বেশি কাস্টমার থাকে। এই ধরনের অ্যাপ্লিকেশন ডিজাইন করা যায় যাতে নির্দিষ্ট ডকুমেন্ট মেমরিতে থাকে এবং ডিস্ক খুব কম অ্যাক্সেস করতে হয়।

টিপ ৫: ডেটাবেস ক্র্যাশের পর MongoDB সাধারণভাবে স্টার্ট আপ করুন

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

MongoDB কানেকশন গ্রহণ করার আগে আপনার ডেটা স্বয়ংক্রিয়ভাবে ফিক্স করবে। বড় ডেটাসেটের জন্য এই প্রক্রিয়াটি কয়েক মিনিট সময় নিতে পারে, কিন্তু বড় ডেটাসেটে রিপেयर চালানোর চেয়ে অনেক কম সময়।

জার্নাল ফাইলগুলো journal ডিরেক্টরিতে সংরক্ষিত থাকে। এই ফাইলগুলো কখনো মুছবেন না।

টিপ ৬: repair কমান্ড ব্যবহার করে ডেটাবেস কম্প্যাক্ট করুন

repair কমান্ড Wesentlichen একটি mongodump এবং তারপর একটি mongorestore করে, আপনার ডেটার একটি পরিষ্কার কপি তৈরি করে। এই প্রক্রিয়াতে এটি আপনার ডেটা ফাইলগুলোর খালি "হোল"গুলোও সরিয়ে দেয়।

repair কমান্ড অপারেশন ব্লক করে এবং আপনার ডেটাবেস চলমান স্পেসের দ্বিগুণ ডিস্ক স্পেস প্রয়োজন। তবে আপনার যদি অন্য একটি মেশিন থাকে, তবে আপনি mongodump এবং mongorestore ব্যবহার করে ম্যানুয়ালি একই প্রক্রিয়া সম্পন্ন করতে পারেন।

ম্যানুয়ালি প্রক্রিয়া সম্পন্ন করার জন্য নিচের ধাপগুলো অনুসরণ করুন:

  1. Hyd1 মেশিন স্টেপ ডাউন করুন এবং fsync এবং lock করুন:

     rs.stepDown() db.runCommand({fsync : 1, lock : 1}) 
  2. Hyd2-এ ফাইল ডাম্প করুন:

     Hyd2$ mongodump --host Hyd1 
  3. Hyd1-এ ডেটা ফাইলটির একটি কপি রাখুন ব্যাকআপ হিসেবে। তারপর মূল ডেটা ফাইল মুছে দিন এবং খালি ডেটা দিয়ে Hyd1 রিস্টার্ট করুন।

  4. Hyd2 থেকে রিস্টোর করুন। ডেটা ফাইল রিস্টোর করতে নিচের কমান্ড দিন:

     Hyd2$ mongorestore --host Hyd1 --port 10000 # পোর্ট নির্দিষ্ট করুন যদি 27017 না হয় 

উপসংহার

এই পরিবর্তনগুলো আমাদের MongoDB পারফরম্যান্স উল্লেখযোগ্যভাবে বাড়িয়েছে। আপনি যদি MongoDB ব্যবহার করার পরিকল্পনা করেন, তবে এই আর্টিকেলটি বুকমার্ক করে রাখুন, পরবর্তী প্রজেক্ট শুরু করার সময় প্রতিটি টিপ চেক অফ করুন।

এই দুই-পার্ট সিরিজের পার্ট ২-এ, আমরা কিছু টিপ শেয়ার করব যা বড় এন্টারপ্রাইজগুলিকে MongoDB ফিচার সঠিকভাবে ডিজাইন, অপ্টিমাইজ এবং ইমপ্লিমেন্ট করতে সাহায্য করবে।

ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য বা প্রশ্ন করুন।

  1. MongoDB সিকিউরিটি সেরা অনুশীলন: আপনার ডেটা এখনই সুরক্ষিত করুন

  2. মmongodb ব্যবহার করার শীর্ষ Кейস উন্নত কাস্টমার এক্সপেরিয়েন্সের জন্য

  3. MongoDB শার্ডিং দিয়ে স্কেল করুন: একটি রোবাস্ট, স্কেলেবল আর্কিটেকচার বানান

  4. MongoDB স্পেস ম্যানেজমেন্ট 습득: অ্যালোকেশন, ড্যাশবোর্ড, এবং স্কেলিং টিপস