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

Bản sao mySQL có nhất quán dữ liệu ngay lập tức không?

Tính nhất quán theo nghĩa nó được sử dụng trong ACID có nghĩa là tất cả các ràng buộc đều được thỏa mãn trước và sau bất kỳ thay đổi nào. Khi một hệ thống đảm bảo rằng bạn không thể đọc dữ liệu không nhất quán, chẳng hạn như họ nói rằng bạn sẽ không bao giờ đọc dữ liệu trong đó hàng con tham chiếu đến hàng mẹ không tồn tại hoặc nơi một nửa giao dịch đã được áp dụng nhưng nửa còn lại chưa được áp dụng (ví dụ trong sách giáo khoa đang ghi nợ một tài khoản ngân hàng nhưng chưa ghi có vào tài khoản ngân hàng của người nhận).

Bản sao trong MySQL là không đồng bộ theo mặc định, hoặc tốt nhất là "bán đồng bộ". Chắc chắn nó có độ trễ trong cả hai trường hợp. Trên thực tế, bản sao sao chép luôn trễ hơn ít nhất một phần giây, bởi vì bản chính không ghi các thay đổi vào nhật ký nhị phân của nó cho đến khi giao dịch thực hiện, sau đó bản sao phải tải xuống nhật ký nhị phân và chuyển tiếp sự kiện.

Nhưng những thay đổi vẫn mang tính nguyên tử. Bạn không thể đọc dữ liệu bị thay đổi một phần. Bạn có thể đọc các thay đổi đã cam kết, trong trường hợp đó tất cả các ràng buộc đều được thỏa mãn hoặc nếu các thay đổi chưa được cam kết, trong trường hợp đó, bạn sẽ thấy trạng thái dữ liệu từ trước khi giao dịch bắt đầu.

Vì vậy, bạn có thể tạm thời đọc dữ liệu trong hệ thống sao chép bị trễ, nhưng bạn sẽ không đọc được không nhất quán dữ liệu.

Trong khi trong hệ thống "cuối cùng nhất quán", bạn có thể đọc dữ liệu được cập nhật một phần, trong đó một tài khoản đã được ghi nợ nhưng tài khoản thứ hai chưa được ghi có. Vì vậy, bạn có thể xem dữ liệu không nhất quán.

Bạn nói đúng rằng bạn có thể cần phải cẩn thận về việc đọc từ các bản sao nếu ứng dụng của bạn yêu cầu dữ liệu hoàn toàn mới. Mỗi ứng dụng có dung sai khác nhau đối với độ trễ sao chép và trên thực tế trong một ứng dụng, các truy vấn khác nhau có khả năng chịu độ trễ khác nhau. Tôi đã trình bày về điều này: Đọc / Ghi Tách cho MySQL và PHP (Hội thảo trên web Percona 2013)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để sử dụng nhiều cơ sở dữ liệu bằng php?

  2. Chuyển mật khẩu cho mysql_config_editor bằng cách sử dụng biến trong shell

  3. Truy vấn MYSQL giữa hai dấu thời gian

  4. Truy vấn MySQL để lấy tên cột?

  5. MySQL Cách gán giá trị null cho các cột không khớp khi sử dụng Group By