{"id":2120,"date":"2018-05-30T04:54:18","date_gmt":"2018-05-30T01:54:18","guid":{"rendered":"http:\/\/www.profelis.com.tr\/tr\/blog\/?p=2120"},"modified":"2023-02-01T10:58:00","modified_gmt":"2023-02-01T07:58:00","slug":"postgresql-10-mantiksal-tablo-bazli-replikasyon","status":"publish","type":"post","link":"https:\/\/profelis.com.tr\/en\/2018\/05\/30\/postgresql-10-mantiksal-tablo-bazli-replikasyon\/","title":{"rendered":"PostgreSQL 10: Mant\u0131ksal &#8211; Tablo Bazl\u0131 Replikasyon"},"content":{"rendered":"<p>PostgreSQL 10 ile beraber mevcut Streaming Replication (Fiziksel Replikasyon) \u00f6zelli\u011finin yan\u0131 s\u0131ra Logical Replication (Mant\u0131ksal Replikasyon) \u00f6zelli\u011fi geldi. Bu \u00f6zellik sayesinde daha \u00f6nce yapamad\u0131\u011f\u0131m\u0131z baz\u0131 esnek replikasyon \u00f6zelliklerini kullanabiliyoruz. Temel olarak Mant\u0131ksal Replikasyonu tan\u0131mlayacak olursak \u00f6nce fiziksel, Streaming Replikasyondan farklar\u0131n\u0131 a\u00e7\u0131klamak daha kolay olacakt\u0131r.<\/p>\n<p><strong>Streaming Replikasyon<\/strong>, XLOG kay\u0131tlar\u0131n\u0131n yani verinin fiziksel olarak farkl\u0131 bir sunucu \u00fczerine s\u00fcrekli olarak aktar\u0131lmas\u0131 anlam\u0131na gelmekte. Bu fiziksel veri aktar\u0131m\u0131 esnas\u0131nda baz\u0131 k\u0131s\u0131tlamalar\u0131m\u0131z mevcuttu. \u00d6rne\u011fin bir PostgreSQL cluster&#8217;\u0131n tamam\u0131n\u0131 replike edebiliyorduk, sadece bir veritaban\u0131 veya tabloyu hedefe g\u00f6nderemiyorduk. Fiziksel replikasyon, Hot Standby sunucu ihtiya\u00e7lar\u0131m\u0131z\u0131 yani kar\u015f\u0131 tarafta t\u00fcm PostgreSQL sunucunun bir kopyas\u0131n\u0131 (veri, roller, kullan\u0131c\u0131lar vb) g\u00fcncel olarak tutmam\u0131z\u0131 sa\u011fl\u0131yordu.<\/p>\n<p><strong>Mant\u0131ksal Replikasyon<\/strong> ise, hedefe istenen bir veritaban\u0131ndaki bir tablonun veya tablolar\u0131n \u00fczerinde ger\u00e7ekle\u015fen de\u011fi\u015fiklikleri (insert, update, delete) hedefe uygulayan bir yap\u0131ya sahiptir. Pub-Sub mant\u0131\u011f\u0131nda \u00e7al\u0131\u015f\u0131r. Kaynak veritaban\u0131 sunucusu \u00fczerinde kurulacak olan bir Publication&#8217;a Hedef Veritaban\u0131 sunucusunun Abone olmas\u0131 (Yay\u0131n Aboneli\u011fi gibi) \u015feklindedir. Mant\u0131ksal Replikasyon <a href=\"https:\/\/www.2ndquadrant.com\/en\/resources\/pglogical\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>pglogical<\/strong><\/a> mod\u00fcl\u00fcn\u00fc kullanarak \u00e7al\u0131\u015f\u0131r.<\/p>\n<h3>Mant\u0131ksal Replikasyon \u00d6zellikleri<\/h3>\n<ul>\n<li>Logical Replication genellikle replikasyon \u00f6\u011felerini tan\u0131mlayan bir birincil anahtar veya tekil anahtar taraf\u0131ndan tan\u0131mlanarak belirlenirler (primary key veya unique index).<\/li>\n<li>Hedef veritaban\u0131, tablolar \u00fczerinde farkl\u0131 g\u00fcvenlik veya eri\u015fim tan\u0131mlanabilir. Hatta farkl\u0131 indexler olu\u015fturulabilir.<\/li>\n<li>Mant\u0131ksal replikasyon, fiziksel replikasyonun aksine farkl\u0131 s\u00fcr\u00fcmler aras\u0131nda \u00e7al\u0131\u015fabilir. PostgreSQL (&gt; 9.4, ve \u00fczeri olmak kayd\u0131yla)<\/li>\n<li>Mant\u0131ksal replikasyon Olay tabanl\u0131 filtreleme kullan\u0131r, filtreleme kaynak veritaban\u0131 taraf\u0131nda ger\u00e7ekle\u015ftirilerek yay\u0131na sunulur.<\/li>\n<li>Bir yay\u0131na birden fazla abonelik yap\u0131labilir.<\/li>\n<li>Daha az verinin se\u00e7ilerek kar\u015f\u0131 tarafta g\u00fcncel tutulmas\u0131 sa\u011flanabilir,\u00a0 partition yap\u0131lm\u0131\u015f tablolar da buna dahildir.<\/li>\n<li>Xdb Replicator ve benzeri trigger (tetikleyici) bazl\u0131 replikasyonlardan \u00e7ok daha az kaynak t\u00fcketir.<\/li>\n<li>Veri g\u00f6\u00e7\u00fc esnas\u0131nda kullan\u0131labilir.<\/li>\n<li>Veri transformasyonu, yani yay\u0131nlanmadan \u00f6nce replikasyona sunulacak verinin de\u011fi\u015ftirilmesi sa\u011flanabilir.<\/li>\n<li>Kaynak ve hedefteki tablolar farkl\u0131 s\u00fctun say\u0131s\u0131na veya s\u0131ras\u0131na sahip olabilir ancak s\u00fctun veri tipleri ve s\u00fctun adlar\u0131 ayn\u0131 olmal\u0131d\u0131r.<\/li>\n<\/ul>\n<h3>Ne zaman kullan\u0131labilir?<\/h3>\n<p>Mant\u0131ksal Replikasyonun (Logical Replication) ne zaman kullan\u0131laca\u011f\u0131 iyi belirlenmelidir. Halen mevcut yedekleme \u00e7\u00f6z\u00fcm\u00fc olarak Fiziksel Replikasyon (Streaming Replication) \u00f6ncelikli se\u00e7iminiz olmal\u0131d\u0131r. Buna kar\u015f\u0131n;<\/p>\n<ul>\n<li>Birden fazla veritaban\u0131n\u0131 analitik \u00e7\u00f6z\u00fcmlemeler i\u00e7in tek bir veritaban\u0131nda konsolide etmek isterseniz,<\/li>\n<li>Farkl\u0131 PostgreSQL s\u00fcr\u00fcmleri aras\u0131nda replikasyon yapmak istedi\u011finizde,<\/li>\n<li>Art\u0131ml\u0131 de\u011fi\u015fiklikleri (incremental changes) ba\u015fka bir veritaban\u0131 \u00fczerinde toplamak istedi\u011finizde,<\/li>\n<li>Baz\u0131 tablolar\u0131 replike edip farkl\u0131 kullan\u0131c\u0131 gruplar\u0131na farkl\u0131 yetkiler ile eri\u015fim tan\u0131mlamak istedi\u011finizde,<\/li>\n<li>Kritik veri tutulan tablolardaki bir k\u0131s\u0131m veriyi farkl\u0131 kullan\u0131c\u0131lara transform ederek g\u00f6stermek istedi\u011finizde<\/li>\n<\/ul>\n<p>Mant\u0131ksal Replikasyon kullan\u0131m\u0131 ideal \u00e7\u00f6z\u00fcm olacakt\u0131r.<\/p>\n<h3>Ne zaman kullan\u0131lmaz?<\/h3>\n<ul>\n<li>Tablolar yay\u0131nlanan ve abone olunan tarafta ayn\u0131 isime sahip olmal\u0131d\u0131r,<\/li>\n<li>Tablolar\u0131n en az\u0131ndan bir birincil anahtar\u0131 (primary key) olmal\u0131 veya tekil anahtar\u0131 (unique key) olmal\u0131d\u0131r,<\/li>\n<li>Kar\u015f\u0131l\u0131kl\u0131, iki tarafl\u0131 (bi-directional) replikasyon m\u00fcmk\u00fcn de\u011fildir. Sadece bir taraftaki de\u011fi\u015fiklikler di\u011fer tarafa yans\u0131t\u0131l\u0131r. (Duruma g\u00f6re bu hem dezavantaj hem de avantaj olabilir),<\/li>\n<li>DDL de\u011fi\u015fiklikleri,\u00a0sequences, TRUNCATE kar\u015f\u0131 tarafa replike edilmez,<\/li>\n<li>Ayn\u0131 host \u00fczerinden abonelik m\u00fcmk\u00fcn de\u011fildir (abonelik kilitlenecektir).<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>PostgreSQL 10 ile beraber mevcut Streaming Replication (Fiziksel Replikasyon) \u00f6zelli\u011finin yan\u0131 s\u0131ra Logical Replication (Mant\u0131ksal Replikasyon) \u00f6zelli\u011fi geldi. Bu \u00f6zellik sayesinde daha \u00f6nce yapamad\u0131\u011f\u0131m\u0131z baz\u0131 esnek replikasyon \u00f6zelliklerini kullanabiliyoruz. Temel olarak Mant\u0131ksal Replikasyonu tan\u0131mlayacak olursak \u00f6nce fiziksel, Streaming Replikasyondan farklar\u0131n\u0131&#8230;<\/p>","protected":false},"author":3,"featured_media":22104,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75,45],"tags":[58,48,60,50],"class_list":["post-2120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql","category-yazi","tag-acikkaynak","tag-enterprisedb","tag-postgresql","tag-veritabani"],"_links":{"self":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/2120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/comments?post=2120"}],"version-history":[{"count":0,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/2120\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media\/22104"}],"wp:attachment":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media?parent=2120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/categories?post=2120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/tags?post=2120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}