2010-03-15 38 views
5

Bạn có thấy các nguyên tắc cơ sở dữ liệu/quy tắc toàn vẹn tham chiếu đang được sử dụng theo cách thay đổi dữ liệu thực tế trong cơ sở dữ liệu hay không (thay đổi hàng w trong bảng x gây ra thay đổi trong hàng y trong bảng z))?Trình kích hoạt cơ sở dữ liệu/tính toàn vẹn tham chiếu và bộ nhớ đệm trong bộ nhớ

Nếu có, Làm thế nào điều này gắn liền với sự phổ biến ngày càng tăng của bộ nhớ đệm trong bộ nhớ (memcache và bạn bè)? Sau khi tất cả, những hành động này xảy ra bên trong cơ sở dữ liệu nhưng hệ thống bộ nhớ đệm phải nhận thức được chúng để phản ánh đúng trạng thái (hoặc ít nhất là vô hiệu hóa trạng thái có thể thay đổi). Tôi cảm thấy khó tin rằng các cuộc gọi lại được thực hiện cho những trường hợp như vậy.

Có ai có kinh nghiệm thực tế với một kinh nghiệm thiết lập/thực thế giới như vậy với xem xét thiết lập như vậy và từ bỏ nó (mà cách cậu đi đâu? Nếu bộ nhớ đệm, làm thế nào để bạn thực thi toàn vẹn?)

Trả lời

5

đơn giản trả lời:

  • toàn vẹn tham chiếu là một phải có
  • Caching là một đủ tiêu chuẩn phải có
  • Gây nên là một tốt đẹp để có

Còn trả lời

Tôi đã phát triển các ứng dụng trên cơ sở dữ liệu quan hệ từ năm 1993 (Dec RDB kể từ khi bạn hỏi, và trên hệ thống tập tin phẳng trước đó) và trình kích hoạt chưa bao giờ phổ biến với nhiều nhà phát triển vì họ có thể 'xóa nội dung mà bạn không muốn xóa'. Tính toàn vẹn tham chiếu cũng thường được các nhà phát triển cau mày bởi vì một cơ sở dữ liệu ở dạng bình thường thứ ba với tính toàn vẹn tham chiếu thích hợp rất khó để kết hợp với nhau trong một vài phút.

Caching cũng thường được coi là khá 'khó' để làm đúng, mặc dù tôi không chắc chắn tại sao.

Trong khi nhiều hệ thống có thể sống mà không có trình kích hoạt, tôi muốn nói rằng không có cơ sở dữ liệu ứng dụng nào có thể tồn tại một cách thoải mái mà không có tính toàn vẹn tham chiếu. Nhìn vào các thẻ trên câu hỏi này, cơ sở dữ liệu đằng sau trang này sẽ có một bảng cho các thẻ (có thể được gọi là 'Thẻ') và các câu hỏi (có thể được gọi là 'Câu hỏi'). 'Câu hỏi' sẽ có khóa ngoài cho khóa chính trên bảng Thẻ, nhưng khi câu hỏi có thể có nhiều thẻ và thẻ có thể có nhiều câu hỏi, tôi đoán rằng mối quan hệ như sau:

Question 
    (TagId)   1 | Database triggers/referential integrity and in-memory caching 
     | 
    ----- 
    | | | 
    QuestionTag 
(QuestionId)  1 | 1 ... 1 | 2 ... 1 | 3 ... 
    (TagId) 
    | | | 
    ----- 
     | 
    Tag   1 | database ... 2 | referential-integrity ... 3 | triggers ... 
    (TagId) 

Loại này tính toàn vẹn tham chiếu là nền tảng của bất kỳ ứng dụng đáng tin cậy nào và không thể thương lượng được. Bạn có thể thấy nó thêm độ tin cậy vào thiết kế ứng dụng và sự tự tin trong tuổi thọ của nó như thế nào.

