【问题标题】:Does firebase realtime DB support ACID properties?firebase 实时数据库是否支持 ACID 属性?
【发布时间】:2019-05-13 04:04:14
【问题描述】:

我只对原子事务和强一致性感兴趣。 firebase realtime db 两者都支持吗?

  • 我在任何地方的 firebase db 中都看不到任何事务锁。并且,需要锁定项目以支持原子性。这是我的第一个想法,可能 firebase 数据库不是原子数据库。
  • 我也不知道 firebase db 的后端架构。我不确定它是否总是从主节点或从节点读取。所以不能保证是强一致还是最终一致。

【问题讨论】:

    标签: firebase-realtime-database acid


    【解决方案1】:

    实时数据库支持transactions。客户都必须同意如何就这些交易进行合作。数据库不支持任何锁定整个数据库以序列化所有客户端访问的操作。您需要了解 RTDB 事务的工作原理才能有效地使用它们。并非所有写入都需要事务,您需要自己弄清楚在您的特定应用程序中何时以及如何最好地使用它们。

    由于实时数据库是云托管数据库,因此您无需了解(或关心)任何类型的主/从配置。事实上,您可以假设它按照文档的建议工作。该文档表明,如果客户端在写入操作时处于脱机状态(将在本地缓存并在联机时同步),则它最终是一致的。如果客户端已经在线,则立即保持一致,并且客户端愿意“等待”最新更新,因为它侦听数据库中的更改数据,只要它对客户端可用。 (对于实时数据库,实际上没有“副本”可言,除了每个客户端可能为自己维护的本地缓存以存储先前读取的数据。)

    【讨论】:

    • 感谢您指出此文档。我不知何故,错过了它。实际上,我认为,他们没有公开那里的建筑。它有助于了解它支持的操作级别。显然,如果它们支持事务(元素级锁而不是数据库级),它们似乎必须有锁。更新是一个两步操作。它首先读取实体并写入新实体。而且,如果事务中支持更新操作,那么它们必须在服务器级别或 fs 级别在幕后工作。但是,当然,我们不必担心。
    • 这是一个乐观锁,而不是悲观(硬)锁。 stackoverflow.com/questions/129329/…
    • 而且,你所说的一致性,离线时不一致,在线时立即一致。这实际上是可用性。这不是一致性。您能否指出您在文档中看到它最终一致的地方?我只提到了在幕后工作的主/从工作,以便更好地理解一致性。再次感谢:)
    • 它最终是一致的,因为写入是在离线时提交的,您无法保证写入何时同步并可供其他人使用,或者它如何与来自其他客户端的写入协同工作(最后写入获胜无论如何,无论延迟多长时间)。数据库不“可用”的事实不是问题。 SDK 认为数据库始终可用,但可能会根据连接情况提供不同的读取或写入服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多