মঙ্গোডিবি ডাটাবেস ফাইলের আকার হ্রাস করা হচ্ছে


165

আমি একটি মোঙ্গোডিবি ডাটাবেস পেয়েছি যা একবার বড় (> 3 জিবি) ছিল। সেই থেকে নথিগুলি মুছে ফেলা হয়েছে এবং আমি সেই অনুযায়ী ডাটাবেস ফাইলগুলির আকার হ্রাস পাবে বলে প্রত্যাশা করছিলাম।

মোংগোডিবি যেহেতু বরাদ্দ স্থান রাখে, ফাইলগুলি এখনও বড়।

আমি এখানে এবং সেখানে পড়েছি প্রশাসক কমান্ড mongod --repairঅব্যবহৃত স্থানটি মুক্ত করার জন্য ব্যবহৃত হয়, তবে এই কমান্ডটি চালানোর জন্য আমার ডিস্কে পর্যাপ্ত স্থান নেই।

আপনি কি এমন কোনও উপায় জানেন যা আমি অব্যবহৃত স্থান ছেড়ে দিতে পারি?


7
এই প্রশ্নের উত্তর কি বিবেচিত? আমাদের কি আরও ডেটা দরকার?
গেটস ভিপি

2
২.৮ সংস্করণ দিয়ে শুরু করে, আপনি আপনার ডেটা সংকোচন করতে পারেন , যা উল্লেখযোগ্য পরিমাণে স্থান সঞ্চয় করে।
সালভাদোর ডালি

1
আমার ঠিক একই চ্যালেঞ্জ ছিল, এটিকে সমাধান করার সহজতম উপায়টি ছিল কপিড্যাটাস ডাটাবেস () ফাংশন দিয়ে ডাটাবেসের অনুলিপি তৈরি করা, তারপরে মূল ডাটাবেস db.DPDatabase () করা এবং তারপরে ডাটাবেসটি আবার জায়গায় কপি করা। আমার ডাটাবেসটি বেশিরভাগই খালি ছিল এবং আমি যখন অনুলিপিটি করেছি তখন কেবল আসল ব্যবহারযোগ্য ডেটা অনুলিপি করা হয়েছিল। মূল ডাটাবেস ফেলে দেওয়ার ফলে বড় ফাইল মুছে ফেলা হয়েছে। db.repairDatedia () ব্যবহার করা কোনও বিকল্প ছিল না কারণ আমার সার্ভারটিতে ডিস্কের জায়গাগুলি ইতিমধ্যে কম ছিল এবং এই ক্রিয়াকলাপটি অপারেশনের জন্য প্রয়োজনীয় পরিমাণের চেয়ে অনেক বেশি পরিমাণে ফাঁকা জায়গার প্রয়োজন হত।
ব্যবহারকারী 3892260

উত্তর:


144

আপডেট: সঙ্গে compactকমান্ড এবং WiredTiger এটা দেখে মনে হচ্ছে অতিরিক্ত ডিস্ক স্থান আসলে ওএস কাছে প্রকাশ করা হবে


আপডেট: v1.9 হিসাবে একটি compactকমান্ড আছে।

এই কমান্ডটি "ইন-লাইন" একটি সংক্ষেপণ সম্পাদন করবে। এটি এখনও কিছু অতিরিক্ত স্থান প্রয়োজন, কিন্তু তত বেশি নয়।


মঙ্গোডিবি ফাইলগুলি সংক্ষেপ করে:

  • ফাইলগুলি একটি নতুন স্থানে অনুলিপি করা হচ্ছে
  • দস্তাবেজগুলির মধ্য দিয়ে লুপিং এবং সেগুলি পুনরায় অর্ডার / পুনরায় সমাধান করা
  • নতুন ফাইলগুলির সাথে মূল ফাইলগুলি প্রতিস্থাপন করা হচ্ছে

