当通过服务器的请求每秒对实体进行多次更新时,如何优化实体的更新?用于更新的方法开发如下:
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:发生错误,Grpc.Core.RpcException: Status(StatusCode = Aborted,Detail =“关于这些的争用太多 数据存储实体。请再试一遍。实体组: [(app = p〜********,*********, “ 76fcb9c1-009e-****-b54f-68a45e9c ****”)]“)
答案 0 :(得分:0)
由于DataStore提供的分布式容错能力,因此更新实体的频率受到限制。建议您每秒最多更新一次,尽管实际上,您可能会多次更新。
您可以阅读关于数据存储争用的documentation。根据该文档,如果您希望每秒更新一个实体或写一个实体组的次数超过每秒几次,那么最好尽早进行设计工作,以避免在部署应用程序后可能出现争用。 / p>
一种可能的选择是使用Sharding counters。