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

mgoセッションを維持するためのベストプラクティス

    そのようなグローバルセッションは使用しないことをお勧めします。代わりに、すべてのデータベースの相互作用を担当するタイプを作成できます。例:

    type DataStore struct {
        session *mgo.Session
    }
    
    func (ds *DataStore) ucol() *mgo.Collection { ... }
    
    func (ds *DataStore) UserExist(user string) bool { ... }
    

    その設計には多くの利点があります。重要なのは、同時に複数のセッションを実行できることです。たとえば、httpハンドラーがある場合は、その1つのリクエストに対してのみ独立したセッションに基づくローカルセッションを作成できます。

    func (s *WebSite) dataStore() *DataStore {
        return &DataStore{s.session.Copy()}
    }    
    
    func (s *WebSite) HandleRequest(...) {
        ds := s.dataStore()
        defer ds.Close()
        ...
    }
    

    この場合、セッションは内部的にキャッシュされ、再利用/維持されるため、mgoドライバーは適切に動作します。各セッションは、使用中に独立したソケットによってバックアップされ、独立した設定が構成されている場合があり、独立したエラー処理もあります。これらは、単一のグローバルセッションを使用している場合に最終的に対処しなければならない問題です。



    1. MongoDB接続の.NETベストプラクティス?

    2. 集計$lookupは、要素の元の配列順序を返しません

    3. 既存のリレーショナルデータベースをKey-Valueストアに変換するにはどうすればよいですか?

    4. Node.js、(Hi)Redis、およびマルチコマンド