আপনি এই "সংক্ষেপণ" দৌড়াতে mongod --repairবা সরাসরি সংযোগ করে এবং চালিত করে করতে পারেন db.repairDatabase()

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

  1. ইনস্টল করা (ব্যবহার করে mongoexport) অন্য কম্পিউটারে ডাটাবেস রফতানি করুন এবং তারপরে আপনি একই ডাটাবেসটি (ব্যবহার করে mongoimport) আমদানি করতে পারেন । এটি আরও সংকুচিত একটি নতুন ডাটাবেসের ফলস্বরূপ। এখন আপনি mongodনতুন ডাটাবেস ফাইলগুলির সাথে মূল প্রতিস্থাপন বন্ধ করতে পারেন এবং আপনি ভাল good
  2. বর্তমান মঙ্গোদ থামান এবং একটি বৃহত কম্পিউটারে ডাটাবেস ফাইলগুলি অনুলিপি করুন এবং সেই কম্পিউটারে মেরামত চালান। তারপরে আপনি নতুন ডাটাবেস ফাইলগুলি মূল কম্পিউটারে ফিরে যেতে পারেন।

মঙ্গো ব্যবহার করে বর্তমানে "কমপ্যাক্ট ইন প্লেস" করার ভাল কোনও উপায় নেই। এবং মঙ্গো স্পষ্টভাবে প্রচুর জায়গা আপ করতে পারে।

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


আপনার উত্তরের জন্য গেটস ভিপি আপনাকে ধন্যবাদ। আপনি যে দুটি বিকল্প উল্লেখ করেছেন সে সম্পর্কে আমি ভাবছিলাম। তবে এই জাতীয় জিনিসগুলি করার আগে, আমি জানতে চেয়েছিলাম যে স্থান সমাধানে একটি কমপ্যাক্ট পাওয়া যায় কিনা। আবার ধন্যবাদ.
মেউবল

3
আজ (2010-11-18) হিসাবে ডুইট (ওয়াশিংটন, ডিসির মঙ্গোডিসি ইভেন্টে বক্তব্য রেখে) যদি আপনি আপনার ডাটাবেস অফলাইনে না নিয়ে কমপ্যাক্ট করতে চান তবে প্রতিলিপি / --repair / স্যুইচ ওভার পদ্ধতির প্রস্তাব দিয়েছিলেন।
ডেভিড জে

10
কেবল একটি মাথা উপরে উঠে 'আমি যেমন করতাম তেমন কর না' এবং --repair কে মূল হিসাবে চালাও। মূল ডিবি ফাইলগুলি ডেকে আনে। DOH।
টোটোরো

18
'কমপ্যাক্ট' এর জন্য ডকুমেন্টেশন বলছে: "এই অপারেশনটি ফাইল সিস্টেমে ব্যবহৃত ডিস্ক জায়গার পরিমাণ হ্রাস করবে না।" আমি বুঝতে পারি না এটি কীভাবে আসল প্রশ্নের সমাধান।
এড নরিস

আপনি যদি আসল প্রশ্নটি দেখেন তবে সমস্যার অংশটি মেরামত করতে খুব বেশি ডেটা থাকার সাথে জড়িত। যদি আপনি নিজের ড্রাইভের 2/3 টি একটি ডিবি দিয়ে পূরণ করেন তবে আপনি কোনও মেরামত করতে পারবেন না। নতুন ডিবি সম্পূর্ণরূপে "অনুলিপি & মেরামত" হওয়ার আগে নতুন বরাদ্দ হওয়া ফাইলগুলি বাকী জায়গাটি চুষে ফেলবে এবং "স্যুইচ" কখনই ঘটবে না। সাথে compact, তিনি অন্তত বিদ্যমান ফাইলগুলি স্থানে রাখতে পারেন। আমি সম্মত, এটি একটি সম্পূর্ণ সমাধান নয়, তবে এটি একটি বর্ধিত উন্নতি।
গেটস ভিপি

39

আমার একই সমস্যা ছিল এবং কমান্ড লাইনে কেবল এটি করে সমাধান করা হয়েছে:

mongodump -d databasename
echo 'db.dropDatabase()' | mongo databasename
mongorestore dump/databasename

দাবি: 15936 সংগ্রহ তৈরি করা db.col নির্বাচন ব্যর্থ হয়েছে। এরআরএমএসজি: ব্যতিক্রম: আকার নির্দিষ্ট করুন: <এন> যখন আবদ্ধ হয় সত্য হয়
টুইটক 2

