Prevalence là một kỹ thuật đơn giản để cung cấp các thuộc tính ACID cho mô hình đối tượng trong bộ nhớ dựa trên tuần tự hóa nhị phân và ghi nhật ký ghi trước. Nó hoạt động như thế này:
- Bắt đầu với một ảnh chụp nhanh. Nối tiếp mô hình đối tượng và ghi nó vào một tệp.
- Tạo một tập tin tạp chí. Đối với mỗi cuộc gọi vào mô hình đối tượng, tuần tự hóa cuộc gọi và các đối số của nó.
- Khi tạp chí trở nên quá lớn, bạn đang tắt hoặc nếu không thuận tiện, hãy thực hiện một điểm kiểm tra: viết một ảnh chụp nhanh mới và cắt bớt tạp chí.
- Để khôi phục hoặc khôi phục sau sự cố hoặc mất điện, hãy tải ảnh chụp nhanh cuối cùng và thực hiện lại tất cả các cuộc gọi được ghi trong nhật ký.
Các biện pháp phòng ngừa cần thiết để thực hiện công việc này là:
- Đừng để các tham chiếu đối tượng có thể thay đổi thoát hoặc vào lớp phổ biến. Bạn cần một số loại proxy hoặc lược đồ OID, như thể bạn đang làm RPC. (Đây là một lỗi người mới phổ biến như vậy, nó được đặt biệt danh là ' vấn đề rửa tội '.)
- Tất cả logic có thể truy cập từ một cuộc gọi phải hoàn toàn xác định và không được thực hiện các cuộc gọi I / O hoặc OS có ý nghĩa logic kinh doanh. Viết vào nhật ký chẩn đoán có thể ổn, nhưng việc lấy thời gian hệ thống hoặc khởi chạy một đại biểu không đồng bộ thường không được. Điều này là để tạp chí phát lại giống hệt ngay cả khi nó được khôi phục trên một máy khác hoặc tại một thời điểm khác. (Hầu hết mã phổ biến cung cấp một cuộc gọi thời gian thay thế để có được dấu thời gian giao dịch.)
- Nhà văn đồng thời giới thiệu sự mơ hồ trong giải thích tạp chí, vì vậy nó bị cấm.
Có phải vì ...
- mọi người đã phát triển mùi vị xấu đối với họ sau khi thử sử dụng một dự án không phù hợp * với nó?
- Sự ủng hộ tầm thường của Klaus Wuestefeld đã khiến mọi người tắt ?
- những người thích mô hình lập trình mệnh lệnh không thích tách I / O khỏi tính toán , thay vào đó thích xen kẽ tính toán với I / O và các cuộc gọi luồng?
- Các lớp phổ biến rất đơn giản về mặt khái niệm và liên kết chặt chẽ với các đặc điểm của khung mà họ sinh sống mà họ thường tùy chỉnh cho dự án, điều này khiến chúng trở nên quá xa lạ / không chuẩn / rủi ro?
- Thật khó để giữ thẳng những gì bạn phải cẩn thận không làm gì?
- Đầu của người mới dường như nổ tung khi phải đối mặt với một thứ không giống với ứng dụng điều khiển cơ sở dữ liệu hai lớp mà họ đã học để viết ở trường? ;)
* Các toàn bộ phù hợp tập dữ liệu trong RAM , bạn không cần phải nhà văn đồng thời, và bạn không cần phải làm gì ad-hoc truy vấn, báo cáo, hoặc xuất khẩu sang một kho dữ liệu. Với lời xin lỗi tới SQLite, mức độ phổ biến là một cải tiến đối với các tệp lưu, không phải là sự thay thế cho Oracle.