2010-11-02 42 views
5

Xin chào: Tôi đang bối rối về những gì được lưu trong bộ nhớ cache của bộ nhớ đệm ngủ đông.bộ nhớ đệm ngủ đông lưu là gì?

Từ tài liệu, tôi biết có các loại bộ đệm ẩn trong chế độ ngủ đông.

Cấp đầu tiên: cấp độ giao dịch. Có vẻ như thực thể được duy trì bởi một phiên được lưu trữ ở đây.

Bộ nhớ cache cấp thứ hai: Tôi thực sự không có ý tưởng về bộ nhớ cache này, từ api, nó cho biết bộ nhớ cache này hoạt động ở cấp sessionfactory ... Tôi không thể hiểu được.

Bộ nhớ cache truy vấn: Điều này dễ hiểu đối với tôi (có thể tôi sai). Nó lưu trữ tham số truy vấn cùng với thực thể liên quan.

Đây là tất cả những gì tôi biết về bộ đệm ẩn trong chế độ ngủ đông.

Bất kỳ ai cũng có thể cung cấp thêm chi tiết cho tôi?

BTW, tôi không giỏi công việc sql/jdbc, vì vậy tôi cũng muốn biết làm thế nào tôi nên biết về sql/jdbc để tìm hiểu thêm về hibernate (bất kỳ tài liệu nào?)? Tôi không muốn chỉ là một người dùng ngủ đông vì nó chỉ là một công cụ, những gì tôi muốn là học được điều gì đó từ khung cảnh tuyệt vời này. :)

Trả lời

3

Đầu cache Cấp

bộ nhớ cache này được kích hoạt theo mặc định. Khi NHibernate đang tải một thực thể theo id duy nhất của nó từ cơ sở dữ liệu thì nó sẽ tự động được đưa vào bản đồ nhận dạng được gọi là. Bản đồ nhận dạng này đại diện cho bộ nhớ cache cấp đầu tiên.

Thời gian sống của bộ nhớ cache cấp một được kết hợp với phiên hiện tại. Ngay khi phiên hiện tại được đóng, nội dung của bộ nhớ cache cấp đầu tiên sẽ bị xóa. Khi một thực thể nằm trong bộ nhớ cache mức đầu tiên, một hoạt động tiếp theo muốn nạp thực thể rất giống nhau bên trong phiên hiện tại truy lục thực thể này từ bộ nhớ cache và không có khứ hồi tới cơ sở dữ liệu là cần thiết.

Một trong những lý do chính đằng sau bản đồ thực thể này là tránh tình huống hai trường hợp khác nhau trong bộ nhớ có thể đại diện cho cùng một bản ghi cơ sở dữ liệu (hoặc thực thể).

(chuyển thể từ NH FAQ)

Second cache Cấp

bộ nhớ cache này là trên bộ nhớ cache phạm vi phiên duy nhất. Với bộ nhớ cache này, bạn lưu nhiều vòng vào cơ sở dữ liệu, vì lần đầu tiên bất kỳ ai trong bất kỳ phiên nào tải thực thể được xác định, nó vẫn nằm trong bộ đệm, vì vậy yêu cầu tiếp theo (từ bất kỳ phiên nào khác) sẽ lấy nó từ bộ nhớ cache.

Để sử dụng L2 Cache, bạn sẽ cần một nhà cung cấp bộ nhớ cache, chẳng hạn như SysCache hoặc Memcache. Những kẻ này sẽ lưu trữ các giá trị của các thực thể được lưu trong bộ nhớ cache dưới dạng một chuỗi các chuỗi os được băm bởi id của thực thể. Điều quan trọng cần lưu ý rằng nó không phải là đối tượng .net được lưu trữ, nhưng chỉ có giá trị của nó.

Người ta nói rằng nó được gắn với nhà máy phiên vì bộ nhớ cache sẽ hoạt động cho các phiên được tạo bởi nhà máy phiên xác định, do đó các phiên được tạo bởi các nhà máy khác nhau sẽ không chia sẻ bộ nhớ cache. Khái niệm về nhà máy phiên có rõ ràng với bạn không?

Query cache

Cái này là thực sự đơn giản, nhưng có một nhược điểm. Nó sẽ cache truy vấn và các tham số của nó, nhưng nó sẽ không cache các thực thể được trả về. Nó sẽ chỉ lưu trữ các Id của chúng, vì vậy nó chỉ có ý nghĩa với bộ đệm L2, bởi vì nó chứa các giá trị liên quan đến Id đó.

mục Hỏi đáp NHiernate về cache:

https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

+0

Cảm ơn, câu trả lời của bạn là khá hữu ích !! Bây giờ tôi đã rõ ràng. BTW, bất kỳ tài liệu về cơ sở dữ liệu liên quan đến biết thêm về hibernate? – hguser

+0

Tôi khuyên bạn nên mua Hibernate In Action: http://www.amazon.com/Hibernate-Action-Christian-Bauer/dp/193239415X – Pedro

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