: ওবুন্টু রিগ্রেশন দেখে মনে হচ্ছে ... ডাম্প ফাইলটি মেটাডেটা ক্যাপ করেছে: এতে "অপরিজ্ঞাত" আছে ... এই সমস্যাগুলি সমাধান করে আমদানি সমস্যা।
টুইটক 2

2
আমার ডাটাবেস প্রায় পুরো ডিস্ক স্কোর করেছে। এটি ছিল 120 ​​গিগাবাইট (ডিস্ক 160 গিগাবাইট) কমপ্যাক্ট ফাইলের আকার হ্রাস করে না এবং স্থানের অভাবে মেরামত ডাটাবেস সম্ভব নয়। মংডাম্প এবং ড্রপডেটাবেস এবং ডিবি-এর মংগেরস্টোরের পরে আমার কাছে 40 জিবি ডাটাবেস আকার রয়েছে।
ইগোর বেনিকভ 10

পুনরুদ্ধার কমান্ডে ছোট সংশোধনmongorestore --db databasename dump/databasename
জেরি

34

দেখে মনে হচ্ছে মোঙ্গো ভি 1.9 + এর জায়গায় জায়গায় কমপ্যাক্টের জন্য সমর্থন রয়েছে!

> db.runCommand( { compact : 'mycollectionname' } )

এখানে ডক্স দেখুন: http://docs.mongodb.org/manual/references/command/compact/

"মেরামত ডাটাবেসের বিপরীতে, কমপ্যাক্ট কমান্ডটির কাজ করার জন্য ডাবল ডিস্ক জায়গার প্রয়োজন হয় না working কাজ করার সময় এটিতে অল্প পরিমাণ অতিরিক্ত স্থানের প্রয়োজন হয় Additionally অতিরিক্তভাবে, কমপ্যাক্টটি দ্রুত হয়" "


3
@ অঞ্জুজগুপ্ত "রিপোটার ডেটাবেস কমান্ডটি ডাটাবেসের সমস্ত সংগ্রহকে সংযুক্ত করে। প্রতিটি সংগ্রহের জন্য স্বতন্ত্রভাবে কমপ্যাক্ট কমান্ড চালানো সমান" " docs.mongodb.org/manual/references/command/repairDatedia/… । সুতরাং যদি মেরামত ডেটাবেস কমপ্যাক্ট হিসাবে আকার হ্রাস করে। আমি প্রতি সপ্তাহে প্রচুর মুছুন এবং আপডেটের সাথে আমার সংগ্রহগুলি সংযোগ করছি। আমি রেপরিড্যাটাবেস এর চেয়েও কমপ্যাক্ট পছন্দ করি কারণ প্রথমে এটি সংগ্রহকে লক্ষ্যযুক্ত করা হয় আপনি পুরো ডাটাবেসটি চান না। দ্বিতীয় এটির জন্য আপনার ডিবি ফাইল আকারের (আমার ক্ষেত্রে 500 গিগাবাইট) x2 এর পরিবর্তে 2GB মুক্ত স্থান প্রয়োজন needs
মাজিয়ার

1
বিটিডব্লিউ এটি পরীক্ষা করে দেখুন: "মঙ্গোডিবি আপনার ডেটাগুলি সংক্ষিপ্ত করতে এবং সর্বোত্তম কার্যকারিতা পুনরুদ্ধার করার জন্য 2 বিভিন্ন উপায়ে সরবরাহ করে: মেরামত ডাটাবেস এবং কমপ্যাক্ট। আপনার ডাটাবেসগুলি তুলনামূলকভাবে ছোট হলে, অথবা আপনি দীর্ঘ সময় ধরে ঘূর্ণন থেকে নোড নিতে পারবেন "আমাদের ডাটাবেস আকার এবং ক্যোয়ারী কাজের চাপের জন্য, আমাদের সমস্ত সংগ্রহের উপর অবিচ্ছিন্ন সংযোগ চালানো আরও বোধগম্য হয়েছে" " blog.parse.com/2013/03/26/always-be-compacting github.com/ParsePlatform/Ops/blob/master/tools/mongo_compact.rb
মাজিয়ার

