2016-11-11 28 views
12

là có bất kỳ cơ hội nào để cài đặt PDO rằng lệnh SELECT sẽ được thực hiện trên máy chủ SLAVE DB và Chèn & Cập nhật & DELETE sẽ được thực thi trên máy chủ MASTER DB hoặc tôi cần tạo trình xử lý PHP Để làm việc đó?PDO SELECT từ SLAVE và INSERT vào MASTER

trạng:

Chúng tôi có Thạc sĩ - Thạc sĩ sao chép cho MySQL. Chúng ta sẽ thêm hai máy chủ mới vì vậy nó sẽ được - Thạc sĩ/Slave - Thạc sĩ/Slave.

Tôi muốn tạo một số xử lý cho SELECT truy vấn. Tôi muốn thực hiện CHỌN truy vấn trên SLAVE thay vì TỔNG và tất cả UPADTE & INSERT & DELETE truy vấn sẽ được thực hiện trên TỔNG. Điều này có thể xảy ra với một số cài đặt không?

Cảm ơn!

+1

Nếu bạn sử dụng Doctrine DBAL, bạn có thể dễ dàng thực hiện điều này http://www.doctrine-project.org/api/dbal/2.5/class-Doctrine.DBAL .Connections.MasterSlaveConnection.html, tuy nhiên nếu bạn có tương tác DB của riêng bạn với một số lớp wrapper thì bạn phải viết mã của riêng bạn để xử lý như vậy. –

+2

Có thể thực hiện việc này bằng Trình điều khiển MySQL Gốc: http://php.net/manual/en/mysqlnd-ms.rwsplit.php – Chris

+0

Cảm ơn bạn đã đặt câu hỏi này và nó rất hữu ích @Abhik + chris – Karthi

Trả lời

5

Không, bạn không thể định cấu hình PDO hoặc bất kỳ phần mở rộng cơ sở dữ liệu nào của PHP để thực hiện việc này. Điều đó đơn giản là vì mỗi cá thể PDO (hoặc MySQLi, vv) đại diện cho một kết nối duy nhất, tới một máy chủ duy nhất.

Vì vậy, có, bạn sẽ cần một trình xử lý biết nhiều kết nối để thực hiện điều đó. Một số ORM phổ biến và các lớp trừu tượng cơ sở dữ liệu khác cung cấp chức năng như vậy.

0

Tôi khuyên bạn không nên làm điều đó ngay cả khi bạn có thể. Nhân rộng là "không đồng bộ". Đó là, khi bạn chèn vào Master, không có đảm bảo rằng nó sẽ đến Slave trước khi bạn cố gắng đọc nó. Thậm chí không có bất kỳ đảm bảo rằng nó sẽ đến ngày hôm nay!

Nếu người dùng đăng nhận xét trên blog, sau đó chuyển đến trang hiển thị nhận xét, họ sẽ cảm thấy khó chịu nếu nhận xét không hiển thị. Họ có thể giả định rằng bình luận đã bị mất và sau đó repost nó. Điều này gây ra bạn đau buồn khi người dùng khiếu nại về việc đăng hai lần.

Điều này được gọi là "đọc quan trọng". Cách đơn giản này để tránh sự lộn xộn là phải cẩn thận về những gì bạn gửi cho các nô lệ - cụ thể là không có gì có thể dẫn đến các bài đăng "biến mất".

Có nhiều gói "proxy" khác nhau cho phép từ phần tách đọc viết mà bạn mô tả; một số cố gắng tránh "đọc quan trọng", nhưng tôi không tin tưởng họ.

Cụm Galera (xem PXC, MariaDB), không đồng bộ lần đọc, vì vậy nó có thể tránh được sự cố đọc nghiêm trọng. (Tuy nhiên, có một cài đặt bạn cần phải áp dụng.)

+0

Rick James - giải pháp tốt nhất để làm điều đó. Bạn cũng có thể sử dụng MaxScale (cũng với MAeraDB Galera Cluster) để chọn đúng Server. Điều này bao gồm cả chuyển đổi dự phòng. Tôi bỏ phiếu lên –

+0

3y3skill3r - bạn cũng có thể cài đặt MaxScale trên máy chủ nơi bạn sử dụng PDO và MaxScale sẽ chọn Máy chủ chính xác –

Các vấn đề liên quan