2016-02-16 29 views
5

Tôi đang cố định cấu hình Infinispan làm bộ nhớ cache cấp 2 ngủ đông. Mọi thứ đều ổn, nhưng tôi muốn tinh chỉnh cấu hình mặc định, tức là các giá trị mà tất cả bộ nhớ cache được chia sẻ.Infinispan JPA Mặc định bộ nhớ cache cấp 2

Bộ nhớ cache được tạo tự động cho các đối tượng được chú thích bằng @Cache và tôi có thể tùy chỉnh từng mục một trong infinispan.xml theo <distributed-cache-configuratoin>. Tuy nhiên, tôi muốn có các giá trị mặc định (ví dụ: chiến lược trục xuất) cho tất cả các bộ đệm này.

Một điều nữa là, tôi muốn đánh dấu tất cả các bộ đệm được tạo là "phân phối" (mặc định là "cục bộ").

Dưới đây là một exceprt từ infinispan.xml tôi:

<cache-container default-cache="default" statistics="true"> 
    <transport stack="external-file" /> 
    <!-- Configuring specifics for the User entity. How to do it globally? --> 
    <distributed-cache-configuration name="user" statistics="true" /> 
</cache-container> 

Làm thế nào để làm những việc này?

+1

Cấu hình bộ nhớ cache mặc định được đặt tên là 'thực thể'. Định cấu hình bộ nhớ cache có tên đó và nó sẽ áp dụng cho tất cả các thực thể. –

+0

Nice .. thanks. bạn có một tài liệu tham khảo từ tài liệu cho điều đó không? – Bozho

+1

http://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html#caching-provider-infinispan-config –

Trả lời

4

Các default cache configuration cho các tổ chức có tên là entity:

cấu hình bộ nhớ cache có thể khác nhau đối với từng loại dữ liệu được lưu trữ trong bộ nhớ cache . Để ghi đè lên các mẫu cấu hình bộ nhớ cache, sử dụng tài sản hibernate.cache.infinispan.data-type.cfg nơi data-type thể là một trong:

entity Các đối tượng được lập chỉ mục bởi @Id hoặc @EmbeddedId thuộc tính.

immutable-entity Đối tượng được gắn thẻ với @Immutable chú thích hoặc đặt là mutable=false trong tệp ánh xạ.

naturalid Thực thể được lập chỉ mục bởi thuộc tính @NaturalId của chúng.

collection Tất cả các bộ sưu tập.

timestamps Lập bản đồ loại thực thể → dấu thời gian sửa đổi lần cuối. Đã sử dụng để truy vấn bộ nhớ đệm.

query Truy vấn ánh xạ → kết quả truy vấn.

pending-puts Bộ nhớ đệm phụ cho khu vực sử dụng chế độ vô hiệu hóa bộ nhớ cache.

Giá trị mặc định cho collection, immutable-entitynaturalid cũng là cấu hình cụ thể cho entity, vì vậy bạn không cần phải cấu hình chúng riêng (nếu bạn không muốn cấu hình riêng biệt tất nhiên), như có thể thấy trong số documentationsource code.

Note

Nói chung, làm cho một bộ nhớ cache Hibernate L2 phân phối có thể không phải là một ý tưởng tốt, vì trường hợp thực thể được lưu trữ trong disassembled hydrated state trong bộ nhớ cache L2, có nghĩa là chỉ id của các đối tượng liên quan được lưu trữ cùng nhau với trạng thái của thực thể cha.

Giả sử bạn có các đối tượng sau (A, B, C đều cachable):

@Entity 
public class A { 
    @ManyToOne 
    private B b; 

    @OneToMany 
    private Collection<C> cs; 
} 

Thậm chí nếu bộ sưu tập cs là cachable cũng có, để lắp ráp hoàn toàn một thực thể A dụ từ bộ nhớ cache bạn sẽ phải các chuyến đi vòng quanh mạng sau đến các nút khác của cụm:

  1. Tìm nạp thực thể A trạng thái.
  2. Tìm nạp đối tượng B trạng thái dựa trên id được lưu trữ trong liên kết b.
  3. Tìm nạp bộ sưu tập của cs id.
  4. Đối với mỗi id trong bộ sưu tập cs, hãy tìm nạp trạng thái tổ chức C từng cái một.

Rõ ràng, nếu bạn đang lắp ráp bộ sưu tập A trường hợp (từ kết quả của truy vấn ví dụ), tất cả những điều trên được thực hiện cho từng trường hợp A. Điều này tất cả ngụ ý rằng đọc dữ liệu từ cơ sở dữ liệu trực tiếp (với tải cấu hình lười đúng cách, sử dụng ví dụ batch size), có thể hiệu quả hơn tất cả các chuyến đi vòng quanh mạng trong bộ nhớ cache được phân phối. Ngoài ra, đó là một trong những lý do tại sao bộ nhớ cache thực thể/bộ sưu tập nên chạy trong chế độ cụm không hợp lệ (dữ liệu được lưu trữ chỉ trên nút đọc/ghi, nhưng bị vô hiệu hóa trên các nút khác khi thay đổi).

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