3
@ মাজিয়ার ডকস.মঙ্গোদবি.আর / ম্যানুয়াল / রেফারেন্স / কম্যান্ড / কমপ্যাক্ট / # ডিস্ক- স্পেস - " রিপ্যারডেট ডাটাবেসের বিপরীতে, কমপ্যাক্ট ফাইল সিস্টেমে স্থান ফাঁকা করে না"।
অনুজ গুপ্ত

4
@ মজিয়র ওপি অব্যবহৃত স্থানটি মুক্ত করতে চায় , যা অর্জনের মাধ্যমে repairDatabaseনয় compactcompactস্থান খালি করে না, এটি কেবল ব্যবহৃত স্থানটিকেই ডিফ্র্যাগমেন্ট করে, যা এটি হ্রাস করে না।
অনুজ গুপ্ত

5
মঙ্গো ৩.০ হিসাবে, ওয়্যার্ডটাইগার স্টোরেজ ইঞ্জিন ব্যবহার করা হলে স্থানটিকে পুনরায় দাবি করতে compact হবে
গ্যারি

19

বর্তমান ডাটাবেসে সমস্ত সংগ্রহকে সংক্ষিপ্ত করুন

db.getCollectionNames().forEach(function (collectionName) {
    print('Compacting: ' + collectionName);
    db.runCommand({ compact: collectionName });
});

13

আপনার যদি পুরো মেরামতের চালাতে হয় তবে এটি ব্যবহার করুন repairpath বিকল্পটি । এটি আরও উপলভ্য স্থান সহ একটি ডিস্কে নির্দেশ করুন।

উদাহরণস্বরূপ, আমার ম্যাকটিতে আমি ব্যবহার করেছি:

mongod --config /usr/local/etc/mongod.conf --repair --repairpath /Volumes/X/mongo_repair

আপডেট: মঙ্গোডিবি কোর সার্ভারের টিকিট 4266 প্রতি , আপনাকে --nojournalএকটি ত্রুটি এড়াতে যোগ করতে হবে:

mongod --config /usr/local/etc/mongod.conf --repair --repairpath /Volumes/X/mongo_repair --nojournal

1
এটি দুর্দান্ত কাজ করেছে। আমার জায়গায় মেরামত করার জন্য প্রয়োজনীয় 2x স্পেসের অভাব ছিল, তাই আমি একটি এনএএস লাগিয়েছিলাম। কেবল ইস্যু, এটি সম্পূর্ণ হতে 18 ঘন্টা সময় নিয়েছে, তবে এটি কার্যকর হয়েছে। --Nojoural পতাকা যোগ করার বিষয়টি নিশ্চিত করুন।
জেনোকন

11

মোঙ্গোর ২.৮ সংস্করণ দিয়ে শুরু করে আপনি সংক্ষেপণ ব্যবহার করতে পারেন । আপনার ওয়্যার্ডটাইগার ইঞ্জিন, এমএম্যাপের সাথে 3 স্তরের সংক্ষেপণ থাকবে (যা ডিফল্ট ২.6 এ সংকোচন দেয় না):

আপনি 16 জিবি ডেটার জন্য কত স্থান সঞ্চয় করতে সক্ষম হবেন তার উদাহরণ এখানে রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

তথ্য এই নিবন্ধ থেকে নেওয়া হয় ।


7

স্টোরেজইঙ্গিনের উপর ভিত্তি করে আমাদের দুটি উপায় সমাধান করতে হবে।

1. এমএমএএপি () ইঞ্জিন:

কমান্ড: db.repairDatabase ()

দ্রষ্টব্য: रिपাইরিড্যাটাবেসগুলিকে আপনার বর্তমান ডেটা সেট প্লাস 2 গিগাবাইটের আকারের সমান ফ্রি ডিস্ক স্পেস প্রয়োজন। ডিবিপাথটি ধারণ করে এমন ভলিউমের যদি পর্যাপ্ত জায়গার অভাব হয়, আপনি একটি পৃথক ভলিউম মাউন্ট করতে পারেন এবং এটি মেরামতের জন্য ব্যবহার করতে পারেন। মেরামত ডেটাবেসগুলির জন্য পৃথক ভলিউম মাউন্ট করার সময় আপনাকে অবশ্যই কমান্ড লাইন থেকে মেরামত ডাটাবেসটি চালাতে হবে এবং অস্থায়ী মেরামতের ফাইলগুলি সংরক্ষণ করতে ফোল্ডারটি নির্দিষ্ট করতে --repairpath সুইচ ব্যবহার করতে হবে। উদাহরণস্বরূপ: কল্পনা করুন যে ডিবি আকারটি 120 গিগাবাইট মানে, (120 * 2) +2 = 242 গিগাবাইট হার্ড ডিস্ক স্থান প্রয়োজন।

