sql >> データベース >  >> NoSQL >> MongoDB

mgo-クエリのパフォーマンスは一貫して遅いようです(500-650ms)

    ..私のクエリアが平均500-650msである理由を示唆する明らかなものはありますか?

    はいあります。 mgo.Dial()を呼び出しています 各クエリを実行する前に。 mgo.Dial() クエリの直後に閉じるMongoDBサーバーに毎回接続する必要があります。認証、リソースの割り当て(サーバー側とクライアント側の両方)など、接続が安定するまでに数百ミリ秒かかる可能性があります。これは非常に無駄です。

    このメソッドは通常、特定のクラスターに対して1回だけ呼び出されます。 次に、取得したセッションでNewメソッドまたはCopyメソッドを使用して、同じクラスターへのセッションがさらに確立されます。これにより、基盤となるクラスターを共有し、接続プールを適切に管理できるようになります。

    グローバルセッション変数を作成し、起動時に1回接続します (例:パッケージinit()を使用 関数)、およびそのセッション(またはSession.Copy()によって取得されたそのコピー/クローン)を使用します またはSession.Clone() 例:

    var session *mgo.Session
    var info *db.Inf // Use your type here
    
    func init() {
        var err error
        if info, err = db.Info(); err != nil {
            log.Fatal(err)
        }
        if session, err = mgo.Dial(info.ConnectionString()); err != nil {
            log.Fatal(err)
        }
    }
    
    func (r userRepo) GetUserByID(id string) (User, error) {
        sess := session.Clone()
        defer sess.Close()
    
        // Now we use sess to execute the query:
        var user User
        c := sess.DB(info.Db()).C("users")
        // Rest of the method is unchanged...
    }
    



    1. Redis SortedSet:2つの値のスコアが同じ場合に、アルファベット順ではなく番号順に値を取得するにはどうすればよいですか?

    2. PostgresとHasuraでのCouchDBスタイルの同期と競合解決

    3. Mongodbで最後のX分のデータを取得するためのクエリ

    4. redisとpythonを使用して特定の受信者が消費するフェイルセーフメッセージブロードキャスト