0

当服务器请求每秒多次更新该实体时,如何优化实体的更新?用于更新的方法开发如下:

public async Task<bool> Update(T entity, string key)
    {
        try
        {
            MakeConnection();
            var trans = _db.BeginTransaction();
            var type = typeof(T);
            var keyFactory = _db.CreateKeyFactory(type.Name);
            var task = trans.Lookup(keyFactory.CreateKey(key));
            if (task != null)
            {
                _cache.KeyCache[type.Name] = _db.CreateKeyFactory(type.Name);
                var entities = _mapper.Map<Entity>(entity);
                task = entities;
                trans.Update(task);
            }
            await trans.CommitAsync();
        }
        catch (Exception e)
        {
            throw new InvalidOperationException($"An error occurred, {e}");
        }
        return true;
    }

这是错误:

InvalidOperationException: An error occurred, Grpc.Core.RpcException: Status(StatusCode=Aborted, Detail="too much contention on these datastore entity. please try again. entity groups: [(app=p~******** , *********, "76fcb9c1-009e-****-b54f-68a45e9c****")]")

4

1 回答 1

0

由于 DataStore 提供的分布式容错,更新实体的频率存在限制。建议最多每秒更新一次,尽管在实践中您可能会超过此数次。

您可以阅读有关数据存储争用的文档。根据该文档,如果您希望每秒更新单个实体或写入实体组超过多次,最好尽早重新设计您的设计,以避免在部署应用程序后可能发生争用。

一种可能的选择是使用分片计数器

于 2018-08-01T11:48:04.080 回答