Постоянство и MongoDB

Я пытаюсь сохранить соединение с mongoDB следующим образом:

mongo **ptr = (mongo**)get_env(argv, US_VHOST_DATA);

if(!ptr[0]) {
  mongo_replica_set_init( conn, "cluster" );
  mongo_replica_set_add_seed( conn, "mongo1.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo3.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo4.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo5.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo6.mongood.com", 27017 );
  mongo_replica_set_client( conn );
  mongo_cmd_authenticate( conn, "dbname", "dbuser", "dbpass" );

  ptr[0] = (mongo*)calloc(1, sizeof(conn));
} else {
  conn[0] = *ptr[0];
}
int count = 0;
count = mongo_count( ptr[0], "dbname", "coll", NULL);

mongo_destroy( ptr[0] );

xbuf_xcat(reply, "<h3>%d</h3>", count);

Но очевидно, что это не работает... Моя цель - избегать времени соединения при каждом запросе (~30 мс)

Это выполнимо? Что не так в этом примере?

Код не жаловаться, но он просто возвращает -1 вместо правильного числа счета.

Спасибо за помощь.


[EDIT] Удаление блока else и удаление строки mongo_destroy работают как положено \o/

2 ответа

Я никогда не использовал mongo, но, глядя на ваш код, вы выделяете пространство для ptr[0], но вы ничего ему не присвоили, поэтому последующие вызовы всегда будут возвращать -1. И блок else ничего не делает, потому что вы делаете все вызовы монго, используя ptr[0] вместо conn, поэтому либо удалите блок else, либо исправьте все вызовы mongo, чтобы использовать conn вместо ptr[0], и не забудьте назначьте conn для ptr после вызова.

Посмотрите на пример mysql.c, предоставленный для загрузки G-WAN. Он делает ту же работу так, чтобы вас не смутило.

Другие вопросы по тегам