小编Cli*_*iot的帖子

使用MapReduce时,ndb模型不会保存在内存缓存中

我创建了两个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

2
推荐指数
1
解决办法
511
查看次数