2010-08-27 20 views
9

Tôi muốn đánh giá hiệu suất đọc GAE. Khoảng 10.000 thực thể đang được tìm nạp từ kho dữ liệu. Các thực thể này chứa 3 tên thuộc tính (khoảng 16 ký tự), mô tả (khoảng 130 ký tự) và một dấu thời gian. Không có gì lớn bất thường.Băng thông CPU trên Google App Engine có quá đắt hay đó là mã của tôi?

Đây là những gì tôi thấy:

Trung bình phải mất khoảng 11 giây để đọc 10k thực thể. Không chắc chắn liệu điều này được coi là nhanh, chậm hay hợp lý, nhưng nó không quá thú vị bất kể.

Tìm kiếm thú vị hơn là đo CPU. Thực hiện thao tác đọc này 100 lần tiêu thụ khoảng 3,0 giờ CPU. Chi phí là $ 0,30.

Vì không có thuật toán chuyên sâu CPU nào đang diễn ra ở đây, liệu nó có làm cho băng thông CPU của GAE khá tốn kém không? (Chắc chắn, nó đi kèm với 24/7 sys-quản trị viên theo hình thức kịch bản Python vv vv, nhưng vẫn ...)

Hoặc là một cái gì đó này trong mã Java của tôi:

http://github.com/akirekadu/GAE-Evaluation/blob/master/show.jsp

+0

Điều này nghe có vẻ không hợp lý với tôi, 1000 đối tượng thực thể mỗi giây qua internet ... Một thử nghiệm nhanh chóng chọn 3500 thực thể (mỗi dữ liệu chứa nhiều dữ liệu hơn ví dụ của bạn) qua internet mất khoảng ba giây. Bạn có bất kỳ ý tưởng về số lượng dữ liệu đang được chuyển không? – darri

+0

@darri, "lưu trữ dữ liệu" là một cơ sở GAE nội bộ –

+0

(a) Thời gian tôi đã đề cập * không * bao gồm chuyến đi khứ hồi trên web. Đã đến lúc đọc các thực thể (và xây dựng mã HTML). (b) Dữ liệu được tải xuống xấp xỉ 3 MB. – akirekadu

Trả lời

5

Đó là không phải mã của bạn, tôi tin rằng kết quả của bạn. Trong các thí nghiệm của chúng tôi, chúng tôi thấy rằng việc truy xuất và lưu trữ (đặc biệt) là các hoạt động rất tốn kém về hạn ngạch CPU.

Chúng tôi lưu ý rằng:

  • Indexes là tốn kém. Nếu bạn đang viết nhiều hơn đọc, hãy keo kiệt với các chỉ mục của bạn. Đảm bảo bạn biết về thuộc tính indexed=False trên các thuộc tính mô hình và chú ý đến những gì được tạo tự động vào index.yaml.

  • Nếu bạn đang đọc nhiều hơn mức bạn đang viết thì rất nhiều chỉ mục có thể có ý nghĩa. Sử dụng memcache nơi bạn có thể. Sử dụng các nhóm thực thể, nếu chúng có ý nghĩa.

  • API công cụ ứng dụng cung cấp cho bạn các công cụ cải thiện hiệu quả. Họ quan trọng rất nhiều. Nếu bạn đang viết 100 hàng, sử dụng một đơn đặt hàng số lượng lớn() so với 100 cuộc gọi put() riêng lẻ sẽ làm giảm đáng kể việc sử dụng CPU.

Nếu ứng dụng của bạn thường xuyên thực hiện các lần đọc lớn như bạn đã mô tả, bạn có thể chọn giải pháp khác (ví dụ: VPS như Slicehost hoặc Linode) hoặc mô hình dữ liệu khác. Mỗi ứng dụng sẽ có nhu cầu khác nhau, đĩa WRT, CPU, bộ nhớ, vv, vì vậy tôi để lại các tính toán back-of-the-phong bì như một bài tập cho người đọc.

HTH!

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