#node.js #azure-cosmosdb
#node.js #azure-cosmosdb
Вопрос:
Я хотел бы знать, безопасно ли совместно использовать одну и ту же базу данных cosmos db и объект контейнера (коллекции) во всем приложении? Спасибо
РЕДАКТИРОВАТЬ: я инициализирую базу данных при запуске приложения и помещаю объект app (expressjs), затем извлекаю его в своих контроллерах из запроса следующим образом :
app.listen(process.env.PORT || 3000, function () {
db.init().catch(err => {
console.error(err);
console.error("Shutting down because there was an error setting up the database.");
process.exit(1);
});
recordsDb.init();
app.set('db',db);
});
в моем контроллере :
exports.doDbStuff = async function(req,res){
const db = req.app.get('db');
//do stuff..
res.status(200).end();
}
Комментарии:
1. Я полагаю, вы имеете в виду Microsoft Azure Cosmos JavaScript SDK ? Я также предполагаю, что вы имеете в виду «передать экземпляр модулям», поскольку на самом деле это немного отличается от «потокобезопасности». Итак, по сути, вы спрашиваете, можете ли вы «поделиться подключением» в отличие от повторного подключения в каждой функции, да?
2. Извините, я не был ясен, я добавил некоторый код, надеюсь, теперь вы понимаете, что я имел в виду
3. То, что вы сейчас опубликовали, — это то, что, как я думал, вы имели в виду. Да, это совершенно нормально и хорошая практика. Не имеет ничего общего с «потокобезопасностью», просто для справки. Термин «потокобезопасный» на самом деле применим к случаям, когда вы можете «разветвлять» новый запущенный экземпляр nodejs или аналогичным образом создавать «потоки» с другими языками, а затем совместно использовать значение с этим. Простая передача глобальных экземпляров в однопоточной среде nodejs — это совершенно нормально. Однако, похоже, что он не является (или, по крайней мере, напрямую) официальным CosmosDB API. Не то чтобы это вообще имело значение
4. Большое спасибо, еще один вопрос, в моем объекте db у меня также есть экземпляр containers (коллекция) и containerURL (для хранения больших двоичных объектов), которые инициализируются с помощью вызова init в начале, может ли это быть проблемой?
5. Итак, возвращаясь к тому, что я только что сказал о «потоках», как правило, единственное, что действительно имеет значение для «потокобезопасности и подключений к базе данных», — это то, что вы не копируете / разветвляете / порождаете фактический экземпляр соединения. Ваш код этого не делает, и вы ничего не копируете / разветвляете / порождаете. Итак, чтобы ответить на все ваши вопросы, передача глобальных переменных в порядке вещей .