2013-03-25 17 views
5

Tôi đang tự hỏi như thế nào grails xử lý sử dụng bộ nhớ và tải (lấy) của các đối tượng miền bằng phương pháp GORM như:Memory các phương pháp Grails GORM

findAllWhere 
findAllBy 
list 
... 
  • Họ có nạp đầy đủ (tương ứng proxy của họ) vào ký ức?
  • Nếu tôi duyệt qua chúng với each/every/any chúng có được hỗ trợ bởi trình lặp không tải chúng một cách lười biếng không?
  • Tôi có nên thích createCriteria() {...}.scroll() để sử dụng bộ nhớ tốt hơn không?
+0

Bạn sử dụng DB nào để quay lại GORM? – noamt

+0

Cho phép nói HSQL hoặc H2 của gói đóng gói sẵn. Nhưng tôi hy vọng GORM không phải là db phụ thuộc ... – matcauthon

+0

Vâng, nó không thể được độc lập bởi vì nó phải sử dụng trình điều khiển DB để giao tiếp với các DB khác nhau. Ví dụ, GORM sử dụng trình điều khiển Java Mongo để giao tiếp với MongoDB và sử dụng Jedis để giao tiếp với Redis. Trên hết, bạn cũng có khung công tác Spring Data. – noamt

Trả lời

1

Giả sử chúng tôi bỏ qua hành vi khác nhau của từng loại trình điều khiển DB GORM sử dụng, chúng tôi có thể tìm câu trả lời trong mã và tài liệu.

Trình tìm kiếm động được cung cấp cho các lớp Miền theo org.grails.datastore.gorm.GormStaticApi và các lớp trình tìm kiếm trong gói org.grails.datastore.gorm.finders.

Xem lại các lớp này, chúng tôi có thể thấy rằng các truy vấn trả lại nhiều kết quả luôn được tập hợp thành DetachedCriterialuôn gọi phương thức criteria.list(); điều này có nghĩa là lô hàng kết quả toàn bộ được lắp ráp và giữ trong bộ nhớ. Traversing các kết quả với Phương thức thu thập của Groovy sẽ không tạo ra bất kỳ sự khác biệt nào vì bạn chủ yếu gọi các phương thức đó trong danh sách kết quả trả về.

Như cho câu hỏi "được nạp bao nhiêu của miền kết quả?" - điều này phụ thuộc vào thành phần của tên miền, nhưng bạn có thể giả định rằng lĩnh vực Miền được nạp và rằng bất kỳ hiệp hội theo mặc định là lười biếng.

Trong trường hợp yêu cầu sử dụng bộ nhớ tốt hơn, bạn có thể tự tạo các tiêu chí kết hợp với dự báo kết quả và sử dụng scroll (lưu ý rằng tính năng này tùy thuộc vào loại DB).

Trong trường hợp cực đoan, tôi thậm chí còn bỏ qua GORM và làm việc trực tiếp với trình điều khiển DB.