Làm thế nào để nhân rộng bản địa PostgreSQL so với MySQL?
Tôi biết sao chép không đồng bộ đã được hỗ trợ lâu hơn đồng bộ hóa, gần đây. Là đồng bộ đáng tin cậy để được sử dụng trong các dự án thực tế?
Làm thế nào để nhân rộng bản địa PostgreSQL so với MySQL?
Tôi biết sao chép không đồng bộ đã được hỗ trợ lâu hơn đồng bộ hóa, gần đây. Là đồng bộ đáng tin cậy để được sử dụng trong các dự án thực tế?
Câu trả lời:
Vâng, nó đã sẵn sàng sản xuất và được sử dụng rộng rãi. Ví dụ, những người theo dõi Heroku dựa trên bản sao không đồng bộ tích hợp sẵn của PostgreQuery, cũng như các bản sao lưu AWS RDS và đọc bản sao. Nhân rộng trực tuyến được sử dụng gần như phổ biến với PostgreSQL.
Thiết lập sao chép không thực sự đáng yêu, nhưng các công cụ như repmgr giúp phần nào cho điều đó và nó đang cải thiện chậm với mỗi bản phát hành chính. Khả năng pg_basBackup lấy một bản sao của hệ thống bằng cách sử dụng sao chép phát trực tuyến (và làm như vậy từ chế độ chờ khác) là một trợ giúp lớn.
Nói chung, một tính năng đơn giản sẽ không được phát hành trong PostgreSQL cho đến khi nó được sản xuất. Lỗi xảy ra, giống như trong bất kỳ phần mềm nào, nhưng chúng thường được sửa ngay sau khi chúng được xác định. Các tính năng mới thực sự quan trọng đôi khi có lỗi và sự cố được phát hiện sau khi phát hành .0, nhưng nếu sửa chúng là ưu tiên cao; lỗi không chỉ còn lại xung quanh.
Tôi không nhận thấy bất kỳ vấn đề nghiêm trọng nào khi sao chép phát trực tuyến - đồng bộ hóa hoặc không đồng bộ - tôi cũng không thấy bất kỳ báo cáo nào trong một thời gian dài. Chúng kém ổn định hơn so với tiêu chuẩn thông thường của PG trong các phiên bản .0 của các phiên bản chính mà chúng được giới thiệu, nhưng cả hai đều trưởng thành nhanh chóng và sẵn sàng sản xuất.
(Cập nhật: Có một lỗi cụ thể trong phiên bản 9.3 mới trước 9.3.4 đã gây ra sự cố sao chép trong một số trường hợp; người dùng 9.3 nên cập nhật lên 9.3.4 ngay lập tức. Phiên bản cũ hơn không bị ảnh hưởng.)
Nhắc nhở duy nhất tôi muốn đề cập là một chi tiết nhỏ với sao chép đồng bộ: Nếu bạn cam kết với chủ, sau đó hủy truy vấn sau khi nó cam kết trong khi nó chờ bản sao để xác nhận, nó được coi là được cam kết trên bản gốc ngay cả trước khi được sao chép. Bạn nhận được hiệu ứng tương tự bằng cách khởi động lại bản gốc trong khi chờ bản sao trả lời. Trong thực tế điều này là không liên quan, nhưng đó là vấn đề duy nhất tôi có thể nghĩ đến.
Bản sao gốc của PG khá khác với MySQL.
MySQL sử dụng bản sao logic trong đó nó gửi các thay đổi logic được thực hiện cho dữ liệu bảng, cấu trúc bảng, v.v. và bản sao áp dụng các thay đổi đó.
Bản sao của PostgreQuery ở mức thấp hơn (từ 9.5 trở xuống; các phiên bản trong tương lai cũng có thể thêm bản sao logic). Nó sẽ gửi các khối đã thay đổi trong các bảng. Nó đơn giản hơn, dễ dàng hơn để lấy đúng và áp đặt tải thấp hơn trên máy chủ bản sao, nhưng tiêu tốn nhiều băng thông mạng hơn và yêu cầu nhiều bộ nhớ hơn trên bản gốc để giữ các thay đổi chưa được sao chép. Nó được cấu hình tốt nhất để sử dụng sao chép phát trực tuyến với dự phòng lưu trữ WAL, khiến cho việc cấu hình phức tạp hơn so với MySQL. Nó sao chép các thay đổi cấp độ thấp như hoạt động VACUUM, không chỉ thay đổi các thay đổi, giữ trạng thái trên đĩa của bản sao giống như hoạt động của bản gốc. Không thể sao chép chỉ một cơ sở dữ liệu; toàn bộ hệ thống phải được nhân rộng, điều này có thể gây nản lòng nếu bạn có một cơ sở dữ liệu lớn, cao và không quan trọng và một cơ sở dữ liệu nhỏ, thấp và quan trọng.
Tất cả trong tất cả, nó phụ thuộc vào những gì bạn muốn làm với nó.
Tôi xem bản sao của PostgreSQL tốt hơn đáng kể cho các bản sao được sử dụng để sao lưu, tính sẵn sàng cao và khắc phục thảm họa. Đặc biệt là như vậy khi kết hợp với thời gian phục hồi (PITR) .
Mặt khác, nó không tốt cho các bản sao báo cáo chỉ đọc vì cần trì hoãn ứng dụng dữ liệu được sao chép trong khi chạy các giao dịch dài có nghĩa là bạn cần phải để nó hủy bỏ các truy vấn chạy rất lâu hoặc tụt hậu rất nhiều thêm không gian đĩa trên bản gốc và buộc nó phải làm việc chăm chỉ hơn để theo kịp.
Có công việc đang diễn ra để cho phép sao chép logic trong PostgreSQL , trong đó các thay đổi logic đối với cấu trúc bảng, nội dung bảng, v.v ... được sao chép, thay vì trạng thái trên đĩa của chúng. Thiết kế danh mục của PG và hỗ trợ cho mọi thứ do người dùng định nghĩa làm cho việc này khá phức tạp. Một số nền tảng đã được đưa ra cho 9,4, nhưng sao chép logic đầy đủ có thể không sử dụng được trước 9,6 hoặc muộn hơn.