আপনি সংগ্রহের ভিত্তিতে অন্য কোনও পদ্ধতি করুন, কমান্ড: db.runCommand ({কম্প্যাক্ট: 'সংগ্রহের নাম'})

২. ওয়্যার্ডটাইগার: এটি স্বয়ংক্রিয়ভাবে এটি স্ব-সমাধান করে।


6

মঙ্গোডিবিতে স্থান পুনরুদ্ধার নিয়ে কিছুটা বিভ্রান্তি দেখা দিয়েছে এবং কিছু প্রস্তাবিত অনুশীলন নির্দিষ্ট স্থাপনার ধরণের ক্ষেত্রে নিখুঁতভাবে বিপজ্জনক। নীচে আরও বিশদ:

টিএল; ডিআর repairDatabase একটি ডিস্ক দুর্নীতি থেকে পুনরুদ্ধার করার চেষ্টা করছে এমন একক মোংগোডিবি মোতায়েন থেকে ডেটা উদ্ধার করার চেষ্টা করে। যদি এটি স্থান পুনরুদ্ধার করে তবে এটি সম্পূর্ণরূপে একটি পার্শ্ব প্রতিক্রিয়া । স্থান পুনরুদ্ধার কখনও চলমান প্রাথমিক বিবেচনা করা উচিত নয় repairDatabase

স্ট্যান্ডেলোন নোডে স্থান পুনরুদ্ধার করুন

ওয়্যার্ডটাইগার: ওয়্যার্ডটাইগার সহ স্ট্যান্ডেলোন নোডের জন্য, চলমান একটি ক্যাভ্যাট সহ ওএসে compactস্থান ছেড়ে দেবে: compactমংডোডিবি 3.0.x-এ ওয়্যার্ডটাইজারের কমান্ডটি এই বাগ দ্বারা প্রভাবিত হয়েছিল: সার্ভার -21833 যা মঙ্গোডিবি 3.2.3 - এ স্থির করা হয়েছিল। এই সংস্করণের আগে, compactওয়্যার্ডটাইগারে চুপচাপ ব্যর্থ হতে পারে।

এমএমএএপভি 1: এমএমএএপিভি 1 কাজ করার কারণে, এমএমএপিভি 1 স্টোরেজ ইঞ্জিন ব্যবহার করে স্থান পুনরুদ্ধার করার জন্য নিরাপদ এবং সমর্থিত কোনও পদ্ধতি নেই। compactএমএমএপিভি 1 তে ডেটা ফাইলগুলিকে ডিফ্র্যাগমেন্ট করবে, সম্ভাব্যভাবে নতুন ডকুমেন্টগুলির জন্য আরও বেশি জায়গা উপলব্ধ করবে, তবে এটি ওএসে স্থান ছেড়ে দেবে না।

আপনি পারে চালাতে সক্ষম হবেন repairDatabaseযদি আপনি সম্পূর্ণরূপে এই কাজটির ফলাফল কী বিপদজনক কমান্ড (নিচে দেখুন), যেহেতুrepairDatabase মূলত দুর্নীতিগ্রস্ত নথি খারিজ পুরো ডাটাবেসের নতুন করে লেখা হয়। পার্শ্ব প্রতিক্রিয়া হিসাবে, এটি নতুন এমএমএপিভি 1 ডেটা ফাইল তৈরি করবে এতে কোনও বিভাজন ছাড়াই ওএসে স্থান ছেড়ে দেবে।

কম দু: সাহসিক পদ্ধতির জন্য, চলমান mongodumpএবং আপনার mongorestoreএমএমএপিভি 1 স্থাপনার পাশাপাশি আপনার স্থাপনার আকারের সাপেক্ষে এটিও সম্ভব হতে পারে।

