MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

quá nhiều tệp đang mở trong máy chủ mgo go

Đây không phải là cách bạn lưu trữ và sử dụng kết nối MongoDB trong Go.

Bạn phải lưu trữ một mgo.Session , không phải mgo.Database ví dụ. Và bất cứ khi nào bạn cần tương tác với MongoDB, bạn sẽ có được một bản sao hoặc một bản sao của phiên (ví dụ:với Session.Copy() hoặc Session.Clone() ), và bạn đóng nó khi bạn không cần (tốt hơn là sử dụng defer tuyên bố). Điều này sẽ đảm bảo bạn không bị rò rỉ kết nối.

Bạn cũng theo tôn giáo bỏ qua kiểm tra lỗi, xin vui lòng không làm điều đó. Dù trả về lỗi error , hãy kiểm tra nó và thực hiện đúng cách (ít nhất bạn có thể làm là in / ghi lại nó).

Vì vậy, về cơ bản những gì bạn cần làm là như sau:

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
}

Xem các câu hỏi liên quan:

mgo - hiệu suất truy vấn dường như luôn chậm (500-650ms)

Đồng tiền trong gopkg.in/mgo.v2 (Mongo, Go)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao mongoDB sử dụng objectID?

  2. Ghi nhật ký kiểm tra cho MongoDB

  3. DeprecationWarning:collection.findAndModify không được dùng nữa. Sử dụng findOneAndUpdate, findOneAndReplace hoặc findOneAndDelete thay thế?

  4. Tạo trường autoincrement duy nhất với mongoose

  5. Làm cách nào để thêm id duy nhất hai cột vào mongodb trong ứng dụng sao băng?