CouchDB 8M di documenti

Written by on novembre 29, 2011 in Cloud Computing, PHP - No comments

Beh quando sbaglio qualcosa si vede proprio. Parlo del post precedente dove ho provato un inserimento massivo su CouchDB e a 2.5 milioni di contenuti e il document store ha gestito lo spazio disco arrivando a quasi 17G di spazio occupato.

Devo ancora approfondire come mai i metadati gestiti da CouchDB hanno occupato così tanto spazio. Sto seguendo diverse discussioni in proposito e ancora devo provare la compressione e l’ottimizzatore di CouchDB per ridurre ed ottimizzare lo store dei dati.

Tramite il sistema di BULK offerto da CouchDB è possibile gestire un inserimento/aggiornamento massivo ed andare ad ottimizzare il carico verso il server. I risultati di questo test sono quello che realmente mi aspetto da un sistema come CouchDB: 8 Milioni di contenuti in 1 ora e 10 minuti su una macchina virtuale con solo 1G di ram ed 1 CPU virtualizzata tramite VirtualBox da un Mac Book DualCore con 2 G di RAM totali, ovvero una macchina molto molto scarsa in termini di prestazioni.

CouchDB comparison

CouchDB confronto BULK Insert vs Single Insert

Come si può vedere il database “geonames_bulk” occupa solo 6GB (MySQL ne occupa meno di 2GB per la stessa quantità di dati) per quasi 8 milioni di documenti mentre “geonames” è arrivato 16.7 GB per soli 2.3 milioni di documenti.

Prossimamente porterò avanti questi test operativi per riuscire ad analizzare il quantitativo di metadati e vedere l’ottimizzatore come va ad agire sulla CPU e sulla quantità dei dati.

Lo script utilizzato (dove si vede la semplicità di CouchDB che lo rende unico):

<?php
$filename =  dirname(__FILE__) . '/allCountries.txt';
$file = new SplFileObject($filename ,'r');

$map = array(
    0  => 'id',
    1  => 'name',
    2  => 'asciiName',
    3  => 'alternateNames',
    4  => 'latitude',
    5  => 'longitude',
    6  => 'featureClass',
    7  => 'featureCode',
    8  => 'countryCode',
    9  => 'cc2',
    10 => 'admin1Code',
    11 => 'admin2Code',
    12 => 'admin3Code',
    13 => 'admin4Code',
    14 => 'population',
    15 => 'elevation',
    16 => 'gTopO30',
    17 => 'timezone',
    18 => 'modificationDate'
);

$timeStart = microtime(true);

$ch = curl_init('http://couchdb.local:5984/geonames_bulk/_bulk_docs');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

$index = 0;
$data = array();
while (!$file->eof()) {
    $document = array_combine($map, $file->fgetcsv("\t"));
    $data["docs"][] = $document;

    if ($index % 100 == 0) {
        $data = json_encode($data);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $returned = curl_exec($ch);

        if (!$returned) {
            exit("NOT RUN");
        } else {
          echo ".";
        }
        $data = array();
    }

    ++$index;
}

$timeEnd = microtime(true);
$timeDiff = $timeEnd - $timeStart;
echo "time taken : {$timeDiff} s";

About the author

Sono, Walter Dal Mut, un consulente che opera nel mondo dell'IT come freelance in Torino e provincia. Il mio mondo informatico/elettronico ruota intorno a quatto tecnologie essenziali che sono Zend Framework per lo sviluppo di Applicazioni Web, Eclipse Framework per lo sviluppo di Applicazioni Desktop, Android Platform e iOS Apple per lo sviluppo di applicazioni mobile.

Comments are closed.

Categorie