40
CouchDB & Django avec CouchDBkit Benoît Chesneau 25/04/2010 - djangocong Sunday, April 25, 2010

Couchdbkit & Dango

Embed Size (px)

DESCRIPTION

presentation about the use of couchdbkit in django at @djangocong

Citation preview

Page 1: Couchdbkit & Dango

CouchDB & Django avec CouchDBkit

Benoît Chesneau25/04/2010 - djangocong

Sunday, April 25, 2010

Page 2: Couchdbkit & Dango

[email protected] webMinimal web & OpensourceEnki Multimediahttp://www.e-engura.com

benoît chesneau

Sunday, April 25, 2010

Page 3: Couchdbkit & Dango

• Pourquoi utiliser une solution “NoSQL” ?

• CouchDB

• CouchDBKit: CouchDB & Django

Sunday, April 25, 2010

Page 4: Couchdbkit & Dango

• 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

Pourquoi ?

Sunday, April 25, 2010

Page 5: Couchdbkit & Dango

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

Page 6: Couchdbkit & Dango

Garder ses données

Sunday, April 25, 2010

Page 7: Couchdbkit & Dango

CommandeDonnéesclients Livraison

Item Item

Ex: boutique en ligne

Sunday, April 25, 2010

Page 8: Couchdbkit & Dango

• 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

Page 9: Couchdbkit & Dango

• Base de données orientées document

• REST

• Map/Reduce (M/R)

• Append-Only

• Javascript/Erlang

• Réplication

CouchDB

Sunday, April 25, 2010

Page 10: Couchdbkit & Dango

Orientée Document?

• Pas de schema

• JSON

• Attachements

Sunday, April 25, 2010

Page 11: Couchdbkit & Dango

DOCUMENT JSON

{ "_id": "foo", "_rev": "1-....", "url": "http://apache.couchdb.org", "vote": 1}

Sunday, April 25, 2010

Page 12: Couchdbkit & Dango

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

Page 13: Couchdbkit & Dango

MAP.JSfunction(doc) { if (doc.url && doc.vote) emit(doc.url, doc.vote);}

{ "total_rows":3, "offset":0, "rows": [ { "id":"15c92051cc81d564db4337a05087bc8d", "key":"http://apache.couchdb.org", "value":1 }, { "id":"fa9658810d25cac893748e4ff15e7253", "key":"http://apache.couchdb.org", "value":1 }, { "id":"1fa0c68d8455196507b8b01645e65186", "key":"http://mysql.com", "value":-1 }]}Sunday, April 25, 2010

Page 14: Couchdbkit & Dango

REDUCE.JSfunction(keys, values, rereduce) { return sum(values);}

{ "rows":[ { "key": "http://mysql.com", "value": -1 }, { "key": "http://apache.couchdb.org", "value": 2 }]}

jsonresult

Sunday, April 25, 2010

Page 15: Couchdbkit & Dango

FutonSunday, April 25, 2010

Page 16: Couchdbkit & Dango

Réplicatuon

• Incrémentale

• Master-Master

• Continue ou à la demande

Sunday, April 25, 2010

Page 17: Couchdbkit & Dango

Sunday, April 25, 2010

Page 18: Couchdbkit & Dango

Sunday, April 25, 2010

Page 19: Couchdbkit & Dango

Sunday, April 25, 2010

Page 20: Couchdbkit & Dango

Sunday, April 25, 2010

Page 21: Couchdbkit & Dango

Sunday, April 25, 2010

Page 22: Couchdbkit & Dango

Sunday, April 25, 2010

Page 23: Couchdbkit & Dango

Sunday, April 25, 2010

Page 24: Couchdbkit & Dango

Sunday, April 25, 2010

Page 25: Couchdbkit & Dango

CouchDBKit

• CouchDB Python framework

• supporte CouchDB 0.10.2 & 0.11.0

• Client simple

• Schema

• Extension django

• Compatible couchapp

Sunday, April 25, 2010

Page 26: Couchdbkit & Dango

from couchdbkit import Server

s = Server("http://127.0.0.1:5984")db = s["mydb"]

doc = { "a": 1 }db.save_doc(doc)

doc["b"] = 2

db.save(doc)

doc1 = db.get(doc['_id'])

client

Sunday, April 25, 2010

Page 27: Couchdbkit & Dango

Autres fonctions

• db.views

• from couchdbkit.loaders import FileSystemDocsLoader

Sunday, April 25, 2010

Page 28: Couchdbkit & Dango

from couchdbkit.loaders import FileSystemDocsLoader

loader = FileSystemDocsLoader('/path/to/example/_design')loader.sync(db, verbose=True)

Sunday, April 25, 2010

Page 29: Couchdbkit & Dango

schemafrom couchdbkit.schema import *

class MyDoc(Document): a = IntegerProperty() contain(db, MyDoc)

doc = MyDoc()doc.a = 1doc.save()

doc.b = 2doc.save()

doc1 = MyDoc.get(doc._id)

Sunday, April 25, 2010

Page 30: Couchdbkit & Dango

Extension Django

• from couchdbkt.ext.django import *

• Django helper

• manage.py syncdb

• DocumentForm

Sunday, April 25, 2010

Page 31: Couchdbkit & Dango

settings.py...

COUCHDB_DATABASES = ( ('djangoapp.greeting', 'http://127.0.0.1:5984/greeting'), ) ... INSTALLED_APPS = ( .... 'couchdbkit.ext.django', 'djangoapp.greeting', .... )

Sunday, April 25, 2010

Page 32: Couchdbkit & Dango

models.py

from datetime import datetimefrom couchdbkit.ext.django.schema import * class Greeting(Document): author = StringProperty() content = StringProperty(required=True) date = DateTimeProperty(default=datetime.utcnow)

Sunday, April 25, 2010

Page 33: Couchdbkit & Dango

forms.py

class GreetingForm(DocumentForm): class Meta: document = Greeting

Sunday, April 25, 2010

Page 34: Couchdbkit & Dango

views.pydef 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

Page 35: Couchdbkit & Dango

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

Page 36: Couchdbkit & Dango

Sunday, April 25, 2010

Page 37: Couchdbkit & Dango

Liens

• http://apache.couchdb.org

• http://couchdbkit.org

Sunday, April 25, 2010

Page 38: Couchdbkit & Dango

Questions

Sunday, April 25, 2010

Page 39: Couchdbkit & Dango

@benoitc

Sunday, April 25, 2010

Page 40: Couchdbkit & Dango

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