Могут ли обновления Firestore в реальном времени выходить из строя? - PullRequest
0 голосов
/ 28 декабря 2018

Я слушаю изменения в документах в коллекции в Firestore в моей службе, работающей в экземпляре GCE с использованием Java admin SDK.Я использую Executor с одним потоком в обработчике моментальных снимков запроса, чтобы гарантировать, что полученные мной события обрабатываются последовательно в порядке их поступления.Типичный пример выглядит следующим образом:

public class ListenerClass implements EventListener<QuerySnapshot> {
    Map<String, Object> documentMap = new HashMap<String, Object>();

    public void onEvent(QuerySnapshot querySnapshot, FirestoreException error) {
        for (DocumentChange dc : querySnapshot.getDocumentChanges()) {
            switch (dc.getType()) {
            case ADDED:
            case MODIFIED:
                documentMap.put(dc.getDocument().getId(), dc.getDocument().getData());
                break;
            case REMOVED:
                documentMap.remove(dc.getDocument().getId());
                break;
            }
        }
    }
}

public class WatchService {
    public static void main(String[] args) {
        WatchService watchService = new WatchService();
        watchService.watch();
    }

    public void watch() {
        //Initialize Firebase and get firestore instance

        Executor executor = Executors.newFixedThreadPool(1);
        ListenerClass listenerClass = new ListenerClass();
        firestore.get("collection_name").addSnapshotListener(executor, listenerClass);

        //wait
    }
}

Я хотел знать, есть ли возможность в Firestore отправлять события не по порядку.Например, если документ A был обновлен в моменты времени t1 и t2.Могу ли я получить снимок документа A в момент времени t2 до моментального снимка документа в момент времени t1, если t1 и t2 очень близки друг к другу?Я не наблюдал этого в моих тестах до сих пор.Я также не видел упоминаний такого поведения другими людьми.Я просто хотел узнать, возможно ли это, и должен ли я позаботиться об этом в своем коде?

1 Ответ

0 голосов
/ 28 декабря 2018

Вы не получите снимок документа, который «отменяет» изменение, сделанное в предыдущем снимке, с точки зрения подписчика .

Однако имейте в виду, чтов многопользовательской, масштабируемой системе, такой как Firestore, упорядочение на самом деле невозможно обеспечить.Если у вас есть несколько писателей, которые читают и обновляют какой-то документ практически одновременно, вы можете столкнуться с проблемами согласованности, если они не скоординированы друг с другом.Авторы должны использовать транзакции , чтобы гарантировать, что их чтения и записи согласованы и не мешают друг другу.Если вы не координируете авторов, их изменения могут показаться случайными с точки зрения подписчика.

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