我创建了两个MapReduce管道,用于上传CSV文件以批量创建类别和产品.每个产品都通过KeyProperty绑定到Category.类别和产品模型是基于ndb.Model构建的,因此根据文档,我认为从数据存储区检索时它们会自动缓存在Memcache中.
我在服务器上运行这些脚本来上传30个类别,然后是3000个产品.所有数据都按预期显示在数据存储区中.
但是,似乎产品上传不使用Memcache来获取类别.当我在门户检查内存缓存浏览器,它说沿着命中数是大约180和怀念的东西线数60左右如果我上传3000种产品和每一次检索类别,不应该我有大约3000从获取类别中击中+未命中(即Category.get_by_id(category_id))?在创建新产品之前尝试检索现有产品可能会有3000多次失误(算法处理实体创建和更新).
这是相关的产品映射功能,它从CSV文件中获取一行以创建或更新产品:
def product_bulk_import_map(data):
"""Product Bulk Import map function."""
result = {"status" : "CREATED"}
product_data = data
try:
# parse input parameter tuple
byteoffset, line_data = data
# parse base product data
product_data = [x for x in csv.reader([line_data])][0]
(p_id, c_id, p_type, p_description) = product_data
# process category
category = Category.get_by_id(c_id)
if category is None:
raise Exception(product_import_error_messages["category"] % c_id)
# store in datastore
product = Product.get_by_id(p_id)
if product is not None:
result["status"] = "UPDATED"
product.category = category.key
product.product_type …Run Code Online (Sandbox Code Playgroud) google-app-engine memcached mapreduce app-engine-ndb google-cloud-datastore