Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Đảm Bảo Toàn Vẹn Dữ Liệu: Hướng Dẫn Toàn Diện Về Nhất Quán Cơ Sở Dữ Liệu

Nhất quán cơ sở dữ liệu (Database Consistency) là gì?

Nhất quán cơ sở dữ liệu được định nghĩa bởi một tập giá trị mà tất cả các điểm dữ liệu trong hệ thống database phải tuân thủ để được đọc và chấp nhận đúng cách. Nếu bất kỳ dữ liệu nào không đáp ứng giá trị điều kiện tiên quyết nhập vào database, sẽ dẫn đến lỗi nhất quán (consistency errors) cho tập dữ liệu. Nhất quán database đạt được bằng cách thiết lập quy tắc. Bất kỳ giao dịch dữ liệu ghi vào database chỉ được thay đổi dữ liệu bị ảnh hưởng theo đúng ràng buộc, trigger, biến, cascade, v.v. do quy tắc của nhà phát triển database thiết lập.

Ví dụ, giả sử bạn làm cho Viện An Toàn Giao Thông Quốc gia (NTSI). Bạn được giao tạo database bằng lái mới California. Dân số California bùng nổ 10 năm qua, tạo nhu cầu định dạng chữ cái và số mới cho tất cả người lấy bằng lái lần đầu. Team bạn xác định giá trị tập hợp mới cho bằng lái California trong database như sau: 1 Chữ cái + 7 Số. Mọi entry phải tuân theo quy tắc này. Entry "C08846024" sẽ báo lỗi. Tại sao? Vì giá trị nhập là 1 Chữ cái + 8 Số, về bản chất là một dạng dữ liệu không nhất quán.

Nhất quán cũng ngụ ý rằng bất kỳ thay đổi dữ liệu đối với đối tượng cụ thể nào trong một bảng cần được thay đổi trong tất cả các bảng khác nơi đối tượng đó hiện diện. Tiếp tục ví dụ bằng lái, nếu địa chỉ nhà người lái mới thay đổi, cập nhật đó phải phản ánh qua tất cả bảng nơi địa chỉ cũ tồn tại. Nếu một bảng có địa chỉ cũ và tất cả các bảng khác có địa chỉ mới, đó là ví dụ điển hình của dữ liệu không nhất quán (data inconsistency).


Lưu ý: Nhất quán database không đảm bảo dữ liệu đưa vào trong giao dịch nào là chính xác. Nó chỉ đảm bảo dữ liệu ghi và đọc trong hệ thống đáp ứng mọi điều kiện tiên quyết của dữ liệu đủ điều kiện vào database. Nói đơn giản, ví dụ trên, bạn có thể nhập giao dịch dữ liệu tuân thủ quy tắc 1 Chữ cái + 7 Số, nhưng không đảm bảo dữ liệu tương ứng với bằng lái thực. Nhất quán database không quan tâm dữ liệu đại diện cho gì, chỉ quan tâm định dạng.

Tại Sao Nhất Quán Database Quan Trọng?

Dữ liệu nhất quán (Consistent data) là thứ giữ database hoạt động như máy móc bôi trơn tốt. Quy tắc/giá trị thiết lập giữ dữ liệu không nhất quán (inconsistent data) ra khỏi database chính và replica giữ hoạt động trơn tru với:

  • Độ chính xác (Accuracy)
  • Tăng dung lượng database
  • Truy xuất dữ liệu nhanh hơn và hiệu quả hơn

Nhất quán database điều chỉnh tất cả dữ liệu đến. Vì vậy dù database thay đổi khi chấp nhận dữ liệu mới, nó ít nhất thay đổi nhất quán và theo quy tắc xác thực thiết lập từ đầu. Trong thế giới hiện nay, có quyết định tỷ đô la hàng ngày trên toàn cầu dựa trên nhất quán được cảm nhận (perceived consistency) của database. Khi thông tin thời gian thực trở thành tiêu chuẩn mới cho doanh nghiệp số hiện đại, việc đặt quy tắc xác thực để giữ dataset sạch khỏi thông tin sai sót là cực kỳ quan trọng, vì dữ liệu sai cũng tăng latency, làm trải nghiệm thời gian thực không còn thực sự thời gian thực.

Ví Dụ Nhất Quán Database

Ví dụ hoạt động nhất quán database trong thực tế? Chúng ta đã khám phá ví dụ NTSI. Hãy chuyển sang ngành ngân hàng.

Giả sử bạn chuyển tiền từ tài khoản này sang tài khoản khác. Bạn vừa chuyển $1200 vào tài khoản đã có $300. Bạn refresh, chắc chắn sẽ thấy số dư $1500. Tuy nhiên, hoạt động gần đây không phản ánh trong số dư. Thực tế, số dư mới đọc $0. Lỗi kỹ thuật này là ví dụ điển hình của nhất quán yếu (weak consistency) và có thể dẫn đến thời gian troubleshooting với nhân viên ngân hàng. Vấn đề như vậy có thể làm xấu uy tín thương hiệu và tốn kém đáng kể. Nhất quán mạnh (Strong consistency) trong hệ thống database ngày càng trở thành điều không thể thương lượng, cho cả dev và người tiêu dùng.

Nhất Quán Mạnh vs Nhất Quán Yếu

Nhất Quán Mạnh (Strong Consistency) nghĩa là tất cả dữ liệu trong primary, replica và tất cả node tương ứng tuân thủ quy tắc xác thực và giống nhau tại bất kỳ thời điểm nào. Với strong database consistency, không quan trọng client nào truy cập dữ liệu – họ luôn thấy dữ liệu cập nhật mới nhất tuân thủ quy tắc thiết lập cho database.

