11 điểm bởi GN⁺ 2024-11-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Một trong những hiểu lầm phổ biến về SQLite là mọi người nghĩ rằng “SQLite là cơ sở dữ liệu chỉ cho phép một kết nối duy nhất”, nên họ không dùng nó
  • Điều này vừa gây nhầm lẫn (ở đây “kết nối” có nghĩa là gì?), vừa sai ở nhiều khía cạnh
  • Thao tác đọc (Read Operations)
    • SQLite hỗ trợ hoàn toàn nhiều thao tác đọc đồng thời
    • Có thể đọc dữ liệu đồng thời từ nhiều “kết nối” mà không xảy ra xung đột hay vấn đề gì
  • Thao tác ghi (Write Operations)
    • SQLite sử dụng khóa ghi (Write Lock) ở cấp độ DB khi thực hiện thao tác ghi
    • Không cho phép nhiều thao tác ghi đồng thời, vì vậy tại một thời điểm chỉ một “kết nối” có thể thực hiện thao tác ghi
    • Thông thường điều này không trở thành vấn đề vì có thể bắt đầu IMMEDIATE TRANSACTION
    • Trong trường hợp này, SQLite có thể thử lại trong hàng đợi để giành được khóa ghi
      • (Cách này cho phép thao tác ghi được thực hiện tự động khi khóa ghi được giải phóng)

1 bình luận

 
savvykang 2024-11-15

https://www.sqlite.org/lockingv3.html

5.0 Ghi vào tệp cơ sở dữ liệu
Để ghi vào cơ sở dữ liệu, trước tiên tiến trình phải giành được khóa SHARED như đã mô tả ở trên. Sau khi giành được khóa SHARED, nó phải tiếp tục giành được khóa RESERVED. Khóa RESERVED báo hiệu rằng tiến trình sẽ ghi vào cơ sở dữ liệu ở một thời điểm nào đó trong tương lai. Mỗi lần chỉ có một tiến trình có thể giữ khóa RESERVED. Tuy nhiên, các tiến trình khác vẫn có thể tiếp tục đọc cơ sở dữ liệu trong khi khóa RESERVED đang được giữ.