2010-09-08 18 views
5

Tôi đang sử dụng Trình tải hàng loạt của Công cụ ứng dụng (Thời gian chạy Python) để tải lên hàng loạt đối tượng vào kho dữ liệu. Dữ liệu mà tôi đang tải lên được lưu trữ ở định dạng độc quyền, vì vậy tôi đã triển khai bằng trình kết nối riêng (đăng ký nó trong bulkload_config.py) để chuyển đổi nó thành từ điển python trung gian.Hiệu suất của Trình tải số lượng lớn của Máy ứng dụng

import google.appengine.ext.bulkload import connector_interface 
class MyCustomConnector(connector_interface.ConnectorInterface): 
    .... 
    #Overridden method 
    def generate_import_record(self, filename, bulkload_state=None): 
     .... 
     yeild my_custom_dict 

Để chuyển từ điển python trung tính này thành kho dữ liệu Thực thể, tôi sử dụng chức năng nhập bài đăng tùy chỉnh mà tôi đã xác định trong YAML của mình.

def feature_post_import(input_dict, entity_instance, bulkload_state): 
    .... 
    return [all_entities_to_put] 

Lưu ý: Tôi không sử dụng entity_instance, bulkload_state trong chức năng feature_post_import. Tôi chỉ đang tạo các thực thể lưu trữ dữ liệu mới (dựa trên số input_dict) và trả lại chúng.

Bây giờ, mọi thứ đều hoạt động tuyệt vời. Tuy nhiên, quá trình tải dữ liệu hàng loạt dường như mất quá nhiều thời gian. Ví dụ: một GB (~ 1.000.000 thực thể) dữ liệu mất ~ 20 giờ. Làm cách nào để cải thiện hiệu suất của quá trình tải hàng loạt. Tui bỏ lỡ điều gì vậy?

Một số tham số mà tôi sử dụng với appcfg.py là (10 chuỗi có kích thước lô là 10 thực thể cho mỗi chuỗi).

Linked một Tập đoàn Bưu Google App Engine Python: http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840

Cập nhật: Để kiểm tra hiệu suất của quá trình tải hàng loạt, tôi nạp entities của một 'thử nghiệm' Kind. Mặc dù điều này entityFloatProperty rất đơn giản, nhưng tôi vẫn mất một lượng thời gian tương tự để tải số lượng lớn entities.

Tôi vẫn đang cố gắng thay đổi các thông số bộ tải số lượng lớn, rps_limit, bandwidth_limithttp_limit, để xem liệu tôi có thể nhận được thêm thông lượng nào không.

+0

Nếu có điều gì đó khó hiểu về câu hỏi hoặc thứ gì đó mà tôi cần thêm thì hãy cho tôi biết. – Rahul

Trả lời

4

Có tham số được gọi là rps_limit xác định số lượng thực thể tải lên mỗi giây. Đây là nút cổ chai lớn. Giá trị mặc định cho điều này là 20.

Đồng thời tăng bandwidth_limit lên điều gì đó hợp lý.

Tôi đã tăng rps_limit đến 500 và mọi thứ được cải thiện. Tôi đã đạt được 5,5-6 giây cho mỗi 1000 thực thể, đó là một sự cải tiến lớn từ 50 giây cho mỗi 1000 thực thể.

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