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

mgo - kinerja kueri tampaknya lambat secara konsisten (500-650 ms)

.. apakah ada sesuatu yang jelas yang menunjukkan mengapa kueri saya rata-rata 500-650 md?

Ya ada. Anda memanggil mgo.Dial() sebelum mengeksekusi setiap kueri. mgo.Dial() harus terhubung ke server MongoDB setiap saat, yang Anda tutup tepat setelah kueri. Koneksi mungkin membutuhkan ratusan milidetik untuk stabil, termasuk otentikasi, mengalokasikan sumber daya (baik di sisi server dan klien), dll. Ini sangat boros.

Metode ini umumnya dipanggil hanya sekali untuk cluster tertentu. Sesi lebih lanjut ke cluster yang sama kemudian dibuat menggunakan metode Baru atau Salin pada sesi yang diperoleh. Ini akan membuat mereka berbagi cluster yang mendasarinya, dan mengelola kumpulan koneksi dengan tepat.

Buat variabel sesi global, sambungkan saat startup sekali (menggunakan mis. paket init() function), dan gunakan sesi itu (atau salinan / tiruannya, diperoleh dengan Session.Copy() atau Session.Clone() ).Misalnya:

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
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. E11000 duplikat indeks kesalahan kunci di mongodb luwak

  2. MongoDB $dateFromParts

  3. Bagaimana saya bisa terhubung ke MongoDB Atlas menggunakan Robomongo?

  4. Beberapa referensi skema dalam array skema tunggal - luwak

  5. Konversi Dokumen BSON ke JSON di Java