私は、同時に実行され、同じデータベースと対話するサーバーとプッシュ通知デーモンに取り組んできました。この背後にあるアイデアは、一方がダウンすると、他方は引き続き機能するということです。2つのファイル/プロセスから1つのMongooseデータベースを使用するのは安全ですか?
私は普通スウィフトを使用しますが、このプロジェクトのために私は自分のデータベースとしてMongooseを使用して、ノードでそれを書いています。私はserver.js
ファイルと私のnotifier.js
ファイルの両方でインポートするヘルパーclass
を作成しました。両方server.js
と私はオブジェクトを作成し、データベース照会notifier.js
から次に別途
const Mongoose = require('mongoose');
const Device = require('./device'); // This is a Schema
var uri = 'mongodb://localhost/devices';
function Database() {
Mongoose.connect(uri, { useMongoClient: true }, function(err) {
console.log('connected: ' + err);
});
}
Database.prototype.findDevice = function(params, callback) {
Device.findOne(params, function(err, device) {
// etc...
});
};
module.exports = Database;
:
const Database = require('./db');
const db = new Database();
db.findDevice(params, function(err, device) {
// Simplified, but I edit and save things back to the database via db
device.token = 'blah';
device.save();
});
を行うのは、この安全ですか? Swift(とObjective-C)を使って作業するとき、私は常にスレッドを安全にすることを心配しています。これは心配ですか?競合状態が心配で、同じファイルを同時に変更する必要がありますか?
また、ボーナスに関する質問:Mongooseはファイル(またはプロセス)間の接続をどのように共有しますか?例えば、Mongoose.connection.readyState
は同じファイルを別のファイルから返します。
MongoDBは完全に別個のサービスであり、多くの場合、専用のマシン上で動作します。 「異なるプロセスでファイルを開く」のようなものではありません。これは「データベース」であり、同時に実行される複数のプロセスのために作られています。だから "スレッドセーフ"は本当に主題とは関係がありません。あなたが書く方法は、並行操作に安全ですか?それは、あなたが実装するコードに完全に依存する完全に異なる質問です。しかし、あなたの一般的な質問は、データベースが何であるかを理解していないこと、そして研究すべきことを示しています。 –
@NeilLunn私の無知を実証したので、MongoDB/Mongooseについて詳しく説明するリンクやリソースの提案はありますか?私は一週間中の文書を読んでいましたが、できる限り多くの質問がありましたが、明らかにそれは私がどこにいるべきなのかわかりません。 –
あなたが指摘したように、「データベース」の基本概念そうです。簡単に言えば、それは「テキストファイル」とは大きく異なります。説明が必要な場合は、「データベースはどのように機能するのですか?」などのトピックを検索することができます。そのような回答は通常「本」をカバーし、ここで意味のある回答には本当に適していません。 –