2011-09-18 23 views
5

Oracle database change notification feature gửi hàng rào (địa chỉ hàng thực) trên chèn, cập nhật và xóa hàng. Như được chỉ ra trong tài liệu của oracle, ứng dụng này có thể được ứng dụng sử dụng để xây dựng một cache tầng giữa. Nhưng điều này dường như mâu thuẫn khi chúng ta có một cái nhìn chi tiết về cách id hàng hoạt động.Thông báo thay đổi cơ sở dữ liệu Oracle và ROWID

ROWID (địa chỉ hàng thực) có thể thay đổi khi các hoạt động cơ sở dữ liệu khác nhau được thực hiện như được chỉ ra bởi this stackoverflow thread. Ngoài ra, như tom đề cập đến trong bảng thread cụm này có thể có cùng một rowid.

Dựa trên nghiên cứu trên, có vẻ như không an toàn khi sử dụng hàng được gửi trong khi thông báo thay đổi cơ sở dữ liệu là khóa trong bộ nhớ cache của ứng dụng phải không? Điều này cũng đặt ra một câu hỏi - Tính năng thông báo thay đổi cơ sở dữ liệu có nên được sử dụng để xây dựng bộ nhớ cache của máy chủ ứng dụng không? hoặc là một khuyến nghị được thực hiện để khởi động lại tất cả các cụm máy chủ ứng dụng (để tải lại/làm mới bộ nhớ đệm) khi các bảng của các đối tượng được lưu trong bộ nhớ cache trải qua bất kỳ hoạt động nào dẫn đến thay đổi của rowid? Đó có phải là một giả thiết tốt cho môi trường sản xuất không?

+0

Tại sao bạn không dựa vào các thực thể nghiệp vụ/thuộc tính miền? – zerkms

+0

Tôi không hoàn toàn hiểu đề xuất của bạn. Với thông báo thay đổi cơ sở dữ liệu, oracle chỉ gửi rowid cho các hàng được chèn/cập nhật. Nó không thể được cấu hình để cung cấp bất kỳ thông tin cột nào khác trong bảng đó. –

+0

có, và tại sao bạn không tạo lớp lưu trữ trong Lớp Truy cập Dữ liệu của bạn, dựa vào dữ liệu nghiệp vụ, không liên quan đến lưu trữ. Bạn có nghĩ rằng bạn có thể cache dữ liệu tốt hơn oracle không? – zerkms

Trả lời

5

Dường như với tôi không có thao tác nào có khả năng thay đổi ROWID là một hoạt động sẽ được thực hiện trong môi trường sản xuất trong khi ứng dụng đang chạy. Hơn nữa, tôi đã nhìn thấy rất nhiều phần mềm hiệu quả sử dụng giao dịch ROWID trên toàn bộ (thường chỉ trong vài giây hoặc vài phút). Phần mềm đó có thể sẽ bị lỗi trước khi bộ nhớ cache của bạn nếu ROWID thay đổi. Vì vậy, việc tạo bộ nhớ cache cơ sở dữ liệu dựa trên thông báo thay đổi có vẻ hợp lý với tôi. Chỉ cần cung cấp một tuyên bố từ chối trách nhiệm nhỏ liên quan đến ROWID.

Thao tác chỉ có vấn đề là bản cập nhật gây ra chuyển động đến phân vùng khác. Nhưng đó là điều hiếm khi xảy ra vì nó đánh bại mục đích của phân vùng, ít nhất là nếu nó xảy ra thường xuyên. Nhà thiết kế của một lược đồ cơ sở dữ liệu cụ thể sẽ có thể cho bạn biết liệu một hoạt động như vậy có thể xảy ra và có liên quan đến bộ nhớ đệm hay không. Nếu không có bảng nào có số ENABLE ROW MOVEMENT, bạn thậm chí không cần hỏi nhà thiết kế.

Để nhân bản ROWID: ROWID không phải là duy nhất trên toàn cầu, chúng là duy nhất trong một bảng. Và bạn được cung cấp cả ROWID và tên bảng trong thông báo thay đổi. Vì vậy, tuple của ROWID và tên bảng là một khóa duy nhất hoàn hảo để xây dựng một bộ đệm đáng tin cậy.

+0

Nghe đúng. Trong khi nghiên cứu thêm về chủ đề này, tôi đã đi qua các bảng chỉ mục được tổ chức (IOT). Họ có hàng logic hợp lý có thể thay đổi kể từ khi các hàng được lưu trữ trong một cách sắp xếp. Vì vậy, khi sử dụng DCN, chúng tôi phải luôn đảm bảo rằng bảng cơ sở dữ liệu không phải là bảng chỉ mục được tổ chức, đúng không? –

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