12. EXEMPLE
add <?php
$memcache = new Memcache;
get $memcache->connect('memcache.wan', 11211);
$membre = $memcache->get('DamienSeguy');
set
var_dump($membre);
?>
replace
increment
15. STOCKAGE DE BLOB
Memcache == stockage de BLOB
Stockage plus structuré ?
Tableaux de données, multi-dimensionnels
16. ENTREPÔTS CLÉ/VALEUR
Uniquement des paires clé => valeur
Les lignes deviennent un document
Les tables deviennent des collections
Il n’y a plus de modèle de données
Quelques types : date, entier, chaîne, booléen, list, map
17. STRUCTURE
{
"_id": "ABBC89DDEBC",
"_rev": "876BBDC",
"type": "blog",
"titre": "Un nouveau paradigme de bases de données",
"contenus": "Un nouveau paradigme de bases de données",
"tags": ["bd", "json", "super"],
"publié": true
}
18. STRUCTURE
Format JSON (comme XML, mais plus simple)
{
"_id": "ABBC89DDEBC",
"_rev": "876BBDC",
"type": "blog",
"titre": "Un nouveau paradigme de bases de données",
"contenus": "Un nouveau paradigme de bases de données",
"tags": ["bd", "json", "super"],
"publié": true
}
19. STRUCTURE
Format JSON (comme XML, mais plus simple)
Clé primaire pour tous
{
"_id": "ABBC89DDEBC",
"_rev": "876BBDC",
"type": "blog",
"titre": "Un nouveau paradigme de bases de données",
"contenus": "Un nouveau paradigme de bases de données",
"tags": ["bd", "json", "super"],
"publié": true
}
20. STRUCTURE
Format JSON (comme XML, mais plus simple)
Clé primaire pour tous
{
"_id": "ABBC89DDEBC",
"_rev": "876BBDC", Numéro de révision
"type": "blog",
"titre": "Un nouveau paradigme de bases de données",
"contenus": "Un nouveau paradigme de bases de données",
"tags": ["bd", "json", "super"],
"publié": true
}
21. STRUCTURE
Format JSON (comme XML, mais plus simple)
Clé primaire pour tous
{
"_id": "ABBC89DDEBC",
"_rev": "876BBDC", Numéro de révision
"type": "blog",
"titre": "Un nouveau paradigme de bases de données",
"contenus": "Un nouveau paradigme de bases de données",
"tags": ["bd", "json", "super"],
"publié": true
}
Booléen
22. STRUCTURE
Format JSON (comme XML, mais plus simple)
Clé primaire pour tous
{
"_id": "ABBC89DDEBC",
"_rev": "876BBDC", Numéro de révision
"type": "blog",
"titre": "Un nouveau paradigme de bases de données",
"contenus": "Un nouveau paradigme de bases de données",
"tags": ["bd", "json", "super"],
"publié": true
} Liste
Booléen
23. VUES function (doc) {
for(var i in doc.tags)
emit(doc.tags[i], 1);
}
Les vues sont écrites en JavaScript
"bd"
"json"
Possibilités de filtrer, retraiter
"super"
Approche map/reduce
Groupages multiples, sous-requêtes...
24. VUES function (doc) {
for(var i in doc.tags)
emit(doc.tags[i], 1);
}
Les vues sont écrites en JavaScript
"bd",1
"bd"
"json",2
"json"
Possibilités de filtrer, retraiter
"super",1
"super"
Approche map/reduce function (Key, Values) {
var sum = 0;
Groupages multiples, sous-requêtes...
for(var i in Values)
sum += Values[i];
return sum;
}
25. AVANTAGES
Une approche naturelle des documents
Migration naturelle, pas de NULL
Pas de délire avec les jointures
Indexation
Partitionnement, réplication, clustering, fail over, MVCC
API REST en HTTP
26. LIMITATIONS
Ce n’est pas une base objet
Syndrome de PHP3!
Pas de transactions
Attention aux conflits!
29. CONCEPTION DE SCRIPT
Application de forum
Modèle hiérarchique : entrée >> sortie
modèle adjacent : sortie >> entrée
PHP assume le travail, en ligne avec l’internaute!
30. ARCHI
La transaction Web doit
attendre chaque élément de
l’architecture
33. GEARMAN
Anagramme de manager
Un système de distribution de tâches
Trois acteurs :
serveur, gearmand : distribue les tâches
client, gearman : émet les commandes
esclave, worker : effectue les tâches
36. FONCTIONNEMENT
PHP assure le filtrage des données, l’enregistrement des
commandes, la restitution au navigateur
Gearman répartit les tâches entre esclaves
Si la charge augmente, il faut ajouter des esclaves
Spécialisation des serveurs, réorganisation
Découplage des frontaux Web
38. MAP/REDUCE
Découpage du travail en Corpus
lots
Traitement du lot : MAP Map Map Map Map
m1:1; m2:2 m2:1 m1:3; m3:1
Concentration des
résultats : reduce Regroupement
Résultat final m1:1,3 m2:2,1 m3:1
Reduce Reduce Reduce
Hadoop fait tout sauf map
et réduce m1:4 m2:3 m3:1
39. UN MODÈLE ROBUSTE
Détection des crash
Relance des tâches de map et reduce
Doublement des tâches lentes
Map et reduce fonctionnent simultanément
Résultats intermédiaires possibles
Addition des capacités de traitement
40. HADOOP
Fonctions exportables via stdin/out
Hive : HADOPP appliqué aux bases de données
HDFS : cluster de stockage
1 Po de données, triées en 16h15
1 To de données triées en 62 secondes
3800 machines approx.