В моем слое данных используется Mongo aggregation приличное количество, и в среднем запросы возвращаются 500-650 мс. Я использую mgo
.mgo - производительность запросов кажется медленно медленной (500-650 мс)
Ниже показана примерная функция запроса, которая представляет собой то, что представляет собой большинство моих запросов.
func (r userRepo) GetUserByID(id string) (User, error) {
info, err := db.Info()
if err != nil {
log.Fatal(err)
}
session, err := mgo.Dial(info.ConnectionString())
if err != nil {
log.Fatal(err)
}
defer session.Close()
var user User
c := session.DB(info.Db()).C("users")
o1 := bson.M{"$match": bson.M{"_id": id}}
o2 := bson.M{"$project": bson.M{
"first": "$first",
"last": "$last",
"email": "$email",
"fb_id": "$fb_id",
"groups": "$groups",
"fulfillments": "$fulfillments",
"denied_requests": "$denied_requests",
"invites": "$invites",
"requests": bson.M{
"$filter": bson.M{
"input": "$requests",
"as": "item",
"cond": bson.M{
"$eq": []interface{}{"$$item.active", true},
},
},
},
}}
pipeline := []bson.M{o1, o2}
err = c.Pipe(pipeline).One(&user)
if err != nil {
return user, err
}
return user, nil
}
user
структура у меня выглядит следующим образом ..
type User struct {
ID string `json:"id" bson:"_id,omitempty"`
First string `json:"first" bson:"first"`
Last string `json:"last" bson:"last"`
Email string `json:"email" bson:"email"`
FacebookID string `json:"facebook_id" bson:"fb_id,omitempty"`
Groups []UserGroup `json:"groups" bson:"groups"`
Requests []Request `json:"requests" bson:"requests"`
Fulfillments []Fulfillment `json:"fulfillments" bson:"fulfillments"`
Invites []GroupInvite `json:"invites" bson:"invites"`
DeniedRequests []string `json:"denied_requests" bson:"denied_requests"`
}
Основываясь на том, что я представил, что-нибудь очевидно, что хотел бы предложить, почему мои запросы в среднем 500-650ms?
Я знаю, что я, вероятно, проглотил немного удара по производительности, используя конвейер агрегации, но я не ожидал, что это будет так плохо.
У вас есть какой-либо указатель на 'request.active'? – RickyA
Как выглядит план запроса? ('db.collection.find ({$ query: {}, $ explain: 1})') – RickyA