#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/