1. CouchDB & Django
avec CouchDBkit
Benoît Chesneau
25/04/2010 - djangocong
Sunday, April 25, 2010
2. benoît chesneau
benoitc@apache.org
Artisan web
Minimal web & Opensource
Enki Multimedia
http://www.e-engura.com
Sunday, April 25, 2010
3. • Pourquoi utiliser une solution “NoSQL” ?
• CouchDB
• CouchDBKit: CouchDB & Django
Sunday, April 25, 2010
4. Pourquoi ?
• On a pas forcement besoin de “scalabilité”
• Maj des bases de données < 300 Go (2 Go)
• Souvent les requêtes sont rapides
• Tout tient sur une machine
Sunday, April 25, 2010
5. Souplesse
• Differents types de contenu
• Supprimer les “content-types”
• Faire de la dénormalisation simplement
• Gérer la migration de données/schema
facilement
Sunday, April 25, 2010
7. Ex: boutique en ligne
Données
Commande Livraison
clients
Item Item
Sunday, April 25, 2010
8. • Gérer des differents produits
• Sauver une commande avec le détail des
produits
• à un instant T (le produit est figé)
• Ne pas perdre la commande
• Ne pas perdre les infos de livraisons et
clients
Sunday, April 25, 2010
9. CouchDB
• Base de données orientées document
• REST
• Map/Reduce (M/R)
• Append-Only
• Javascript/Erlang
• Réplication
Sunday, April 25, 2010
10. Orientée Document?
• Pas de schema
• JSON
• Attachements
Sunday, April 25, 2010
12. Map/Reduce ?
• Map (M) : Collecter une liste de valeurs en
fonction d’une clé
• Retourne une liste de clés/valeurs (K/V)
• Reduce (R) : Réduire une liste de clés/
valeurs en une liste de valeurs
• Rereduce
Sunday, April 25, 2010
32. models.py
from datetime import datetime
from couchdbkit.ext.django.schema import *
class Greeting(Document):
author = StringProperty()
content = StringProperty(required=True)
date = DateTimeProperty(default=datetime.utcnow)
Sunday, April 25, 2010
33. forms.py
class GreetingForm(DocumentForm):
class Meta:
document = Greeting
Sunday, April 25, 2010
34. views.py
def home(request):
greet = None
if request.POST:
form = GreetingForm(request.POST)
if form.is_valid():
greet = form.save()
else:
form = GreetingForm()
greetings = Greeting.view("greeting/all")
return render("home.html", {
"form": form,
"greet": greet,
"greetings": greetings
}, context_instance=RequestContext(request))
Sunday, April 25, 2010
35. 0.5
• Nouveau mapper àla sqlalchemy
• Intégration de futon dans l’admin
• Gestion de design docs ameliorée
• Support Eventlet
• ...
Sunday, April 25, 2010
40. Cette création est mise à disposition selon le Contrat
Paternité 2.0 France disponible en ligne http://
creativecommons.org/licenses/by/2.0/fr/ ou par courrier
postal à Creative Commons, 171 Second Street, Suite
300, San Francisco, California 94105, USA.
Sunday, April 25, 2010