ডাটাবেস সংরক্ষণাগার সমাধান


18

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

আমি ভাবতে পারি এমন কয়েকটি সমাধান হ'ল:

  1. টেবিল বিভাজন
  2. টেবিল স্পেস এবং / অথবা স্কিমা পৃথক করুন
  3. সংরক্ষণাগারভুক্ত রেকর্ড / টেবিলগুলি অন্য একটি হার্ডডিস্কে সরানো

অন্য যে কোনও পরামর্শ / পয়েন্টার / সমাধানগুলি সত্যিই স্বাগত এবং প্রশংসাযোগ্য।

দ্রষ্টব্য: আমরা CentOS5.2-এ পোস্টগ্রিজ এসকিউএল v9.1.3 চালাচ্ছি

উত্তর:


13

সংরক্ষণাগার সম্পর্কে আমার পরামর্শ:

  1. তৈরি করুন archive_tablespace(আপনি চাইলে আপনি সংরক্ষণাগারে হার্ডওয়্যার পৃথক করতে পারেন)
  2. সারণী তৈরি করুন। উদাহরণস্বরূপ আমরা টেবিল পোস্টগুলি সংরক্ষণাগার করতে চাই।

    create table  posts_all ( LIKE public.posts)  ;
    create table  posts_archive () inherits  ( public.posts_all)  ;
    alter table  public.posts  inherits ( public.posts_all ) ;

    এর পরে আমাদের কাছে দুটি নতুন সারণী থাকবে: সমস্ত পোস্ট (সংরক্ষণাগার এবং উত্পাদন) এবং সমস্ত সংরক্ষণাগার পোস্টগুলি অনুসন্ধান করার জন্য সার্বজনীন.পোস্ট_আর্কাইভ অনুসন্ধান করার জন্য সর্বজনীন.পোস্ট_স (পোস্টগুলিতে একই কলামগুলির সাথে)। সর্বজনীন.পোস্টগুলি পোস্ট_লীগ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হবে।
    সারণিগুলিকে পুরানো উপায়ে যেতে হবে (পাবলিক.পোস্টগুলি টেবিল করতে) যদি না আপনি পোস্ট টেবিলের মধ্যে সন্নিবেশগুলি পুনঃনির্দেশ করতে পোষ্ট_লগে ট্রিগার লিখবেন। আপনার বিভাজন থাকলে এটি আরও জটিল হবে। কাজের অ্যাপ্লিকেশন সহ এবং পুরাতন ডেটা মাইগ্রেশনের আগে আপনাকে এই পদ্ধতির সাথে কাজ করতে অ্যাপ্লিকেশন কোডের কোনও পরিবর্তন করতে হবে না।

  3. যৌক্তিক বিচ্ছেদের জন্য স্কিমা সংরক্ষণাগার তৈরি করুন। আমার পরামর্শ হ'ল সম্ভব (আর্কাইভ_2005) কিছু সময়ের সময় (বছর বা মাস) দ্বারা সংরক্ষণাগার ডেটা আলাদা করা হবে।

  4. সংরক্ষণাগার_ইয়ার স্কিমায় সংরক্ষণাগার সারণী তৈরি করুন

    create table archive_2005.posts (
      check(record_date >= '2005-01-01 00:00:00'::timestamp 
        and record_date <  '2006-01-01 00:00:00'::timestamp)
    ) inherits (posts_archive) tablespace archive_tablesapce;

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

  5. সংরক্ষণাগার সারণিতে ডেটা স্থানান্তর করতে ফাংশন / পদ্ধতি / ট্রিগার তৈরি করুন।

  6. কোনও সময়ের জন্য (এখানে বছরের জন্য) একবার সংরক্ষণাগার করুন এবং পুরানো টেবিলটি ভ্যাকুয়াম করুন বা ট্রিগারগুলি দ্বারা এটি স্বয়ংক্রিয়ভাবে করুন (অটোভাকিয়ামে ভারী)। উভয় কৌশলই অনেক সুবিধা এবং অসুবিধা আছে।