একটি প্রতিরূপ সেটে স্থান পুনরুদ্ধার করুন

প্রতিরূপ সেট কনফিগারেশনের জন্য, স্থান পুনরুদ্ধার করার জন্য সর্বোত্তম এবং নিরাপদ পদ্ধতিটি একটি প্রাথমিক সিঙ্ক করা ওয়্যার্ডটাইগার এবং এমএমএপিভি 1 উভয়ের জন্য ।

আপনার যদি সেটের সমস্ত নোড থেকে স্থানটি পুনরুদ্ধার করতে হয় তবে আপনি রোলিং প্রাথমিক সিঙ্ক করতে পারেন। এটি হ'ল, প্রতিটি সেকেন্ডারিতে প্রাথমিক সিঙ্ক সম্পাদন করুন, অবশেষে প্রাথমিক পদক্ষেপ নেওয়ার আগে এবং এতে প্রাথমিক সিঙ্ক সম্পাদন করুন। প্রাথমিক সিঙ্ক পদ্ধতি রোলিং করা প্রতিলিপি সেট রক্ষণাবেক্ষণ সম্পাদন করার জন্য সবচেয়ে নিরাপদ পদ্ধতি এবং এটি বোনাস হিসাবে কোনও ডাউনটাইমও জড়িত না।

দয়া করে নোট করুন যে রোলিং প্রাথমিক সিঙ্ক করার সম্ভাব্যতাও আপনার স্থাপনার আকারের উপর নির্ভর করে। অত্যন্ত বড় মোতায়েনের জন্য, প্রাথমিক সিঙ্ক করা সম্ভব হবে না এবং এইভাবে আপনার বিকল্পগুলি কিছুটা সীমাবদ্ধ। WiredTiger ব্যবহার করা হয়, তাহলে আপনি পারে সেট এক মাধ্যমিক খুঁজে নিতে, একটি স্বতন্ত্র, চালানো যেমন শুরু করতে পারবেন compactএটা, এবং সেট থেকে এটি পুনরায় যুক্ত।

সংক্রান্ত repairDatabase

অনুগ্রহ repairDatabaseকরে রেপ্লিকা সেট নোডগুলিতে চলবেন না । এটি খুব বিপজ্জনক, যেমন মেরামত ডেটাবেস পৃষ্ঠায় উল্লিখিত হয়েছে নীচে আরও বিশদে বিবৃত।

নামটি repairDatabaseকিছুটা বিভ্রান্তিকর, যেহেতু আদেশটি কোনও কিছুর মেরামত করার চেষ্টা করে না। স্বতন্ত্র নোডে ডিস্ক দুর্নীতি হলে কমান্ডটি ব্যবহার করার উদ্দেশ্যে তৈরি করা হয়েছিল , যার ফলে নথি নষ্ট হয়ে যেতে পারে।

repairDatabaseকমান্ড আরো নিখুঁতভাবে হিসাবে "স্যালভেজ ডেটাবেস" বর্ণনা করা যেতে পারে। এটি হ'ল এটি ডেটাবেসগুলিকে এমন একটি স্থানে আনার প্রয়াসে দুর্নীতিগ্রস্ত দলিলগুলি ত্যাগ করে ডাটাবেসগুলি পুনরায় তৈরি করে যেখানে আপনি এটি শুরু করতে পারেন এবং এটি থেকে অক্ষত নথি উদ্ধার করতে পারেন।

এমএমএএপিভি 1 মোতায়েনের মধ্যে, ডাটাবেস ফাইলগুলির এই পুনর্নির্মাণটি ওএসের পার্শ্ব প্রতিক্রিয়া হিসাবে স্থান প্রকাশ করে । ওএসে স্থান ছেড়ে দেওয়া কখনই উদ্দেশ্য ছিল না।

ফল repairDatabaseএকটি প্রতিরূপ সেট

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

অনুমানযোগ্যভাবে, এটি নোডে বাকি সেট থেকে আলাদা একটি ডেটাসেট ধারণ করে ase কোনও আপডেটে যদি সেই একক দস্তাবেজটি আঘাত হানে তবে পুরো সেটটি ক্রাশ হতে পারে।

