在Datastore模式下,我使用带有objectify和Firestore的云端点。虽然它在文档中说所有查询都是非常一致的,但我发现它们并不在以下示例中:
示例1
我创建了一个端点,通过属性查询实体,向其上的count属性添加+1,并将其保存回数据存储。然后,我有50个不同的客户机同时执行该方法。我希望count属性是50,但是,它通常在25-30之间。
示例2
我有一个端点,它通过属性查询实体。如果该实体不存在,则创建该实体并将其保存到数据存储中。如果它存在的话,我就把它还回去。同样,我与50个不同的客户同时到达了这个端点。我希望在Datastore中只有一个实体。不过,我可能会有5-10个相同的实体。
在我看来,这并不是非常一致的。如果我将我的代码放在上面的端点中,并将它们放在一个带有retries的事务中,那么所有这些代码都可以正常工作。我在objectify中查看了一下,看看某个地方是否有ReadOptions集,但据我所见,没有,所以应该使用默认的read_consistency=STRONG。
发布于 2022-08-03 00:33:21
例如,您需要使用事务来确保写不践踏对方。
例如,您同样需要使用一个事务来实现客户端之间的一致性。
强一致性意味着,如果客户端写入一个值,它可以在写入成功后读取或查询它。而不是,如果客户机读取一个值,另一个读取相同的值,则每个客户端都进行一个转换,并试图为每个客户端编写百叶窗将合并在一起。
https://stackoverflow.com/questions/73168739
复制相似问题