MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mgo - производителността на заявката изглежда постоянно бавна (500-650ms)

.. има ли нещо очевидно, което би подсказвало защо моите заявки са средно 500-650ms?

Да, има. Извиквате mgo.Dial() преди да изпълните всяка заявка. mgo.Dial() трябва да се свързва със сървъра MongoDB всеки път, който затваряте веднага след заявката. Установяването на връзката може да отнеме стотици милисекунди, включително удостоверяване, разпределяне на ресурси (както от страна на сървъра, така и от страна на клиента) и т.н. Това е много разточително.

Този метод обикновено се извиква само веднъж за даден клъстер. След това се установяват допълнителни сесии към същия клъстер с помощта на методите New или Copy върху получената сесия. Това ще ги накара да споделят основния клъстер и да управляват по подходящ начин пула от връзки.

Създайте глобална променлива на сесията, свържете се при стартиране веднъж (използвайки например пакет init() функция) и използвайте тази сесия (или нейно копие/клонинг, получено от Session.Copy() или Session.Clone() ).Например:

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. Как да разрешите на всички хостове да имат реплика, зададена в mongodb

  2. как да освободя кеширането, което се използва от Mongodb?

  3. Каква версия на MongoDB е инсталирана на Ubuntu

  4. Как да изхвърлите база данни в MongoDB от командния ред

  5. Разбиране на ограничението за размера на документа на MongoDB BSON