কম্পিউটার

MongoDB টিপস:পার্ট 1

মূলত Tricore দ্বারা প্রকাশিত:আগস্ট 2, 2017

MongoDB এর সাথে শুরু করা সহজ হলেও আপনি অ্যাপ্লিকেশন তৈরি করার সময় আরও জটিল সমস্যা দেখা দেয়। আপনি নিজেকে আশ্চর্যজনক জিনিস খুঁজে পেতে পারেন যেমন:

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

আপনি যখন MongoDB ব্যবহার করছেন তখন এই ব্লগ পোস্টটি এই পরিস্থিতিগুলি পরিচালনা করার জন্য কয়েকটি টিপস শেয়ার করে৷

টিপ 1:আপনার ডেটা পুনরুদ্ধার করতে মেরামত কমান্ডের উপর নির্ভর করবেন না

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

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

টিপ 2:একটি প্রতিরূপ সেটের সদস্যকে পুনরায় সিঙ্ক করুন

একটি রেপ্লিকা সেটের একজন সদস্যকে পুনরায় সিঙ্ক করতে, নিশ্চিত করুন যে কমপক্ষে একজন মাধ্যমিক সদস্য এবং একজন প্রাথমিক সদস্য চালু এবং চলছে৷ তারপর, নিশ্চিত করুন যে আপনি Oracle নামের ব্যবহারকারী হিসাবে লগ ইন করেছেন এবং MongoDB পরিষেবা বন্ধ করুন৷

MongoDB নামের ব্যবহারকারী হিসাবে লগ ইন করুন এবং ব্যাকআপফোল্ডারে সমস্ত ডেটা ফাইল সরান যাতে আপনি কোনও সমস্যায় পড়লে সেগুলি পুনরুদ্ধার করতে পারেন। যদি পুরানো ফাইলগুলি ব্যাকআপ ফোল্ডারে থাকে তবে আপনি সেগুলি সরাতে পারেন। আপনি ডেটা ফাইলগুলি কোথায় পাবেন তা নিশ্চিত না হলে, /etc/mongod.conf এ একবার দেখুন .ওরাকল নামের ব্যবহারকারী হিসাবে, মঙ্গোডিবি পরিষেবা শুরু করুন৷

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

প্রতিলিপি প্রক্রিয়া সম্পূর্ণ হওয়ার পরে, স্থিতি STARTUP2 থেকে পরিবর্তিত হবে SECONDARY-এ .

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

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

MongoDB টিপস:পার্ট 1

সূত্র:https://www.slideshare.net

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

টিপ 4:ডিস্ক অ্যাক্সেস মিনিমাইজ করুন

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

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

একটি উপায় হল একটি সলিড-স্টেট ড্রাইভ (SSD) ব্যবহার করা। ঐতিহ্যগত হার্ড ডিস্ক ড্রাইভের (HDDs) তুলনায় SSD অনেক কাজ অনেক দ্রুত করে। তারা MongoDB এর সাথে খুব ভাল কাজ করে। অন্যদিকে, এগুলি প্রায়শই ছোট এবং আরও ব্যয়বহুল হয়।

নিচের চিত্রটি SSD এবং HDD এর তুলনা করে।

MongoDB টিপস:পার্ট 1

সূত্র:https://www.serverintellect.com

ডিস্ক অ্যাক্সেসের সংখ্যা কমানোর অন্য উপায় হল আরও RAM যোগ করা৷ যাইহোক, এই পদ্ধতিটি আপনাকে এতদূর নিয়ে যাবে, কারণ শেষ পর্যন্ত আপনার RAM আপনার ডেটার আকারকে সামঞ্জস্য করতে সক্ষম হবে না৷

প্রশ্ন হল, কীভাবে আমরা ডিস্কে টেরাবাইট বা পেটাবাইট ডেটা সঞ্চয় করি, এমন একটি অ্যাপ্লিকেশন প্রোগ্রাম করি যা বেশিরভাগ ঘন ঘন-প্রার্থিত ডেটা মেমরিতে অ্যাক্সেস করবে এবং যতটা সম্ভব কমই ডিস্ক থেকে মেমরিতে ডেটা স্থানান্তর করবে?

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

টিপ 5:ডাটাবেস ক্র্যাশের পরে সাধারণত MongoDB শুরু করুন

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

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

জার্নাল ফাইলগুলি journal এ সংরক্ষণ করা হয় ডিরেক্টরি এই ফাইলগুলি মুছবেন না৷

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

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

মেরামত কমান্ড অপারেশন ব্লক করে এবং আপনার ডাটাবেস বর্তমান চলমান ডিস্কের দ্বিগুণ স্থান প্রয়োজন। যাইহোক, আপনার যদি অন্য মেশিন থাকে, আপনি 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 # specify port if it's not 27017
    

উপসংহার

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

এই দুই-অংশের সিরিজের পার্ট 2-এ, আমরা কিছু টিপস শেয়ার করব যা বড় উদ্যোগগুলিকে সঠিকভাবে ডিজাইন, অপ্টিমাইজ এবং কার্যকর মঙ্গোডিবি বৈশিষ্ট্যগুলিকে কার্যকর করতে সহায়তা করে৷

কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাবটি ব্যবহার করুন৷


  1. MongoDB নিরাপত্তা টিপস

  2. মঙ্গোডিবি

  3. MongoDB এর সাথে স্কেলিং:একটি শার্ডিং অবকাঠামো সেট আপ করা

  4. MongoDB স্থান ব্যবহার বোঝা