является ли CosmosDB потокобезопасным? (NodeJS)

#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. Итак, возвращаясь к тому, что я только что сказал о «потоках», как правило, единственное, что действительно имеет значение для «потокобезопасности и подключений к базе данных», — это то, что вы не копируете / разветвляете / порождаете фактический экземпляр соединения. Ваш код этого не делает, и вы ничего не копируете / разветвляете / порождаете. Итак, чтобы ответить на все ваши вопросы, передача глобальных переменных в порядке вещей .