2012-11-28 28 views
8

Để tăng tốc độ tạo trang cho các trang dựa trên bộ sưu tập postgres lớn, chúng tôi lưu trữ kết quả truy vấn trong memcache. Tuy nhiên, đối với các bộ sưu tập không thay đổi rất lớn, hoặc hiếm khi được truy cập, tôi tự hỏi nếu lưu con trỏ phía máy chủ trong postgres sẽ là một chiến lược bộ nhớ đệm thay thế khả thi.sử dụng con trỏ phía máy chủ postgres để lưu vào bộ nhớ đệm

Ý tưởng là sau khi đã phục vụ một trang ở giữa một liên kết "tiếp theo" và "trước" có nhiều khả năng được sử dụng hơn truy vấn ngẫu nhiên ở một nơi khác trong bộ sưu tập. Tôi có thể có con trỏ "WITH HOLD" trong vùng lân cận để tránh chi phí khởi động lớn (dường như không tránh khỏi) của truy vấn không?

Tôi tự hỏi về mức tiêu thụ tài nguyên trên máy chủ. Nếu bộ sưu tập là bất biến, việc lưu con trỏ không cần nhiều tài nguyên, nhưng tôi tự hỏi làm thế nào để tối ưu hóa postgres trong lĩnh vực này. Bất kỳ liên kết đến tài liệu thêm sẽ được đánh giá cao.

+0

Chiến lược lưu trong bộ nhớ cache mà tôi hình dung là lưu trữ số lượng con trỏ cố định. Nếu một người ở gần một truy vấn cụ thể, nó sẽ được sử dụng để truy xuất một trang kết quả. Nếu không, con trỏ đã không sử dụng lâu nhất sẽ được đặt lại. – shaunc

Trả lời

3

Bạn sẽ gặp phải rất nhiều vấn đề.

  • Bạn muốn có để đảm bảo cùng một người dùng được kết nối sql cùng
  • Bạn cần phải tạo ra một chiến lược dọn dẹp
  • Các con trỏ sẽ tổ chức các hoạt động lên chân.
  • Bạn phải thuyết phục hồ bơi kết nối để không xóa con trỏ
  • Có thể là các vấn đề khác mà tôi chưa đề cập.

Tóm lại: đừng làm điều đó. Làm thế nào về precalculating trang tiếp theo/trước đó trong nền, và lưu trữ nó trong memcached?

+0

hmm-- bạn có thể chỉ cho tôi vị trí trong tài liệu thảo luận về mối quan hệ giữa con trỏ và các kết nối không? Nếu không có "giữ" con trỏ chỉ hợp lệ trong giao dịch, nhưng tôi không thể đề cập đến sự phụ thuộc của con trỏ trên giao dịch trong: http://www.postgresql.org/docs/9.2/static/sql-declare .html – shaunc

+0

CẬP NHẬT: "có thể tiếp tục được truy cập bởi các giao dịch tiếp theo * trong cùng một phiên *" - tiếng thở dài ... precalc vẫn sao chép quét, nhưng tôi đoán> (PK cuối cùng - hoặc bất kỳ truy vấn nào được sắp xếp) sẽ tránh điều này. được – shaunc

3

Một câu trả lời tốt để này trước đây đã được thực hiện Best way to fetch the continuous list with PostgreSQL in web

Những câu hỏi tương tự, về cơ bản bạn lưu trữ một danh sách các PKS trên máy chủ với một pagination-token và việc hết hạn.

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