คำแนะนำของฉันเกี่ยวกับการเก็บถาวร:
- สร้าง
archive_tablespace
(ถ้าคุณต้องการคุณสามารถแยกฮาร์ดแวร์กับที่เก็บถาวร)
สร้างตาราง ตัวอย่างเช่นเราต้องการเก็บโพสต์ตาราง
create table posts_all ( LIKE public.posts) ;
create table posts_archive () inherits ( public.posts_all) ;
alter table public.posts inherits ( public.posts_all ) ;
หลังจากนั้นเราจะมี 2 ตารางใหม่: public.posts_all (ที่มีคอลัมน์เดียวกันเหมือนในโพสต์) เพื่อค้นหาโพสต์ทั้งหมด (ที่เก็บถาวรและการผลิต) และ public.posts_archive เพื่อค้นหาโพสต์เก็บถาวรทั้งหมด Public.posts จะสืบทอดจาก posts_all
ส่วนแทรกควรดำเนินการในลักษณะเก่า (ไปยังตาราง public.posts) เว้นแต่คุณจะเขียนทริกเกอร์บน posts_all เพื่อเปลี่ยนเส้นทางแทรกไปยังตารางโพสต์ หากคุณมีการแบ่งพาร์ติชันมันจะซับซ้อนมากขึ้น ด้วยแอปพลิเคชันที่ใช้งานได้และก่อนการโยกย้ายข้อมูลเก่าคุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในรหัสแอปพลิเคชันเพื่อทำงานกับวิธีนี้
สร้างไฟล์เก็บถาวรสกีมาสำหรับการแยกเชิงตรรกะ ข้อเสนอแนะของฉันจะแยกข้อมูลที่เก็บถาวรตามช่วงเวลา (ปีหรือเดือน) ถ้าเป็นไปได้ (archive_2005)
สร้างตารางเก็บถาวรใน archive_year schema
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;
หลังจากนั้นคุณจะมีการโพสต์ตารางใหม่ใน schema archive_2005 และ postgresql planer จะรู้ว่าข้อมูลมีเฉพาะในช่วงเวลาที่ออกแบบ หากคุณค้นหาตามช่วงเวลาอื่น postgresql จะไม่ค้นหาในตารางนี้
สร้างฟังก์ชั่น / ขั้นตอน / ทริกเกอร์เพื่อย้ายข้อมูลไปยังตารางที่เก็บถาวร
- ทำการเก็บถาวรหนึ่งครั้งเป็นระยะเวลา (ปีที่นี่) และดูดตารางเก่าหรือทำมันโดยอัตโนมัติโดยทริกเกอร์ (หนักกว่าใน autovacuum) มีทั้งข้อดีและข้อเสียในทั้งสองเทคนิค
หากดำเนินการ:
- สามารถสืบค้นข้อมูลที่เก็บถาวร (เลือก * จาก posts_archive) ทั้งหมด (เลือก * จาก posts_all) และข้อมูลการผลิต (เลือก * จาก public.posts) แยกกัน
- สามารถทำแบบแผนการเก็บถาวรการถ่ายโอนข้อมูลแยกต่างหากและวางซ้อนกับพวกเขาในวิธีที่ง่าย pg_dump -s archive_2005 datase_name drop schema archive_2005 cascade; - ระวังเพราะจะลบตารางที่เกี่ยวข้องทั้งหมด
- ข้อมูลเก่าที่แยกออกจากกันโดยใช้ tablespace และมีเหตุผลโดย schema
- โครงสร้างที่ค่อนข้างซับซ้อนในการจัดการกระบวนการเก็บถาวร
- สามารถสร้างดัชนีที่แตกต่างกันในการผลิตและตารางการเก็บถาวรเพื่อเพิ่มประสิทธิภาพการสืบค้นให้กับทั้งสอง (ดัชนีขนาดเล็กและเฉพาะ = แบบสอบถามได้เร็วขึ้นและพื้นที่น้อยกว่าที่จำเป็น)
- หากคุณมีตารางการแบ่งพาร์ติชัน (ตามปีหรือเดือน) กระบวนการเก็บถาวรจะเป็นเพียงการย้ายทั้งตารางไปยัง
archive_tablespace
หรือเพียงแค่เปลี่ยนเพื่อสืบทอดจาก posts_archive (ฉันไม่ได้ทดสอบสิ่งนี้)
- หากคุณไม่ต้องการเข้าถึงข้อมูลเก่า (เก็บถาวร) คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรในแอปพลิเคชัน
นี่เป็นเทคนิคทั่วไปและคุณควรปรับให้เข้ากับความต้องการของคุณ ข้อเสนอแนะเพื่อปรับปรุงนี้?
อ่านเพิ่มเติม: มรดก PostgreSQL , การแบ่ง
Create tables (table posts example):
ผมไม่สามารถที่จะเข้าใจได้อย่างชัดเจนขั้นตอนที่ 2 คุณอธิบายได้หรือไม่ว่าขั้นตอนเฉพาะเกี่ยวกับจำนวนตารางทั้งหมดและการสืบทอดระหว่างตารางเกี่ยวข้องกันอย่างไร