2012-01-19 39 views
6

Tôi hơi bối rối về 'Nhóm thực thể' trên Kho dữ liệu sao chép cao của Máy ứng dụng của Google (HRD). Tài liệu của Google đề cập rằng HRD chỉ cho phép viết 1 lần mỗi giây cho mỗi nhóm thực thể.Tổ chức các nhóm tổ chức trên Google App Engine để viết

Điều này có nghĩa là gì? Đây có phải là 1 viết cho mỗi người dùng yêu cầu hoặc 1 ghi cho mỗi thực thể (mà tôi giả định là một khái niệm tương tự như một "bảng").

Ví dụ: nếu tôi có thực thể "Người dùng" và bảng "Bài đăng". Nếu "Post" là tổ tiên của "User":

  1. Điều này có nghĩa rằng một "Thành viên" có thể tạo một "Post" mỗi giây
  2. ... hoặc có ý nghĩa tất cả ghi vào thực thể "Đăng" được giới hạn trong 1 lần ghi mỗi giây bất kể Người dùng? (tức là hệ thống chỉ có thể lưu 1 bài đăng tại một thời điểm bất kể # người dùng gửi bài đăng)
  3. ... hoặc có nghĩa là một thực thể "Người dùng" không thể tạo nhiều hơn 1 "Bài đăng" cùng một lúc (ngay cả khi hàng ngàn người dùng khác được tạo ra "Đăng" thực thể)?

Tùy chọn của tôi để giảm thiểu điều này là gì? Có hợp lý để làm cho cả hai thực thể gốc "Người dùng" và "Đăng"? Điều này có cho phép tôi tạo nhiều trường hợp "Đăng" bên ngoài giới hạn 1 lần ghi mỗi giây không? Tôi muốn tránh bất kỳ vấn đề tiềm năng nào nếu nói 1000 người dùng đã tạo đồng thời các mục "Đăng".

Trả lời

8

"nhóm tổ chức" là không phải như "bảng". Không có gì có nghĩa là "bảng" trong kho dữ liệu appengine. Bạn chỉ nên nghĩ về các thực thể và chỉ mục.

Bạn chỉ sử dụng các nhóm tổ chức khi bạn muốn có thể thực hiện các hoạt động giao dịch. Trong trường hợp blog có "Bài đăng", có thể không quan trọng nếu bạn thêm hoặc xóa Bài đăng giao dịch, vì vậy họ KHÔNG cần phải ở trong nhóm tổ chức.

Tôi có khoảng 15 loại thực thể khác nhau trong đơn đăng ký của mình và khoảng 1,5 triệu trong số đó. Mỗi một là một thực thể gốc, thậm chí cả những thực thể liên quan, và tôi nghĩ điều này là lý tưởng cho AppEngine. Theo như tôi có thể nói, mục đích duy nhất cho các nhóm thực thể là hỗ trợ các hoạt động nguyên tử trên nhiều thực thể - chúng không phải là một công cụ tổ chức.

PS: các câu hỏi của bạn về các hạn chế của Nhóm thực thể (mà tôi cho rằng chủ yếu sẽ tranh luận cho bạn bây giờ): giới hạn ghi là theo thực thể, không theo yêu cầu. 1. Các thực thể không tạo ra các thực thể khác. 2. Nếu tất cả Bài đăng nằm trong cùng một nhóm thực thể, thì có, bạn chỉ có thể tiết kiệm 1 mỗi giây. 3. Nếu mỗi người dùng nằm trong nhóm thực thể của riêng mình, bạn có thể viết 1 bài đăng trong cùng một nhóm cùng một lúc, nhiều lần mỗi giây tùy thích. Nó chỉ là không có nhóm duy nhất có thể được viết nhiều hơn một lần mỗi giây. Có, tôi nghĩ "Người dùng" và "Bài đăng" cả hai đều là thực thể gốc.

+0

Câu trả lời tuyệt vời! Cảm ơn rất nhiều vì đã làm rõ. Như một lưu ý phụ (cho kinh nghiệm của bạn); làm thế nào để bạn cảm thấy sự ủng hộ của HRD so với việc sử dụng các kho dữ liệu bên ngoài như MongoDB hoặc AWS DynamoDB? –

+2

Bạn được chào đón! Tôi không có kinh nghiệm với các kho dữ liệu bên ngoài. Thật khó để tưởng tượng độ trễ cho bất kỳ cửa hàng bên ngoài nào sẽ không áp đảo bất kỳ lợi ích hiệu suất nào khác mà họ có thể có. Tuy nhiên, tôi có thể tưởng tượng các lợi ích của tính năng ... –

+2

Chỉ cần làm rõ, giới hạn là viết riêng cho một nhóm thực thể - nhưng bạn có thể viết nhiều thực thể trong nhóm với một cuộc gọi. Xem [Google IO talk] này (http://www.google.com/events/io/2011/sessions/more-9s-please-under-the-covers-of-the-high-replication-datastore.html) . –

1

Sử dụng các nhóm tổ chức cũng phục vụ để làm cho dữ liệu của bạn trong nhóm rất nhất quán.

Ví dụ: không có nhóm tổ chức, nếu bạn tạo bài đăng và sau đó nhanh chóng điều hướng đến danh sách bài đăng gần đây, bạn có thể không thấy bài đăng mới của mình ngay lập tức. Đối với một blog, đó có thể không phải là một vấn đề. Nếu bạn đang thực hiện một hệ thống quản lý tác vụ ... bạn đi đến màn hình chi tiết nhiệm vụ, đóng tác vụ và điều hướng này quay trở lại danh sách nhiệm vụ, tác vụ vẫn có thể hiển thị như đã mở. Quay lại đầu trang | Điều đó không thể chấp nhận được.Ở đây, bạn cần các nhóm tổ chức hoặc một số phương tiện khác để làm cho danh sách nhiệm vụ của bạn phù hợp với người dùng hiện tại.

Trong một số kiểu dữ liệu, thật dễ dàng để tạo các nhóm thực thể. Ví dụ, làm cho một phần nhiệm vụ của một nhóm dự án sẽ giải quyết vấn đề giả sử bạn chỉ có thể hiển thị các nhiệm vụ cho một nhóm duy nhất. Nếu giao diện người dùng của bạn cho phép liệt kê các tác vụ từ nhiều nhóm, việc tìm mô hình hoạt động sẽ khó hơn.