2013-03-11 22 views
8

Tôi đang sử dụng google cloud sql với appengine.Yêu cầu gọi API datastore_v3.Put() quá lớn

Tôi nhận được com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large. mặc dù tôi không sử dụng API dữ liệu thống kê.

Tôi nghĩ theo tài liệu https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide#access_limits giới hạn kích thước dữ liệu là 16MB được phân phối trong 60 giây.

Kích thước dữ liệu của tôi là khoảng 1 MB và phản hồi của tôi chắc chắn ít hơn 1 phút. Nếu tôi thử với dữ liệu nhỏ hơn, mọi thứ hoạt động chính xác.

Vì vậy, tại sao ngoại lệ được ném? vấn đề là gì Đây có phải là lỗi trong công cụ ứng dụng của Google không? hoặc có giới hạn về kích thước, nó được ghi chép ở đâu? hay cái gì ?

+1

Datastore có giới hạn 1Mb cho mỗi thực thể. Bạn có chắc là bạn sử dụng Cloud SQL không? Cũng lưu ý rằng phiên sử dụng Datastore dưới mui xe, vì vậy nếu bạn tiết kiệm hơn 1Mb trong phiên, bạn có thể nhận được ngoại lệ này. –

+0

@PeterKnego Tôi sử dụng Cloud SQL để chắc chắn. Theo phiên, bạn có nghĩa là HttpSession? – Robert

+1

Có, đặc biệt hỗ trợ phiên GAE: https://developers.google.com/appengine/docs/java/config/appconfig#Enabling_Sessions –

Trả lời

9

Điều này xảy ra do GAE sessions, sử dụng công cụ lưu trữ GAE để lưu các đối tượng phiên. Ngoại lệ này được ném nếu dữ liệu hơn 1Mb được lưu trữ trong phiên.

+0

Bạn đã giải quyết vấn đề như thế nào? Bạn đã xóa dữ liệu khỏi phiên bằng cách nào đó? – qgicup

+0

Đã hai năm rồi, tôi không nhớ chính xác mình đã giải quyết vấn đề này như thế nào. Tôi có thể đã xóa dữ liệu khỏi phiên; tải lại nó từ cơ sở dữ liệu mỗi lần. Hoặc tôi đã chia dữ liệu thành hai đối tượng; mỗi đối tượng nhỏ hơn 1MB và lưu trữ chúng trong phiên với hai khóa khác nhau. – Robert