sql >> Databáze >  >> NoSQL >> MongoDB

příliš mnoho otevřených souborů na serveru mgo go

Takto neukládáte a používáte připojení MongoDB v Go.

Musíte uložit mgo.Session , nikoli mgo.Database instance. A kdykoli potřebujete komunikovat s MongoDB, získáte kopii nebo klon relace (např. pomocí Session.Copy() nebo Session.Clone() ) a zavřete jej, když jej nepotřebujete (nejlépe pomocí defer prohlášení). Tím zajistíte, že nedojde k úniku spojů.

Vy také nábožensky vynechejte kontrolu chyb, prosím nedělejte to. Cokoli vrátí error , zkontrolujte to a postupujte podle toho správně (nejméně, co můžete udělat, je vytisknout/zaprotokolovat).

Takže v podstatě to, co musíte udělat, je něco takového:

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
}

Viz související otázky:

mgo – výkon dotazu se zdá být trvale pomalý (500–650 ms)

Souběžnost v gopkg.in/mgo.v2 (Mongo, Go)



  1. MongoDB – A co desetinný typ hodnoty?

  2. LuaSocket, Lua 5.2 a Redis

  3. Vytvořte textový index s různými tloušťkami polí v MongoDB

  4. existuje způsob, jak automaticky generovat ObjectId, když je model mongoose nový?