Гарантирует ли MongoDB, что после успешного сохранения ответа данные будут доступны для мгновенного поиска

#java #mongodb #synchronous

#java #mongodb #синхронный

Вопрос:

Я работаю над проектом java / kotlin, где только что сохраненный объект должен быть доступен для немедленного поиска. Точно так же, как синхронное сохранение в базах данных sql (PostgreSQL). Я читал, что драйверы Java MongoDB обеспечивают как синхронное, так и асинхронное взаимодействие с MongoDB.

Но гарантирует ли MongoDB, что после успешного ответа на сохранение данные будут доступны для мгновенного поиска? Может быть, у него есть внутренняя очередь для еще не сохраненных данных, как в Elasticsearch и Couchbase?

Другими словами, будет ли когда-либо выдаваться исключение? Например, при большой нагрузке. Мы предполагаем, что someId = object.some_id .

 fun saveObjectInMongo(collection: MongoCollection<Document>, someId: String, object: String) {
    collection.insertOne(Document.parse(object))
    if (collection.find(eq("some_id", someId)).first().isNullOrEmpty()) {
        throw RuntimeException("Can't get just saved object")
    }
}
 

Комментарии:

1. Вы имеете в виду чтение ваших собственных записей или возможность немедленного чтения из другого места?

2. @Joe Я имел в виду возможность немедленного чтения из другого места

Ответ №1:

Основная концепция — правильное использование проблем записи / чтения. В этом случае требуется решение большинства.

«После того, как операция записи возвращается с подтверждением w: «большинством» для клиента, клиент может прочитать результат этой записи с помощью «большинства» readConcern».

https://docs.mongodb.com/manual/reference/write-concern/
https://docs.mongodb.com/manual/reference/read-concern/