2010-04-16 53 views
8

Làm cách nào để viết một truy vấn chọn các mục 2000-2010 trong số 10.000 đối tượng trong kho dữ liệu.Công cụ ứng dụng của Google và phân trang

Tôi biết rằng nó có thể được thực hiện như thế này trong GQL:

select * from MyObject limit 10 offset 2000 

Theo documentation, khi sử dụng một offset động cơ sẽ vẫn lấy tất cả các hàng, chỉ không trả lại, do đó làm cho các truy vấn thực hiện theo cách tương ứng tuyến tính với giá trị offset.

Có cách nào tốt hơn không? Chẳng hạn như sử dụng một cột ROWNUM giả như một người có thể làm trong các loại cửa hàng dữ liệu khác.

Trả lời

6

Không có cách nào để trang hiệu quả bằng cách sử dụng bù trừ, ngoại trừ bộ nhớ cache kết quả. Tuy nhiên, bạn có thể sử dụng datastore cursors để triển khai phân trang bằng cách sử dụng phương pháp tiếp cận loại 'dấu trang'.

+0

Thật tuyệt, cảm ơn rất nhiều. –

2

Ngoài việc sử dụng con trỏ, bạn cũng có thể sử dụng phương pháp sắp xếp thứ tự sắp xếp. Ví dụ:

SELECT * FROM MyObject ORDER BY field LIMIT 10; 

cho 10 đối tượng đầu tiên và sau đó cho 10 đối tượng tiếp theo vv

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10; 

Dòng thậm chí có thể là chìa khóa nếu bạn không có một lĩnh vực thích hợp. Dưới đây là ví dụ hoàn chỉnh hơn:

http://code.google.com/appengine/articles/paging.html

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