2010-06-07 30 views

Trả lời

14

Bạn có thể đếm được hiệu quả của tất cả các thực thể thuộc một loại cụ thể (tức là số hàng trong một bảng) bằng cách sử dụng Datastore Statistics. Ví dụ đơn giản:

from google.appengine.ext.db import stats 
kind_stats = stats.KindStat().all().filter("kind_name =", "NameOfYourModel").get() 
count = kind_stats.count 

Bạn có thể tìm thấy một ví dụ chi tiết hơn về làm thế nào để có được số liệu thống kê mới nhất here (GAE có thể giữ nhiều bản sao của số liệu thống kê - một cho 5min trước, một cho 30 phút trước, vv).

Lưu ý rằng các thống kê này không được cập nhật liên tục để chúng tụt hậu so với số lượng thực tế. Nếu bạn thực sự cần đếm thực tế, thì bạn có thể theo dõi số lượng trong bảng thống kê tùy chỉnh của riêng bạn và cập nhật nó mỗi khi bạn tạo/xóa một thực thể (mặc dù điều này sẽ khá tốn kém hơn một chút để làm).

Cập nhật 03-08-2015: Sử dụng Thống kê Datastore có thể dẫn đến kết quả cũ. Nếu đó không phải là một lựa chọn, hai phương pháp khác là giữ một quầy truy cập hoặc sharding. (You can read more about those here). Chỉ xem xét 2 nếu bạn cần kết quả thời gian thực.

7

Không có khái niệm "Chọn số (*)" trong App Engine. Bạn sẽ cần thực hiện một trong các thao tác sau:

  1. Thực hiện "chỉ khóa" (chuyển đổi chỉ mục) của đối tượng bạn muốn tại thời điểm truy vấn và đếm từng cái một. Điều này có chi phí đọc chậm.
  2. Cập nhật số đếm tại thời điểm ghi - điều này có lợi ích khi đọc cực nhanh với chi phí mỗi lần ghi/cập nhật cao hơn. Chi phí: bạn phải biết những gì bạn muốn đếm trước thời hạn. Bạn sẽ trả chi phí cao hơn vào thời gian ghi.
  3. Cập nhật tất cả các giá trị không đồng bộ bằng cách sử dụng Hàng đợi công việc, công việc cron hoặc Mapper API mới. Điều này có sự cân bằng của việc bán tươi.
+0

+1 Đây là tất cả các lựa chọn thay thế tuyệt vời có thể phù hợp hơn với API thống kê dữ liệu tùy theo nhu cầu của bạn ứng dụng. –

3

Bạn có thể đếm không. của các hàng trong Google App Engine bằng cách sử dụng com.google.appengine.api.datastore.Query như sau:

int count; 
    Query qry=new Query("EmpEntity"); 
    DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); 
    count=datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults()); 
Các vấn đề liên quan