簡體   English   中英

從SLAVE PDO SELECT並INSERT到MASTER

[英]PDO SELECT from SLAVE and INSERT into MASTER

是否有機會在PDO設置中設置SELECT將在SLAVE DB服務器上執行,並且Insert&Update&DELETE將在MASTER DB服務器上執行,或者我需要創建PHP處理程序來執行此操作?

情況:

我們有Master - Master復制MySQL。 我們將添加兩個新服務器,因此它將是 - / - /

我想為SELECT查詢創建一些處理。 我希望在SLAVE而不是MASTER上執行SELECT查詢,並且所有UPADTE和INSERT&DELETE查詢都將在MASTER上執行。 這有可能通過一些設置嗎?

謝謝!

不,您無法配置PDO或任何PHP的數據庫擴展來執行此操作。 這僅僅是因為每個PDO(或MySQLi等)實例代表單個服務器的單個連接。

所以是的,你需要一個知道多個連接的處理程序來做到這一點。 一些流行的ORM和其他數據庫抽象層確實提供了這樣的功能。

即使你可以,我建議不要這樣做。 復制是“異步”的。 也就是說,當你插入Master時,無法保證在你嘗試閱讀它之前它會到達Slave。 甚至不保證今天會到貨!

如果您的用戶在博客上發布評論,然后轉到顯示評論的頁面,則如果評論未顯示,則會感到惱火。 他們可能會認為評論已丟失,然后重新發布。 當用戶抱怨雙重發布時,這會讓感到悲傷。

這被稱為“批判性閱讀”。 這種避免混亂的簡單方法是要小心你發送給奴隸的東西 - 即沒有任何會導致“消失”的帖子。

有各種“代理”包允許你描述的讀寫分割; 有些人試圖避免“批判性閱讀”,但我不相信他們。

Galera集群(參見PXC,MariaDB)執行同步讀取,因此可以避免關鍵的讀取問題。 (但是,您需要應用一個設置。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM