PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL Streaming vs Logical Replication - So sánh

Sao chép thông tin được lưu trữ trên cơ sở dữ liệu của bạn là điều cần thiết để phân phối dữ liệu và đảm bảo bạn có một bản sao lưu có thể được sử dụng để khôi phục thảm họa, trong trường hợp xảy ra sự cố.

PostgreSQL replication có hai dạng, và cả hai đều có cách sử dụng thích hợp. Hiểu cách áp dụng một hoặc cả hai phương pháp sao chép dữ liệu này có thể hợp lý hóa các quy trình phân phối dữ liệu của bạn. Điều cuối cùng bạn muốn là mất công việc quan trọng mà bạn đã làm trên cơ sở dữ liệu.

Hãy cùng xem xét ưu, nhược điểm và các trường hợp sử dụng của sao chép trực tuyến và logic trong PostgreSQL.

Định nghĩa sao chép dữ liệu trong PostgreSQL

Nếu bạn đã quen thuộc với sao chép dữ liệu là gì, thì bạn có thể tiếp tục và cuộn xuống phần tiếp theo. Nhưng trong trường hợp bạn chưa quen với kỹ thuật cơ sở dữ liệu, chúng tôi muốn thiết lập nền tảng thật nhanh chóng.

Như tên cho thấy, sao chép là quá trình thường xuyên sao chép dữ liệu từ một cơ sở dữ liệu trong một máy chủ máy tính sang một cơ sở dữ liệu khác trong một máy chủ khác, vì vậy tất cả người dùng đều có quyền truy cập vào cùng một mức thông tin. Trong máy tính, sao chép được sử dụng để loại bỏ các lỗi trong hệ thống kỹ thuật số.

Việc sao chép loại bỏ các ngăn chứa dữ liệu, bảo vệ thông tin có giá trị và hợp lý hóa quá trình phát triển.

Trong PostgreSQL, có hai tùy chọn để sao chép:sao chép logic &trực tuyến. Những phương pháp này rất phù hợp cho các trường hợp sử dụng khác nhau và với tư cách là nhà phát triển, bạn có thể thấy mình có xu hướng sử dụng phương pháp này hơn phương pháp khác. Nhưng tốt hơn là bạn nên hiểu cách sử dụng cả hai để bạn có thể quyết định nên áp dụng cái nào trong các trường hợp khác nhau.

Sao chép lôgic trong PostgreSQL


Sao chép luồng đã được giới thiệu để sử dụng với PostgreSQL v10.0. Sao chép lôgic hoạt động bằng cách sao chép / tái tạo các đối tượng dữ liệu và các thay đổi của chúng dựa trên nhận dạng sao chép của chúng.

Trong nhiều trường hợp, danh tính của dữ liệu là khóa chính. Trong PostgreSQL, nó cung cấp cho người dùng quyền kiểm soát chi tiết đối với dữ liệu được sao chép và bảo mật thông tin.

Thuật ngữ logic được sử dụng để phân biệt nó với sao chép vật lý, nó sử dụng sao chép từng byte và địa chỉ khối chính xác. Đọc thêm trong tài liệu PostgreSQL chính thức tại đây.

Thông qua mô hình xuất bản và đăng ký, nó hoạt động bằng cách cho phép một hoặc nhiều người đăng ký đăng ký một hoặc nhiều ấn phẩm trên một nút nhà xuất bản. Người đăng ký có thể lấy thông tin từ các ấn phẩm và tái xuất bản dữ liệu để sao chép theo tầng hoặc cấu hình phức tạp hơn.

Sao chép dữ liệu logic cũng có thể ở dạng sao chép giao dịch. Nếu kỹ sư muốn sao chép một bảng, họ có thể sử dụng phương pháp sao chép này để chụp nhanh dữ liệu từ phía nhà xuất bản và gửi đến cơ sở dữ liệu của người đăng ký.

Khi người đăng ký thực hiện các thay đổi đối với dữ liệu gốc, cơ sở dữ liệu của nhà xuất bản sẽ nhận được các bản cập nhật trong thời gian thực. Để đảm bảo tính nhất quán trong giao dịch trong các ấn phẩm có một gói đăng ký, người đăng ký phải áp dụng dữ liệu theo thứ tự như nhà xuất bản.

Ưu điểm của tính năng sao chép lôgic trong PostgreSQL

Bản sao lôgic cho phép người dùng sử dụng một máy chủ đích để ghi và cho phép các nhà phát triển có các chỉ mục và định nghĩa bảo mật khác nhau. Điều này cung cấp tính linh hoạt nâng cao cho việc chuyển dữ liệu giữa nhà xuất bản và người đăng ký.

Hỗ trợ nhiều phiên bản

Ngoài ra, nó còn hỗ trợ nhiều phiên bản và có thể được đặt giữa các phiên bản PostgreSQL khác nhau. Nó cũng cung cấp tính năng lọc dựa trên sự kiện. Các ấn phẩm có thể có nhiều đăng ký, giúp dễ dàng chia sẻ dữ liệu trên một mạng rộng.

Tải máy chủ tối thiểu

So với các giải pháp dựa trên trình kích hoạt, nó có tải máy chủ tối thiểu trong khi cung cấp khả năng lưu trữ linh hoạt thông qua sao chép các tập hợp nhỏ hơn. Như đã đề cập ở trên, sao chép dữ liệu logic thậm chí có thể sao chép dữ liệu có trong các bảng được phân vùng cơ bản.

Cũng cần đề cập rằng sao chép dữ liệu logic cho phép chuyển đổi dữ liệu ngay cả khi nó đang được thiết lập và cho phép phát trực tuyến song song giữa các nhà xuất bản.

Nhược điểm của sao chép lôgic trong PostgreSQL

Bản sao lôgic sẽ không sao chép các chuỗi, các đối tượng lớn, các khung nhìn cụ thể hóa, các bảng gốc phân vùng và các bảng ngoại.

Trong PostgreSQL, sao chép dữ liệu logic chỉ được hỗ trợ bởi các hoạt động DML. Các nhà phát triển không thể sử dụng DDL hoặc cắt bớt và lược đồ phải được xác định trước. Ngoài ra, nó không hỗ trợ sao chép lẫn nhau (hai chiều).

Nếu người dùng gặp xung đột với các ràng buộc về dữ liệu được sao chép trong bảng, thì quá trình sao chép sẽ dừng lại. Cách duy nhất để nhân rộng tiếp tục là nếu nguyên nhân của cuộc xung đột được giải quyết.

Xung đột không chủ ý có thể cản trở đà phát triển của nhóm, vì vậy bạn phải hiểu cách giải quyết nhanh chóng mọi vấn đề.

Nếu xung đột không được xử lý nhanh chóng, vùng sao chép sẽ bị đóng băng trong điều kiện hiện tại, nút nhà xuất bản sẽ bắt đầu tích lũy các bản ghi ghi trước (WAL) và cuối cùng nút sẽ hết dung lượng đĩa.

Các trường hợp sử dụng để sao chép logic trong PostgreSQL

Nhiều kỹ sư sẽ sử dụng bản sao lôgic cho:

  • Phân phối các thay đổi trong một cơ sở dữ liệu hoặc tập hợp con cơ sở dữ liệu cho người đăng ký trong thời gian thực
  • Hợp nhất nhiều cơ sở dữ liệu thành một cơ sở dữ liệu trung tâm (thường dùng để phân tích)
  • Tạo các bản sao trên các phiên bản khác nhau của PostgreSQL
  • Triển khai các bản sao giữa các phiên bản PostgreSQL trên các nền tảng khác nhau, chẳng hạn như Linux đến Windows
  • Chia sẻ dữ liệu sao chép với những người dùng hoặc nhóm khác
  • Phân phối một tập hợp con cơ sở dữ liệu giữa nhiều cơ sở dữ liệu

Nhân rộng luồng trong PostgreSQL


Sao chép luồng đã được giới thiệu để sử dụng với PostgreSQL 9.0. Quá trình này gửi và áp dụng các tệp Ghi nhật ký Trước (WAL) từ một máy chủ cơ sở dữ liệu chính hoặc chính đến một bản sao hoặc cơ sở dữ liệu nhận. WAL được sử dụng để sao chép và đảm bảo tính toàn vẹn của dữ liệu.

Cách hoạt động của tính năng sao chép trực tuyến

Việc sao chép trực tuyến hoạt động để thu hẹp khoảng cách giữa các lần truyền dữ liệu vốn có trong vận chuyển nhật ký dựa trên tệp, đợi cho đến khi WAL đạt đến dung lượng tối đa để gửi dữ liệu.

Bằng cách truyền trực tuyến các bản ghi WAL, các máy chủ cơ sở dữ liệu truyền các bản ghi WAL theo từng phần để đồng bộ hóa dữ liệu. Máy chủ dự phòng kết nối với bản sao và nhận các phần WAL khi chúng được gửi đến.

Với sao chép trực tuyến, người dùng phải quyết định thiết lập sao chép không đồng bộ hay đồng bộ. Khi bản sao trực tuyến được triển khai lần đầu, nó sẽ mặc định là sao chép không đồng bộ.

Điều này chỉ ra rằng có một độ trễ giữa thay đổi ban đầu trên bản chính và sự phản ánh của thay đổi đó trên bản sao. Không đồng bộ hóa mở ra cánh cửa cho việc mất dữ liệu tiềm ẩn nếu bản chính gặp sự cố trước khi các thay đổi được sao chép hoặc nếu bản sao không đồng bộ với bản gốc đến mức nó đã loại bỏ dữ liệu thích hợp để thực hiện thay đổi.

Sao chép đồng bộ là một lựa chọn an toàn hơn nhiều vì nó thực hiện các thay đổi trong thời gian thực. Quá trình chuyển từ bản chính sang bản sao được coi là chưa hoàn tất cho đến khi cả hai máy chủ xác minh thông tin. Sau khi các thay đổi dữ liệu được xác nhận, quá trình chuyển sẽ được ghi lại trên WAL của cả hai máy chủ.

Cho dù bạn sử dụng sao chép không đồng bộ hay đồng bộ, các bản sao phải được kết nối với bản chính thông qua kết nối mạng. Ngoài ra, người dùng cần thiết lập đặc quyền truy cập cho các luồng WAL của bản sao để thông tin không bị xâm phạm.

Ưu điểm của tính năng sao chép trực tuyến trong PostgreSQL

Một trong những đặc quyền quan trọng nhất của việc sử dụng tính năng sao chép trực tuyến là cách duy nhất để mất dữ liệu là nếu cả máy chủ chính và máy chủ nhận đều bị lỗi cùng một lúc. Nếu bạn đang cung cấp thông tin quan trọng, hãy truyền trực tuyến sao chép tất cả nhưng đảm bảo rằng bản sao công việc của bạn sẽ được lưu.

Người dùng có thể kết nối nhiều hơn một máy chủ dự phòng với máy chủ chính và nhật ký sẽ được truyền trực tuyến từ máy chủ chính đến từng máy chủ dự phòng được kết nối. Nếu một trong các bản sao bị trì hoãn hoặc bị ngắt kết nối, quá trình phát trực tuyến sẽ tiếp tục đến các bản sao khác.

Thiết lập vận chuyển nhật ký thông qua sao chép trực tuyến sẽ không ảnh hưởng đến bất kỳ thứ gì mà người dùng hiện đang chạy trên cơ sở dữ liệu chính. Nếu máy chủ dữ liệu chính phải tắt, nó sẽ đợi cho đến khi các bản ghi cập nhật được gửi đến bản sao trước khi tắt nguồn.

Nhược điểm của sao chép trực tuyến trong PostgreSQL

Sao chép truyền trực tuyến sẽ không sao chép thông tin sang một phiên bản hoặc kiến ​​trúc khác, thay đổi thông tin của máy chủ dự phòng và không cung cấp sao chép chi tiết.

Đặc biệt với sao chép dữ liệu truyền trực tuyến không đồng bộ, các tệp WAL cũ hơn chưa được sao chép vào bản sao có thể được tái chế khi người dùng thực hiện các thay đổi đối với bản chính. Để đảm bảo rằng các tệp quan trọng không bị mất, người dùng có thể đặt wal_keep_segment thành giá trị cao hơn.

Nếu không có thông tin xác thực người dùng được thiết lập cho máy chủ bản sao, dữ liệu nhạy cảm có thể dễ dàng bị trích xuất. Để các bản cập nhật thời gian thực xảy ra giữa bản chính và bản sao, người dùng phải thay đổi phương thức sao chép từ bản sao không đồng bộ mặc định sang bản sao đồng bộ.

Các trường hợp sử dụng để sao chép trực tuyến trong PostgreSQL

Nhiều kỹ sư sẽ sử dụng sao chép trực tuyến cho:

  • Tạo bản sao lưu cho cơ sở dữ liệu chính của họ trong trường hợp máy chủ bị lỗi hoặc mất dữ liệu
  • Tăng cường một giải pháp có tính khả dụng cao với độ trễ sao chép ít nhất có thể
  • Loại bỏ các truy vấn lớn để giảm bớt căng thẳng cho hệ thống chính
  • Phân phối khối lượng công việc cơ sở dữ liệu trên một số máy, đặc biệt đối với các định dạng chỉ đọc

Có gì trong Cửa hàng cho Tương lai?

Nhóm Phát triển Toàn cầu PostgreSQL đã công bố phát hành PostgreSQL 14 vào ngày 30 tháng 9 năm 2021. Phiên bản mới được bổ sung các nâng cấp về cả tính năng phát trực tuyến và các bản sao lôgic thông qua nền tảng.

Để sao chép trực tuyến, phiên bản 14 cho phép người dùng:

  • Đặt thông số máy chủ log_recovery_conflict_waits để tự động báo cáo thời gian chờ xung đột khôi phục lâu
  • Tạm dừng khôi phục trên máy chủ chờ nóng khi thay đổi các thông số trên máy chủ chính (thay vì tắt chế độ chờ ngay lập tức)
  • Sử dụng hàm pg_get_wal_replay_pause_state() để báo cáo trạng thái khôi phục chi tiết hơn
  • Cung cấp thông số máy chủ chỉ đọc in_hot_standby
  • Nhanh chóng cắt ngắn các bảng nhỏ trong quá trình khôi phục trên các cụm có số lượng lớn bộ đệm được chia sẻ
  • Cho phép đồng bộ hóa hệ thống tệp khi bắt đầu khôi phục sự cố thông qua Linux
  • Sử dụng hàm pg_xact_commit_timestamp_origin() trên một giao dịch được chỉ định để trả về dấu thời gian cam kết và nguồn gốc sao chép
  • Sử dụng hàm pg_last_committed_xact() để thêm nguồn gốc sao chép trên bản ghi được trả về
  • Sử dụng các điều khiển quyền của chức năng tiêu chuẩn để thay đổi các chức năng gốc sao chép (mặc định vẫn giới hạn quyền truy cập đối với trình cấp cao)

Để sao chép hợp lý, phiên bản 14 cho phép người dùng:

  • Truyền trực tuyến các giao dịch đang diễn ra trong thời gian dài cho người đăng ký bằng API sao chép hợp lý
  • Cho phép nhiều giao dịch trong quá trình sao chép bảng
  • Tạo các giao dịch phụ trong nhật ký WAL ngay lập tức và các liên kết XID cấp cao nhất
  • Sử dụng hàm pg_create_logical_replication_slot() để nâng cao các API giải mã logic cho các cam kết hai giai đoạn
  • Thêm thông báo hủy bỏ bộ nhớ cache vào WAL trong khi hoàn thành lệnh để cho phép phát trực tuyến hợp lý các giao dịch đang diễn ra
  • Kiểm soát thông điệp giải mã lôgic nào được gửi tới luồng nhân bản
  • Sử dụng chế độ truyền nhị phân để sao chép nhanh hơn
  • Bộ lọc giải mã bằng XID

PostgreSQL đã và đang làm việc với phiên bản 15, phiên bản này sẽ được phát hành vào quý 3 năm 2022. Một trong những vấn đề liên quan đến sao chép sẽ được giải quyết trong phiên bản mới nhất bao gồm việc ngăn chặn việc sử dụng các biến được kế thừa từ môi trường máy chủ trong quá trình sao chép trực tuyến. Nhưng khi nhiều người dùng thích ứng với phiên bản 14, PostgreSQL có thể sẽ thêm nhiều tác vụ hơn để cải thiện các chức năng sao chép.

So sánh bản sao nhanh PostgreSQL:Bản sao lôgic so với truyền trực tuyến

Sao chép lôgic Sao chép truyền trực tuyến
Người mẫu Nhà xuất bản cho người đăng ký Bản sao chính thức
Nhân bản Giao dịch Không
Khoảng trống trong Nhân bản Xung đột sẽ ngừng tái tạo Không đồng bộ - có thể gây ra sự chậm trễ giữa việc truyền dữ liệu giữa bản chính và bản sao; đồng bộ - dữ liệu chỉ bị mất nếu tất cả các máy chủ được kết nối gặp sự cố đồng thời
Nhân rộng trên các nền tảng khác nhau hoặc các phiên bản PostgreSQL Không
Bảo mật Quyền truy cập dữ liệu được giới hạn cho người đăng ký Phải thiết lập thông tin xác thực truy cập để giữ an toàn cho dữ liệu
Kích thước của các bản sao Tốt hơn cho các bản sao chi tiết Tốt hơn cho các bản sao quy mô lớn
Đặc biệt hữu ích cho Hợp nhất nhiều hệ thống thành một cơ sở dữ liệu Tạo cơ sở dữ liệu dự phòng

Kết luận

Chúng tôi hy vọng hướng dẫn này sẽ hữu ích khi bạn thiết lập các chức năng nhân bản của mình. Nếu bạn có bất kỳ câu hỏi nào hoặc bạn muốn biết bất kỳ điều gì khác về cách ScaleGrid có thể giúp bạn triển khai PostgreSQL, hãy liên hệ với một trong nhiều chuyên gia cơ sở dữ liệu của chúng tôi.

Bạn muốn tìm hiểu thêm về ScaleGrid?

Để tìm hiểu thêm về cách ScaleGrid có thể giúp bạn quản lý cơ sở dữ liệu của mình, hãy liên hệ với chúng tôi và chúng tôi có thể cho bạn thấy tất cả những gì DBaaS của chúng tôi cung cấp. Tìm hiểu thêm về cách ScaleGrid có thể cho phép bạn tập trung nhiều hơn vào việc phát triển sản phẩm của mình và ít hơn vào việc quản lý cơ sở dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. An toàn chuỗi postgresql cho các bảng tạm thời

  2. Dữ liệu lớn với PostgreSQL và Apache Spark

  3. Có nhà điều hành postgres CLOSEST không?

  4. Heroku Postgres Error:PGError:ERROR:các tổ chức quan hệ không tồn tại (ActiveRecord ::StatementInvalid)

  5. Sửa chữa hỏng cơ sở dữ liệu postgresql