Можно ли использовать Firebase для реализации распределенного мьютекса? - PullRequest
0 голосов
/ 19 мая 2018

Я думал об использовании такой транзакции для реализации своего рода распределенной блокировки:

  let lockId = `myLock`
  let lockRef = firebaseAdmin.database().ref(`/locks/${lockId}`)
  lockRef.transaction(function(current) {
    if (current === null) {
      return "1"
    }
  }, function(error, committed) {
    if (committed) {
      // .... Do the synchronized work I need ...
      lockRef.remove()
    }
  })

У меня такой вопрос: будет ли функция обновления вызываться с нулем только в том случае, если данные не существуют?

Как правило, это правильный способ реализации распределенной блокировки?

1 Ответ

0 голосов
/ 19 мая 2018

Первоначально транзакция будет вызвана с наилучшим предположением клиента о текущем значении.Если у клиента нет текущего значения в памяти, лучше всего предположить, что текущего значения нет.

Это означает, что нет никакой гарантии, что в базе данных не существует никакого значения, если вы получитеnull.

Также см .:

...