Порядок документов в базе данных Firebase в реальном времени - PullRequest
1 голос
/ 30 апреля 2020

Я слушаю новые документы базы данных Firebase Realtime с кодом, похожим на этот:

firebase.database().ref(path)
  .orderByChild('timestamp')
  .on('child_added', snap => {
    ...
  });

, где на сервере установлена ​​метка времени с firebase.database.ServerValue.TIMESTAMP . Я хотел бы, чтобы документы всегда обрабатывались в порядке отметок времени, но я знаю, что документы, которые я добавляю локально, могут поступать в указанном выше коде не по порядку.

Я могу проверять и исправлять неупорядоченные прибытия, но я ' Я бы предпочел не делать этого, если есть какой-то способ, чтобы этого не произошло. Я знаю о этом ответе (и ответах, которые ссылаются на него), но я считаю, что это применимо к более раннему API без методов упорядочения, таких как orderByChild.

Я считаю, чтобы я мог получать порядок меток времени, если я всегда добавляю документы с использованием транзакции и передаю false в аргументе applyLocally. Мне интересно, работает ли он также для добавления документов из отдельного Javascript контекста на одном клиенте (например, из Web Worker ) без транзакции.

Будет ли один или оба из них подходы гарантируют временную метку заказа? Есть ли другой способ добиться этого? Среди подходов, которые работают, один явно превосходит или есть компромиссы между ними?

1 Ответ

1 голос
/ 30 апреля 2020

Событие локальной оценки / компенсации задержки запускается только на клиенте, который выполняет операцию записи. Поэтому, если вы выполняете операцию записи в другом контексте, исходный контекст будет видеть эту операцию только тогда, когда она поступит с сервера.

Вы могли бы даже быть в состоянии выполнить sh это используя два FirebaseApp экземпляра, хотя я не смог заставить это работать в быстром тесте здесь сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...