CouchDB 2.5 milioni di documenti

Written by on novembre 26, 2011 in Cloud Computing, PHP - 1 Comment

Da diverso tempo sto analizzando e provando diversi prodotti della famiglia NOSQL, in particolare MongoDB, Redis e CouchDB. Ieri ho portato a termine un primo inserimento massivo di 2.5 milioni di documenti.

CouchDB è e dopo ieri rimane il Document Store che preferisco (rispetto a MongoDB in quanto Redis è un Key Value in senso stretto più che un Document Store).

I dati di caricamento sono stati presi da punti geolocalizzati nel mondo, ovvero città e destinazioni per un totale di più di 2.5 milioni di documenti.

Devo ammettere che per quanto sia stupendo il sistema CouchDB i dati su disco occupano veramente tanto spazio. Stiamo parlando di 17GB di spazio contro i circa 2GB di uno stesso test eseguito con MySQL su engine MyISAM e due soli indici (primario e fulltext su tre colonne) e tre volte i dati immagazinati (6M+).

Le generazione delle viste per una navigazione basata su schemi di Map/Reduce invece non è invasiva sullo spazio disco e la generazione è abbastanza veloce anche su una base così estesa.

La cosa più incredibile di CouchDB è la semplicità di utilizzo, se vogliamo “spingere” i contenuti singolarmente presi da CSV basta realizzare uno script banalissimo in PHP

<?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'
);
$id = 1;
while (!$file->eof()) {
    $data = json_encode(array_combine($map, $file->fgetcsv("\t")));

    $headers = array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data)
    );

     $ch = curl_init('http://couchdb.local:5984/geonames/' . $id);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 $returned = curl_exec($ch);

    ++$id;

//     echo ($id % 80 == 0) ? "." . PHP_EOL : '.';
}

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.

Trackbacks for this post

  1. CouchDB 8M di documenti | Walter Dal Mut

Comments are now closed for this article.

Categorie