MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

terlalu banyak file yang terbuka di server mgo go

Ini bukan cara Anda menyimpan dan menggunakan koneksi MongoDB di Go.

Anda harus menyimpan mgo.Session , bukan mgo.Database contoh. Dan kapan pun Anda perlu berinteraksi dengan MongoDB, Anda memperoleh salinan atau tiruan sesi (mis. dengan Session.Copy() atau Session.Clone() ), dan Anda menutupnya saat tidak diperlukan (sebaiknya menggunakan defer penyataan). Ini akan memastikan Anda tidak membocorkan koneksi.

Anda juga religius menghilangkan memeriksa kesalahan, tolong jangan lakukan itu. Apa pun yang mengembalikan error , periksa dan lakukan dengan benar (paling tidak yang dapat Anda lakukan adalah mencetak / mencatatnya).

Jadi pada dasarnya yang perlu Anda lakukan adalah seperti ini:

var session *mgo.Session

func init() {
    var err error
    if session, err = mgo.Dial("localhost"); err != nil {
        log.Fatal(err)
    }
}

func someHandler(w http.ResponseWriter, r *http.Request) {
    sess := session.Copy()
    defer sess.Close() // Must close!

    c := sess.DB("mapdb").C("tiles")
    // Do something with the collection, e.g.
    var tile bson.M
    if err := c.FindId("someTileID").One(&result); err != nil {
        // Tile does not exist, send back error, e.g.:
        log.Printf("Tile with ID not found: %v, err: %v", "someTileID", err)
        http.NotFound(w, r)
        return
    }
    // Do something with tile
}

Lihat pertanyaan terkait:

mgo - kinerja kueri tampaknya selalu lambat (500-650 md)

Konkurensi di gopkg.in/mgo.v2 (Mongo, Go)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB sebagai layanan antrian?

  2. 4 Cara Memperbarui Dokumen di MongoDB

  3. Cara Memantau Server Database Anda Menggunakan ClusterControl CLI

  4. perintah mongo tidak dikenali saat mencoba terhubung ke server mongodb

  5. Grup MongoDB dan jumlahkan dengan id sebagai kunci