2009-05-13 30 views
5

Yêu cầu của tôi là cho một mô hình dữ liệu trong đó một đường mòn kiểm toán đầy đủ được giữ lại để thay đổi mọi thuộc tính của mọi đối tượng. Định nghĩa đối tượng cũng là chất lỏng: thuộc tính mới có thể xuất hiện hoặc biến mất theo thời gian. Đường mòn kiểm tra này sẽ tách biệt với cơ sở dữ liệu gốc, do đó, mô hình kiểm tra dựa trên trình kích hoạt sẽ không hoạt động.Triển khai tốt nhất cho mô hình dữ liệu có thể kiểm tra đầy đủ?

Trong cơ sở dữ liệu quan hệ, tôi có thể thực hiện điều này với một bảng ATTRIBUTE_HISTORY lớn duy nhất ghi lại mọi thay đổi riêng lẻ cho mỗi thuộc tính, với dấu thời gian và các trường trách nhiệm thích hợp.

Câu hỏi của tôi: là bất kỳ mô hình lưu trữ mới hơn nào (BigTable, HBase, CouchDB, RDF cửa hàng, v.v.) vượt trội so với RDBMS cho mục đích này?

Trả lời

0

Bạn cũng có thể tạo hệ thống ghi nhật ký trong mã ứng dụng. Đăng nhập các cuộc gọi đến mọi chức năng mà sửa đổi cơ sở dữ liệu và kết quả trong một COMMIT thành công.

Trả lời cho câu hỏi của bạn: không, chỉ cần sử dụng RDBMS. Sẽ dễ dàng hơn khi chạy truy vấn trên nhật ký.

+1

Sự cố với việc kiểm tra trong ứng dụng là không phải mọi thay đổi đối với dữ liệu đều xảy ra trong ứng dụng. Theo tôi, đó là một thực tế rất xấu để đặt kiểm toán chỉ trong applciation. – HLGEM

1

Tôi không thấy lý do nào khiến trình kích hoạt không thể tham chiếu đến cơ sở dữ liệu khác. Tuy nhiên, tất cả các thay đổi sẽ thất bại nếu cơ sở dữ liệu đó không có sẵn mà có thể là một vấn đề nếu cơ sở dữ liệu kiểm toán nằm trên một máy chủ khác và conectin bị hỏng. Nhưng kiểm toán của chúng tôi là thông qua các trình kích hoạt và chúng tôi có một cơ sở dữ liệu kiểm toán riêng biệt.

0

Tôi không nghĩ rằng một mô hình cơ sở dữ liệu cụ thể có thể được xem là vượt trội hơn bất kỳ mẫu nào khác cho nhật ký kiểm tra. Nó không phải là quá nhiều một vấn đề mô hình dữ liệu vì nó là một vấn đề đăng nhập và có thể được coi là phần trực giao với kho dữ liệu.

Điều đó đang được nói CouchDB có thể được định cấu hình để không bao giờ xóa các phiên bản tài liệu cũ. Với việc thêm dấu thời gian và có thể là trường người dùng vào từng tài liệu, bạn có thể sử dụng tính năng này để tự động lưu giữ toàn bộ lịch sử của tất cả các đối tượng được lưu trữ trong db. Đó có thể là cách dễ nhất trong thiết lập hộp để ghi nhật ký kiểm tra mà bạn có thể nhận được trong cơ sở dữ liệu.

Đối với những người khác tôi không biết loại hỗ trợ nào họ có thể có về vấn đề này.

Hãy cẩn thận:

(Bạn cũng sẽ phải tuân theo một không bao giờ xóa chiến lược cho các đối tượng trong db và chỉ cần đánh dấu đối tượng bị xóa thay vì)

(Đối với một RDBMS là giải pháp đơn giản nhất có thể là một bảng đơn giản mà ghi nhật ký mọi câu lệnh chèn, cập nhật hoặc xóa chạy trên cơ sở dữ liệu trong trường văn bản có dấu thời gian và trường người dùng. Tôi đã làm điều đó một lần trên cơ sở dữ liệu postgres và nó hoạt động khá tốt để giữ lịch sử)

0

Tạo bảng chứa tên của các bảng bạn muốn kiểm toán (ví dụ: AuditTable); các cột tối thiểu phải là: TableName (varchar), RandomValue (float). Thêm một trigger trên AuditTable sẽ kích hoạt bất cứ khi nào một RandomValue thay đổi - công việc của trigger này sẽ được thả tự động tạo lại trigger kích hoạt cho mỗi bảng được liệt kê (TableName) trong AuditTable. Trình kích hoạt kiểm tra (cho mỗi bảng) sẽ chèn vào bảng AuditRecord, nó sẽ ghi lại: tên bảng, ID khóa chính, loại hành động (INSERT/UPDATE/DELETE), giá trị trường gốc và giá trị trường được cập nhật. Nếu thay đổi cấu trúc bảng, bản cập nhật đơn giản của RandomValue trong AuditTable sẽ làm cho trình kích hoạt tạo lại. Bạn sẽ cần viết mã tự động tạo trình kích hoạt cho một bảng đã cho; đề nghị chỉ sử dụng 1 số nguyên chính trên mỗi bảng được kiểm tra.

0

Hiệu suất sẽ là mối quan tâm đối với các đường mòn kiểm tra đó. Tôi sẽ đi cho một bộ nhớ cache (mà là khá lỗi khoan dung) và tồn tại nội dung bộ nhớ cache khi đếm đạt đến ngưỡng nhất định (nói 1000 hồ sơ). Điều này lý tưởng là một cập nhật hàng loạt.

Tôi cảm thấy cơ sở dữ liệu trong bộ nhớ có các tùy chọn kiên trì (như H2) cũng nên thực hiện tương tự. Nhưng tôi đã không sử dụng nó bản thân mình.

3

Câu hỏi về cách lưu trữ dữ liệu phụ thuộc vào cách nó sẽ được sử dụng trong số các vấn đề khác. Tôi muốn đề nghị đi với một cái gì đó đơn giản mà bạn hiểu cho bây giờ, thử nghiệm nếu bạn có một ý tưởng về khả năng tải bạn mong đợi. Sau đó, trong tương lai thực hiện các cải tiến khi cần thiết.

Liên quan đến vấn đề của bạn với hệ thống kiểm tra dựa trên trình kích hoạt, vì có vẻ như bạn đã hoàn thành công việc ở cấp cơ sở dữ liệu tôi đã đề xuất một. Sử dụng trình kích hoạt để ghi nhật ký các thay đổi vào bảng trong cơ sở dữ liệu, sau đó qua đêm (hoặc thường xuyên) xử lý nội dung của bảng và tạo đường kiểm tra ở bất cứ nơi nào nó được lưu trữ và làm trống nội dung của bảng trong cơ sở dữ liệu. Bằng cách này bạn có thể nắm bắt các thay đổi ở cấp cơ sở dữ liệu nhưng vẫn đáp ứng yêu cầu của bạn để lưu trữ đường dẫn kiểm toán thực tế ở nơi khác.

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