【问题标题】:Firestore Datastore Mode write/read consistencyFirestore 数据存储模式写入/读取一致性
【发布时间】:2020-01-18 12:57:39
【问题描述】:

我有一个使用 Cloud Firestore 数据存储模式创建的项目。

我使用com.google.cloud.datastore.Datastore.put没有事务执行写操作,在执行写操作后我使用com.google.cloud.datastore.Datastore.get对刚刚写入的记录执行读操作。但据我所知,在某些情况下,读取操作不会只返回写入值。

这看起来像是最终一致性,但根据 https://cloud.google.com/datastore/docs/firestore-or-datastore 'Cloud Firestore Datastore Mode' 是强一致性数据库。

如果您在没有事务的情况下执行写入操作,是否可能不是强一致?根据此https://cloud.google.com/datastore/docs/concepts/transactions 事务是可选的,我没有找到任何信息表明它们需要使 Firestore 数据存储区保持强一致性。

是否需要设置一些东西来实现强一致性?

【问题讨论】:

  • 您是否检查了看跌过程中返回的任何错误?您是否确保从 put 返回的密钥始终用于 get?
  • 是的,我正在检查错误但没有收到任何错误。是的,我确定我使用了正确的密钥。
  • 您在等待写操作完成吗?它应该是高度一致的。请提供代码。

标签: google-cloud-platform google-cloud-firestore google-cloud-datastore


【解决方案1】:

因为您没有使用事务,所以您的读取操作可能会在您的写入操作完成之前执行。这可能是由于大量的流量或较大的写入大小而发生的。使用事务将防止这种情况发生,因为您可以允许读取操作仅在写入操作完成后运行。

【讨论】:

  • 这是否意味着 Firestore 数据存储模式在没有事务的写入+读取操作的情况下不具有强一致性?因为据我了解,如果您在write 之后执行read,那么它们应该被一致地执行并且read 应该得到更新的值。
  • 我不确定您的写入量有多大或您的查询逻辑如何。这些可能会影响您的一致性。但要回答您的问题,是的,Firestore 数据存储模式在没有事务的情况下是强一致的。但是为了确保你能在连续的操作中阅读你刚刚写的内容,请为每个操作使用事务。
  • @MaximusMacdonald 你的回答对我来说没有多大意义。如果写的大小影响读的一致性,那么它根本就不是强一致的。
  • @user239558 如果您在 Datastore 模式下使用 Cloud Firestore,那么您的所有查询都具有很强的一致性。强一致性查询只保证写一致性,不保证读一致性。换句话说,你可以写多少就写多少,而且数据总是会改变的。但是如果不使用事务,即使您具有强一致性,您也可能无法看到您最近的更改。
猜你喜欢
  • 2012-05-07
  • 2021-09-12
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多