Attualmente sto lavorando su alcuni test e benchmark personali per confrontare il flusso di lavoro e l'efficienza tra l'utilizzo di MongoDB e MySQL con dati di esempio reali.Apertura e chiusura di 16000 istanze di Mongo DB in PHP
Per configurare i miei dati in ogni database, sto facendo diverse migliaia di cicli e creando in modo casuale oggetti dati da inserire nel database.
Tuttavia, sto riscontrando alcuni problemi con la classe Mongo in PHP che non riesco a risolvere. Il problema è così:
Ho un ciclo che crea una nuova istanza e connessione Mongo, inserisce una piccola matrice in una raccolta e quindi chiude la connessione. Questo ciclo dovrebbe essere eseguito 20000 volte. Tuttavia, fallisce sempre attorno al ciclo 16300nd (con un minimo di 16200 e un massimo di 16350 direi dopo poche esecuzioni) quando tenta di creare l'istanza/effettuare una connessione.
Il codice del ciclo è inferiore:
$data = get_random_user_data();
$mongo = new Mongo('mongodb://admin:[email protected]:27017/test');
if ($mongo->test->users->insert($data)) {
$users[] = array('id' => $data['_id'], 'name' => $data['username']);
echo $i." - Added user: ".$data['username'].'<br/>';
}
$mongo->close();
get_random_user_data() solo restituisce un array associativo semplice.
L'errore che ottengo è:
Fatal error: Uncaught exception 'MongoConnectionException' with message 'Unknown error'
Sulla linea:
$mongo = new Mongo('mongodb://admin:[email protected]:27017/test');
Tutte le idee? C'è qualcosa di fondamentale che mi manca come sicurezza o prevenzione dello spam?
Grazie in anticipo.
Info extra:
Lo script muore a circa 114,9797 secondi. Non è una memoria PHP o un problema basato sul tempo, poiché tutti i limiti vengono risolti e ho eseguito i miei benchmark MySQL ieri inserendo 120000 righe (con lo stesso metodo di connessione aperta, inserimento, connessione chiusa) per circa un'ora senza problemi.
Eseguire PHP versione 5.3.5
phpinfo informazioni Mongo:
MongoDB Support enabled
Version 1.2.0-
Directive Local Value Master Value
mongo.allow_empty_keys 0 0
mongo.allow_persistent 1 1
mongo.auto_reconnect 1 1
mongo.chunk_size 262144 262144
mongo.cmd $ $
mongo.default_host localhost localhost
mongo.default_port 27017 27017
mongo.long_as_object 0 0
mongo.native_long 0 0
mongo.no_id 0 0
mongo.utf8 1 1
Hmm, interessante. Potresti riutilizzare la connessione? Forse è una cosa per processo? Cosa succede se provi la stessa cosa in, per esempio, Python? Hai sfruttato il sorgente MongoDB (e/o il driver PHP) per "Errore sconosciuto"? Cosa succede se si dorme un po 'tra le connessioni? – Cameron
Impossibile davvero riutilizzare la connessione poiché è una cosa che voglio includere nel benchmark. Al momento di questo commento qualcuno ha detto di avere lo stesso problema con il loro driver Ruby. Non ho esaminato la fonte, ma lo farò quando avrò la possibilità. Grazie per la risposta. :) – Chrisui
Sì, capisco il benchmark, mi stavo chiedendo se sono le molte connessioni che stanno causando il problema (che sembra verosimilmente data la risposta di Ramesh) – Cameron