Bộ nhớ đệm trên SO có thể được bật cho những thứ như thẻ (mặc dù nó không được đảm bảo) vì vậy giả sử rằng thẻ được lưu trong bộ nhớ và bạn có đủ danh tiếng để được phép thêm thẻ vào SO . Bạn thêm thẻ của bạn và nó cũng có thể được tiếp tục tồn tại cho cơ sở dữ liệu ngay lập tức - nhưng là bộ nhớ cache sau đó cập nhật?

Những gì bạn có là sự cân bằng. Trang web có thể tồn tại mà không biết về thẻ mới của bạn không? Và nếu như vậy trong bao lâu? Về cơ bản vòng đời của thẻ là gì, vì nó tiến triển từ việc người dùng thêm vào trong cơ sở dữ liệu, có sẵn cho những người dùng khác, được sử dụng bởi những người dùng khác?Bộ nhớ cache sẽ được xây dựng lại theo các quy tắc được thiết lập bởi nhóm phát triển - và quy tắc đó sẽ là sự cân bằng để mọi thẻ mới có sẵn đủ nhanh mà không làm chậm ứng dụng.

Trình kích hoạt có thể thực thi tính toàn vẹn tham chiếu, cho biết thẻ bạn thêm là 'rác', nhưng do thời gian quản trị viên thấy ba câu hỏi được gắn thẻ 'rác'. Sau đó, quản trị viên quyết định xóa thẻ 'rác' - nhưng những câu hỏi được gắn thẻ với nó thì sao? Nếu có trình kích hoạt trên bảng 'thẻ' được kích hoạt khi xóa, nó có thể chạy quanh bảng 'câu hỏi' và xóa tất cả các tham chiếu đến 'rác'. Có rất nhiều lựa chọn thay thế cho cách tiếp cận này - nhiều trong số đó là các vùng làm việc có lập trình - nhưng có cách thay thế sạch hơn không?

Tôi đã làm việc trên nhiều trang web trong 20 năm qua, những trang web tốt sử dụng tính toàn vẹn tham chiếu và ngày càng nhiều bộ nhớ đệm. Các trình kích hoạt thay đổi dữ liệu nặc danh (tất cả về cơ bản chúng là các thủ tục được lưu trữ theo sự kiện) không phổ biến và ngày càng bị hiểu lầm nhưng vẫn có vai trò.

Tính toàn vẹn của bộ đệm và tham chiếu không thể được coi là một nhóm phát triển hoặc phải thiết kế các ứng dụng sao cho cả hai có thể được kết hợp.

+0

Chà, một câu trả lời đúng đắn. Tuy nhiên, tôi vẫn không thể hiểu được các giải pháp lưu trữ bộ nhớ tạm thời hoạt động như thế nào với bản cập nhật "hậu trường". Mỗi thay đổi đối với các quy tắc toàn vẹn tham chiếu cơ sở dữ liệu có khả năng tạo ra một lỗ hổng lớn trong giải pháp bộ nhớ đệm. Làm thế nào là những yêu cầu (được nhanh chóng - bộ nhớ cache, được nhất quán - thực thi ref. Toàn vẹn) reconciled? –

+0

Caching 'off-the-shelf' là một câu hỏi về cấu hình, với các thay đổi cơ sở dữ liệu được sắp xếp theo lô và chính bộ nhớ cache biết các ràng buộc toàn vẹn tham chiếu trong cơ sở dữ liệu. Điều này có nghĩa là ngay cả dữ liệu được lưu trong bộ nhớ cache cũng sẽ từ chối các nỗ lực phá vỡ tính toàn vẹn tham chiếu. – amelvin

+0

Thật sao? giải pháp lưu trữ ngoài bộ nhớ có sẵn về tính toàn vẹn tham chiếu không? Tôi không thể tìm thấy bất kỳ tham chiếu đến điều này trong các hệ thống bộ nhớ đệm phổ biến - bạn có thể hướng dẫn tôi đến một trong đó không? –

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