যদি প্রয়োগ করা হয়:

  1. সংরক্ষণাগার (পোস্ট_আর্কাইভ থেকে * নির্বাচন করুন), সমস্ত (পোস্ট_আলক থেকে * নির্বাচন করুন) এবং প্রোডাকশন (পাবলিক.পাস্ট থেকে * নির্বাচন করুন) ডেটা আলাদাভাবে জিজ্ঞাসা করতে পারে
  2. আর্কাইভ স্কিমগুলি পৃথকভাবে ডাম্প করতে পারে এবং সহজেই তাদের উপর ক্যাসকেড ফেলে দিতে পারে। pg_dump -s সংরক্ষণাগার_2005 ডেটাস_নাম ড্রপ স্কিমা আর্কাইভ_2005 ক্যাসকেড; --be সাবধান কারণ এটি সম্পর্কিত সমস্ত সারণী সরিয়ে দেয়
  3. পুরাতন ডেটা শারীরিকভাবে টেবিলস্পেস এবং যৌক্তিকভাবে স্কিমা দ্বারা পৃথক করা হয়েছিল।
  4. সংরক্ষণাগার প্রক্রিয়া পরিচালনা করার জন্য বেশ জটিল কাঠামো
  5. উভয় (ছোট এবং বিশেষায়িত সূচকগুলি = দ্রুত অনুসন্ধান এবং কম স্থানের প্রয়োজন) এর ক্যোরিয়াস অনুকূলিত করতে উত্পাদন এবং সংরক্ষণাগার টেবিলগুলিতে বিভিন্ন সূচক তৈরি করতে পারে)
  6. আপনার যদি টেবিলগুলি archive_tablespaceবিভাজনযুক্ত করা হয় ( বছর বা মাসে দ্বারা) সংরক্ষণাগার প্রক্রিয়াটি পুরো টেবিলটিকে কেবল পোস্ট_আর্কাইভের উত্তরাধিকারে স্থানান্তরিত করতে বা পরিবর্তন করতে হবে (আমি এটি পরীক্ষা করিনি)
  7. আপনি যদি পুরানো (সংরক্ষণাগারভুক্ত) ডেটা অ্যাক্সেস করতে না চান তবে আপনাকে অ্যাপ্লিকেশনটিতে কোনও পরিবর্তন করতে হবে না।

এটি সাধারণ কৌশল এবং আপনার এটি আপনার প্রয়োজনের সাথে খাপ খাইয়ে নেওয়া উচিত। এই উন্নতি করার জন্য কোন পরামর্শ?

আরও পড়ুন: পোস্টগ্রিসএসকিউএল উত্তরাধিকার , বিভাজন


আমি দ্বিতীয় ধাপটি পরিষ্কারভাবে বুঝতে পারি না Create tables (table posts example):। মোট কতগুলি টেবিল রয়েছে এবং সারণির মধ্যে উত্তরাধিকার একে অপরের সাথে সম্পর্কিত তা কী আপনি সেই নির্দিষ্ট পদক্ষেপটি ব্যাখ্যা করতে পারেন?
জ্ঞানাম

সম্পাদিত উত্তর। আমি আশা করি এটি সংরক্ষণাগারটি বুঝতে এবং প্রয়োগ করার জন্য যথেষ্ট।
sufleR

রিয়েল-টাইম অ্যাপ্লিকেশনটিতে, একাধিক নির্ভরশীল / শিশু টেবিলগুলি পিতামাতার / মাস্টার সারণীর সাথে সংযুক্ত / সম্পর্কিত থাকতে হবে। সুতরাং এখানে বর্ণিত পদক্ষেপগুলি স্বয়ংক্রিয়ভাবে তার সমস্ত নির্ভরশীল / শিশু টেবিলগুলির জন্য প্রযোজ্য? আমার বোধগম্যতা কি সঠিক?
জ্ঞানাম

হ্যাঁ. এটি কেবল একটি টেবিলের উদাহরণ। আমি এটি 100 জিবি ডাটাবেসে প্রয়োগ করেছি তবে কেবল কয়েকটি বড় টেবিলের জন্য।
sufleR

তাই এই ক্ষেত্রে, যা টেবিল স্বাভাবিকভাবে খালি হবে ( posts, posts-allবা posts-archive), শুধু সমগ্র ডেটা সেট প্রতিনিধিত্ব করতে বিদ্যমান?
জ্ঞানাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.