PostgreSQL Bi-Directional Replication

Bi-Directional Replication או BDR, זאת התוספת הפונקציונלית החדשה ל PostgreSQL, המספקת כלים מתקדמים לשכפול הגיוני.

כרגע זה עדיין פתרון צעיר, אך כבר מוכן לשימוש. BDR מאפשר ליצור תצורות multi-master אסינכרוניות, .מבוזרות גאוגרפית באמצעות רפליקציה מובנית Logical Log Streaming Replication או LLSR
עם זאת, BDR אינו כלי Clustering, כפי שכאן אין Database transactions managers.

כל צומת היא עצמאית מאחרים, אשר היה בלתי אפשרית במקרה של Database transactions manager. וכל צומת מכילה עותק מקומי של הנתונים זהה לנתונים של ההצמתים אחרות.

שאילתות גם מבוצעות רק באופן מקומי, טרנסאקציות מנוהלות על ידי Global transactions manager, ובקשות מאפליקציה מועברות לרכזים ששולחים בקשות להתבצע לכל צומת פעילה.

עם זאת, BDR אינו כלי Clustering, כפי שכאן אין Database transactions manager.

כל צומת היא עצמאית מאחרים, אשר היה בלתי אפשרית במקרה של Database transactions manager. כל צומת מכילה עותק מקומי של הנתונים זהה לנתונים שבצמתים אחרות.

שאילתות גם מבוצעות רק באופן מקומי (כדי לעשות את זה יותר ברור למה אני מתכוון, הנה השוואה עם Postgres-XC / Postgres-XL, שבו כל השרתים רצים כאילו ברתמה אחת, טרנזאקציות מנוהלות על ידי Database transactions manager, שאילתות מגיעות  על רכז ששולח אותן להתבצע לכל  צומת עובדת).

בנוסף, כל אחת מצמתים שלם פנימית בכל עת, והקבוצה של השרתים לגמרי מתואמת בסופו של דבר (eventually consistent).

ייחודו של BDR נעוץ בעובדה שזה שונה מרפליקציה מובנית, לא מכל פתרונות trigger-based הקיימים (Londiste, Slony, Bucardo).

ההבדל הבולט ביותר של BDR (או LLSR) הוא בכך שזה מפעיל את מסד הנתונים (per-database replication), ואת PLSR קלסית משכפל את instance כולו (per-cluster replication), כלומר כל מסדי הנתונים בתוך instance.

מגבלות ותכונות הקיימים:

  • כל שינויי הנתונים שנגרמו ע"י הINSERT/DELETE/UPDATE/TRUNCATE משוכפלים.
  • עיקרי השינוים של הסכימה (DDL) משוכפלים בהצלחה. DDL לא נתמכים נקבעים ע"י מודול הרפליקציה ונדחים עם הנפקת שגיאה.
  • הגדרות של טבלאות, סוגים, רחבות, וכו ' חייבים להיות זהה בין upstream  או downstream masters.
  • פעולות אשר משתקפות ב WAL, אבל לא מוצגים ע"י שינויים לוגיים אינם משוכפלים לצמתים האחרות.

כך LLSR נפטר מחלק של עלויות תקורה שנמצאות בתוך PLSR (עם זאת אין זה אומר כי LLSR דורש רוחב פס של רשת פחות מ PLSR).