0

データベースの使用経験はありませんが、作成中のアプリで使用する必要があるため、MongoDBを選択します。

これですべてが機能していますが、データベースにリクエストを送信するたびに新しいMongoオブジェクトを作成しており、それが間違っていることを理解しています。

だから私はこれを行う正しい方法を尋ねて学びたいのです、私は次のようなコードをクラスに持っていますMongoDbConnnection

public class MongoDbConnection {
    private static Mongo _mongo;
        public static Mongo getMongo()
        {
            if (_mongo == null) {
            try {
                    _mongo = new Mongo();
                } catch (UnknownHostException e) {
                    _mongo = null;
                    e.printStackTrace();
                } catch (MongoException e) {
                    _mongo = null;
                    e.printStackTrace();
                }
            }
        return _mongo;
    }
}

そのため、クエリを実行する必要があるたびに、実行してMongo m = MongoDbConnnection.getMongo();先に進みます。

これは正しいです?

また、接続を閉じるタイミングについても混乱しています。拡張HttpServletしてGETに応答する別のクラスがあるため、誰かがそのURLを要求するたびに、データベースにクエリを実行して情報を返す必要があります。あるリクエストに応答した直後に閉じた場合、その直後に他の人が再度リクエストした場合はどうなりますか。次に、新しいMongoオブジェクトを再度作成する必要がありますか?

言い換えると、Mongoインスタンスが接続ポーリングを維持していることを知っているので、m.close()を呼び出すと、使用した接続を置き換えるだけですか、それともオブジェクトmをnullに設定しますか?

4

1 に答える 1

0

はい、ほとんどの場合、次の方法で維持されている接続のプールから接続を取得しています。

Mongo m = new Mongo();
DB db = m.getDB( "mydb" );

必要なMongoオブジェクトは1つだけで、スレッドセーフです。

実装については詳しく調べていませんが、電話する必要があります

db.close() from your code. 

これは単にプールへの接続を返し、それを閉じません。それを忘れると、Mongoオブジェクトが接続が使用されなくなったことに気付くまでに時間がかかると思います。

于 2012-02-06T03:52:58.533 に答える