Nhất quán yếu (Weak consistency) hơi như phương Tây hoang dã. Không có bảo chứng dữ liệu trong primary, replica, hay node giống nhau tại bất kỳ thời điểm nào. Client ở Ấn Độ có thể truy cập dữ liệu và thấy thông tin qua quy tắc xác thực, nhưng có thể không phải dữ liệu cập nhật mới nhất, dẫn đến lỗi nhất quán (consistency errors). Họ có thể hành động dựa trên thông tin không còn liên quan, dù tại một thời điểm nó có thể đã đúng.

Mức Độ Nhất Quán (Consistency Levels)

Mức độ nhất quán (Consistency levels) là tập giá trị điều kiện tiên quyết khác quy định bao nhiêu replica hoặc node phải phản hồi với dữ liệu cho phép mới trước khi được xác nhận là giao dịch hợp lệ. Thao tác này có thể thay đổi trên cơ sở mỗi giao dịch. Ví dụ, lập trình viên có thể quy định chỉ cần hai node đọc dữ liệu mới nhập thì xác nhận nhất quán dữ liệu. Khi vượt ngưỡng đó, nó sẽ được coi là dữ liệu nhất quán từ đó.

Mức Độ Cô Lập (Isolation Levels)

Mức độ cô lập là một phần của thuộc tính ACID (Atomicity, Consistency, Isolation, Durability) của database. ACID là khái niệm nền tảng của nhất quán database với SQL database và là những gì một số database tuân theo để tối ưu hóa nhất quán database. Cô lập (Isolation) là một trong thuộc tính ACID, và nó phân buồng (compartmentalizes) các mảnh dữ liệu cụ thể ra khỏi tất cả thông tin trong mạng database nhất định, giữ nó không bị sửa đổi bởi giao dịch người dùng khác. Isolation được dùng để hạn chế đọc và ghi dữ liệu vô nghĩa sản sinh trong giao dịch đồng thời.

Có bốn loại mức độ cô lập:

  • Read Uncommitted: Mức thấp nhất. Ngăn cập nhật hàng nếu giao dịch trước cung cấp cập nhật chưa commit cho hàng đó.
  • Read Committed: Không cho phép "dirty reads". Chặn đọc/ghi nếu giao dịch đã cập nhật nhưng chưa commit.
  • Repeatable Read: Mức này giữ hàng dữ liệu đang đọc không bị truy cập và có thể cập nhật.
  • Serializable: Mức cô lập cao nhất, serializable thường khóa toàn bộ bảng thay vì hàng cụ thể.

Câu Hỏi Thường Gặp Về Nhất Quán Database

Dữ liệu nhất quán nghĩa là gì?

Dữ liệu nhất quán nếu nó xuất hiện giống nhau trong tất cả node tương ứng cùng lúc, bất kể người dùng và vị trí địa lý truy cập.

Nhất quán dữ liệu có giống nhất quán database không?

Không. Nhất quán database yêu cầu quy tắc xác thực cho dữ liệu vào mạng để nhất quán, công thức, với tất cả dữ liệu khác trong bảng.

Nhất quán dữ liệu là quá trình giữ dữ liệu đồng nhất nhất có thể xuyên suốt mạng và giữa nhiều ứng dụng tận dụng dữ liệu đó.

Nhất quán cuối cùng (Eventual Consistency) là gì?

Với eventual consistency, dữ liệu đã cập nhật cuối cùng sẽ được phản ánh trong tất cả node lưu dữ liệu đó. Cuối cùng, tất cả node sẽ sản xuất cùng dữ liệu khi bất kỳ client nào truy cập trong mạng qua eventual consistency.

Một bảng đơn trong database quan hệ bao gồm?

Tất cả dữ liệu trong database quan hệ lưu trong bảng, bao gồm hàng và cột. Điểm dữ liệu tổ chức trong hàng và cột này. Hàng (thường gọi "records") thường đại diện cho danh mục dữ liệu, còn cột ("fields") đại diện cho "instances". Bảng nằm trong database và giúp giữ dữ liệu không bị dư thừa nhờ thiết kế theo chủ đề.

Database quan hệ bao gồm tập hợp?

Các bảng (Tables)

Mô hình ACID so với mô hình BASE như thế nào?

Khác biệt chính giữa ACID và BASE (Basically Available, Soft State, Eventually Consistent) là trong khi ACID tối ưu hóa nhất quán database, BASE củng cố high availability. ACID giữ giao dịch nhất quán, nên nếu chọn BASE, hãy chắc chắn nhất quán vẫn là ưu tiên hàng đầu và được giải quyết kỹ.

Database Redis có nhất quán không?

Khi Redis dùng làm cache, nhất quán liên quan có thể giữa các instance Redis (primary/replica) và giữa Redis cache và Redis làm primary database. Trong trường hợp này, dữ liệu có thể không nhất quán nếu dữ liệu giữa hai không khớp. Blog của chúng tôi, Ba Cách Duy Trì Nhất Quán Cache, giải quyết vấn đề này.

Đối với open source Redis, có weak consistency, nhưng Redis Enterprise's Active–Active Geo-Distribution cung cấp strong eventual consistency.

Quan tâm kỹ thuật caching đám mây cho ứng dụng doanh nghiệp? Nhấn dưới để đọc Caching at Scale with Redis của Lee Atchison.