2010-06-28 16 views

Trả lời

0

Nếu mô hình của bạn ở mức trừu tượng phù hợp, việc khai báo một số phương pháp đồng bộ nên đảm bảo tính toàn vẹn.

Nếu bạn hoàn toàn cần phải chia sẻ ổ khóa tập tin giữa các JVM hoặc các quá trình nặng, bạn có thể muốn xem xét java.util.concurrent.locks.ReentrantReadWriteLock hoặc java.nio.channels.FileLock (từ javadoc):

API khóa tệp này nhằm mục đích ánh xạ trực tiếp tới khóa cơ sở gốc của hệ điều hành cơ bản . Do đó, các khóa được lưu giữ trên tệp sẽ hiển thị cho tất cả các chương trình mà có quyền truy cập vào tệp, bất kể ngôn ngữ trong đó các chương trình được viết.

Ồ, và Java: thread-safe RandomAccessFile chắc chắn xứng đáng được chú ý.

2

Chính xác những vấn đề bạn gặp phải là gì? Bạn có cần hỗ trợ đầy đủ ACID, với cách ly giao dịch đồng thời, rollback, vv Hay bạn "chỉ" cần một chút mạnh mẽ hơn để đối phó với một số loại thất bại? Giải pháp sẽ phụ thuộc vào yêu cầu của bạn.

Đây là danh sách các khung công tác giải quyết vấn đề của hệ thống tệp giao dịch.

Nếu ứng dụng của bạn chạy trong một Java EE máy chủ ứng dụng, bạn có thể có một cái nhìn tại

Đối đồng bằng Java, bạn có thể có một cái nhìn tại

Nói chung, việc có hệ thống tệp giao dịch rất phức tạp. Nếu không, bạn có thể tự mình tạo ra một thiết kế để cung cấp một số độ mạnh mẽ. Đây là an answer nơi tôi phác thảo một thiết kế cung cấp thường là đủ độ mạnh. Đảm bảo bạn cũng hiểu cách xả (ví dụ: FileOutputStream.flush) hoạt động với API java File để tăng cường độ mạnh mẽ. Nếu bạn muốn toàn bộ ACID độ bền thì việc lưu trữ dữ liệu trong cơ sở dữ liệu trở nên dễ dàng hơn nhiều.

Một lần nữa, giải pháp sẽ phụ thuộc vào mức độ mạnh mẽ chính xác mà bạn cần.Một số vấn đề có thể được giải quyết ở cấp thiết kế (ổ khóa, tuôn ra, vv), một số sẽ yêu cầu thư viện của bên thứ ba có giao dịch thực.

liên quan:

0

Khi bạn đang tìm kiếm có giao dịch (với thuộc tính ACID) trên các file hệ thống, XADisk có thể hữu ích cho bạn . Thay vì RandomAccessFile mà bạn đã đề cập, nó sử dụng FileChannel (Java NIO) trong nội bộ.

Vui lòng cho tôi biết nếu bạn có bất kỳ câu hỏi nào.

Xin cảm ơn, Nitin

Các vấn đề liên quan