বিষয়টিকে আরও খারাপ করার পক্ষে, এটি পুরোপুরি সম্ভব যে এই পরিস্থিতি দীর্ঘ সময়ের জন্য সুপ্ত থাকতে পারে, কেবল কোনও আপাত কারণ ছাড়াই হঠাৎ ধর্মঘট করতে হবে।


5

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

কমপ্যাকশন প্রক্রিয়াটির আচরণটি নিম্নরূপে মঙ্গোডিবি ইঞ্জিনের উপর নির্ভরশীল

db.runCommand({compact: collection-name })

MMAPv1

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

কমপ্যাকশন অপারেশনের সময় 2 গিগাবাইট পর্যন্ত অতিরিক্ত ডিস্কের স্থান প্রয়োজন।

সংযোগ ক্রিয়াকলাপের সময় একটি ডাটাবেস স্তরের লক রাখা হয়।

WiredTiger

ওয়্যার্ডটাইগার ইঞ্জিনটি ডিফল্টরূপে সংক্ষেপণ সরবরাহ করে যা এমএমএএভিভি 1 এর চেয়ে কম ডিস্কের স্থান গ্রহণ করে।

কমপ্যাক্ট প্রক্রিয়া অপারেটিং সিস্টেমের জন্য মুক্ত স্থান প্রকাশ করে। কমপ্যাক্ট অপারেশন চালানোর জন্য ন্যূনতম ডিস্ক স্পেস প্রয়োজন। ওয়্যার্ডটাইগার এছাড়াও ডাটাবেসটিতে সমস্ত ক্রিয়াকলাপকে ব্লক করে কারণ এটি ডাটাবেস স্তর লক প্রয়োজন।

জন্য MMAPv1 ইঞ্জিন, কম্প্যাক্ট করছ অপারেটিং সিস্টেমের জন্য স্থান ফিরে না। অব্যবহৃত স্থান ছেড়ে দিতে আপনার মেরামত পরিচালনা করতে হবে।

db.runCommand({repairDatabase: 1})

3

মোংডব 3.0 এবং উচ্চতরগুলির একটি নতুন স্টোরেজ ইঞ্জিন রয়েছে - ওয়্যার্ডটাইগার। আমার ক্ষেত্রে স্যুইচিং ইঞ্জিন 100 গিগাবাইট থেকে 25 জিবিতে ডিস্কের ব্যবহার হ্রাস করে।


1

ডাটাবেস ফাইলগুলি আকারে হ্রাস করা যায় না। ডাটাবেসটি "মেরামত" করার সময়, কেবলমাত্র মঙ্গো সার্ভারের পক্ষে এর কয়েকটি ফাইল মুছে ফেলা সম্ভব। যদি প্রচুর পরিমাণে ডেটা মুছে ফেলা হয়, তবে মঙ্গো সার্ভারটি "রিলিজ" করবে (মুছে ফেলবে), মেরামতকালে, এর বিদ্যমান কয়েকটি ফাইল।


1

সাধারণ কমপ্যাক্টে ডেটাবেস মেরামত করা ভাল। কমপ্যাক্ট ওভার মেরামত করার একটি সুবিধা হ'ল আপনি পুরো ক্লাস্টারে মেরামত করতে পারেন। কমপ্যাক্টে আপনাকে প্রতিটি শার্ডে লগইন করতে হয় যা বিরক্তিকর এক ধরণের।


1

আমার যখন একই সমস্যা হয়েছিল তখন আমি আমার মঙ্গো সার্ভারটি বন্ধ করে দিয়ে আবার কমান্ড দিয়ে এটি শুরু করি

mongod --repair

মেরামতের অপারেশন চালানোর আগে আপনার এইচডিডি তে আপনার যথেষ্ট ফাঁকা জায়গা আছে কিনা তা পরীক্ষা করা উচিত (কমপক্ষে - আপনার ডাটাবেসের আকার)


1

স্বতন্ত্র মোডের জন্য আপনি কমপ্যাক্ট বা মেরামত ব্যবহার করতে পারেন,

