Вопросы

Производительность драйвера golang mongo

Я написал код для тестирования mongodb. Но скорость у него такая плохая. Что не так?

func mgoSpeedTest(N int) int64 {
    session, err := mgo.Dial(MongoHost)
    if err != nil {
        panic(err)
    }
    defer session.Close()
    session.SetMode(mgo.Monotonic, true)

    start := time.Now()
    for i := 0; i < N; i++ {
        sessionCopy := session.Copy()
        c := session.DB(MongoDB).C(MongoCol)
        _, err = c.Find(bson.M{"id": 1}).Count()
        if err != nil {
            log.Fatal(err)
        }
        sessionCopy.Close()
    }
    t := time.Now()
    elapsed := t.Sub(start)
    return elapsed.Milliseconds()
}

func main() {
    // speed test
    N := 1000
    ms = mgoSpeedTest(N)
    println(fmt.Sprintf("mgo: %d", ms))
}

Ответ ~~ 3500мс Пробовал использовать mongo-client, но скорость та же ~ 3700-3800

Вы выполняете 1 тысячу запросов, в среднем 3,5 мс (включая передачу по сети туда и обратно, выполнение базы данных, обработку результатов, копирование и закрытие сеанса). Что считается хорошим? Учитывая то, что происходит под капотом, я не думаю, что это плохо. Используйте тот же сеанс, если хотите повысить производительность.   —  person Егор Козельский    schedule 16.10.2019

Я также пробовал вставить 1000 документов в базу данных localhost. 1000 вставок = 36 секунд. Но в официальных скоростных характеристиках разница в скорости   —  person Егор Козельский    schedule 16.10.2019

Читать:
Растровые индексы в Go: невероятная скорость поиска

Я бы также выполнил вызов mgo.Dial() перед запуском таймера, чтобы убедиться, что ваш сеанс готов.   —  person Егор Козельский    schedule 16.10.2019

И вы исключаете возможность того, что это ваш код плохо себя ведет? Я бы не стал. Раскройте код, и мы сможем выяснить, в чем проблема. Подсказка: если бы это было обычным явлением, никто бы не использовал драйвер mongo. Даже MongoDB Inc. И все их инструменты (mongodump и т. Д.) Написаны на Go.   —  person Егор Козельский    schedule 16.10.2019

Кроме того, вы смотрите вверх id (не _id, заметьте). Это в основном означает, что выполняется сканирование коллекции. Суть: MongoDB необходимо открывать каждый документ, читать его, сравнивать значение поля id с 1. Кстати, ваш код даже не компилируется — у меня такое ощущение, что вы скрываете информацию случайно или намеренно. Если код отсутствует, это не позволяет нам помочь вам должным образом.   —  person Егор Козельский    schedule 18.10.2019

Похожие записи

DiscordAPIError: Unknown Message (Бот для назначения ролей в сообщении)

admin

Докеризация Vue во Flask с использованием uwsgi и nginx

admin

Параметризация azureSubscription из группы переменных в конвейере yaml

admin

Vapor 4 PostgreSQL CRUD без HTTP-запросов

admin

django async ORM исполнитель sync_to_async заменяет concurrent.futures.ThreadPoolExecutor при использовании gevent

admin

ошибка TS2769: этому вызову не соответствует никакая перегрузка Перегрузка 1 из 5

admin