শার্পড ক্লাস্টার বা রেপ্লিকা সেট করার জন্য, আমার অভিজ্ঞতা অনুসারে, আপনি প্রাথমিকের উপর কমপ্যাক্ট চালানোর পরে, মাধ্যমিকের পরে কমপ্যাক্ট পরে, প্রাথমিক ডাটাবেসের আকার হ্রাস পেয়েছে, তবে গৌণ নয়। মাধ্যমিক ডাটাবেসের আকার কমাতে আপনি রিসাইক সদস্যটি করতে চাইতে পারেন । এবং এটি করে আপনি আবিষ্কার করতে পারেন যে মাধ্যমিক ডাটাবেসের আকার প্রাথমিকের চেয়ে আরও বেশি হ্রাস পেয়েছে, আমার ধারণা কমপ্যাক্ট কমান্ডটি সংগ্রহটি সত্যই সংঘবদ্ধ করছে না। সুতরাং, আমি শেষ পর্যন্ত প্রাথমিক ও প্রতিরূপ সেট মাধ্যমিক সুইচিং এবং করছেন পুনঃসিঙ্ক সদস্য আবার।

আমার উপসংহারটি হ'ল, শারড / রেপ্লিকা সেটটির আকার হ্রাস করার সর্বোত্তম উপায়টি হ'ল রিসাইক মেম্বারটি করে, প্রাথমিক মাধ্যমিকটি স্যুইচ করে এবং পুনরায় সিঙ্ক করে।


0

মংডোডিবি-রেপায়ার ধারালো ক্লাস্টারের ক্ষেত্রে সুপারিশ করা হয় না।

যদি প্রতিলিপি সেট শারড ক্লাস্টার ব্যবহার করা হয় তবে কমপ্যাক্ট কমান্ড ব্যবহার করুন, এটি সমস্ত সংকলনের সমস্ত ডেটা এবং সূচি ফাইলকে পুনরায় লেখ এবং ডিফ্র্যাগমেন্ট করবে। বাক্য গঠন:

db.runCommand( { compact : "collection_name" } )

যখন বল প্রয়োগ করা হয়: সত্য, কমপ্যাক্ট প্রতিরূপ সেট প্রাথমিক উপর সঞ্চালিত হয়। যেমন db.runCommand ( { command : "collection_name", force : true } )

অন্যান্য বিষয় বিবেচনা করুন: - এটি অপারেশনগুলিকে অবরুদ্ধ করে। তাই রক্ষণাবেক্ষণ উইন্ডোতে চালিত করার পরামর্শ দেওয়া হয়। - যদি প্রতিলিপি বিভিন্ন সার্ভারে চলমান থাকে, প্রতিটি সদস্যের জন্য পৃথকভাবে মৃত্যুদণ্ড কার্যকর করা দরকার - শার্পযুক্ত ক্লাস্টারের ক্ষেত্রে, কমপ্যাক্টটি প্রতিটি শার্ড সদস্যকে পৃথকভাবে সম্পাদন করা প্রয়োজন। মঙ্গোস উদাহরণের বিরুদ্ধে কার্যকর করা যায় না।


-5

আমি এটি করতে সক্ষম হয়েছি কেবল একটি উপায়। আপনার বিদ্যমান ডেটার সুরক্ষার কোনও গ্যারান্টি নেই। আপনার নিজের ঝুঁকি নিয়ে চেষ্টা করুন।

সরাসরি ডেটা ফাইলগুলি মুছুন এবং মঙ্গোদ পুনরায় চালু করুন।

উদাহরণস্বরূপ, উবুন্টু (ডেটাতে ডিফল্ট পাথ: / var / lib / mongodb) দিয়ে আমার কাছে নামের মতো দুটি ফাইল ছিল: সংগ্রহ # #। আমি সংগ্রহটি 0 রাখি এবং অন্য সমস্ত মুছে ফেলেছি।

আপনার কাছে ডাটাবেসে গুরুতর ডেটা না থাকলে একটি সহজ উপায় বলে মনে হচ্ছে।


ফাইলগুলি <ডেটাবেস_নাম> হিসাবে সংরক্ষণ করা হয় <<সংখ্যা> যেমন মাইডিবি 3 - আপনি সংগ্রহটি বলতে পারবেন না।
ববমার্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.