Couchdbkit & Dango
-
Upload
benoit-chesneau -
Category
Technology
-
view
2.645 -
download
0
description
Transcript of Couchdbkit & Dango
![Page 1: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/1.jpg)
CouchDB & Django avec CouchDBkit
Benoît Chesneau25/04/2010 - djangocong
Sunday, April 25, 2010
![Page 2: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/2.jpg)
[email protected] webMinimal web & OpensourceEnki Multimediahttp://www.e-engura.com
benoît chesneau
Sunday, April 25, 2010
![Page 3: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/3.jpg)
• Pourquoi utiliser une solution “NoSQL” ?
• CouchDB
• CouchDBKit: CouchDB & Django
Sunday, April 25, 2010
![Page 4: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/4.jpg)
• 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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/6.jpg)
Garder ses données
Sunday, April 25, 2010
![Page 7: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/7.jpg)
CommandeDonnéesclients Livraison
Item Item
Ex: boutique en ligne
Sunday, April 25, 2010
![Page 8: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/8.jpg)
• 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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/9.jpg)
• 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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/10.jpg)
Orientée Document?
• Pas de schema
• JSON
• Attachements
Sunday, April 25, 2010
![Page 11: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/11.jpg)
DOCUMENT JSON
{ "_id": "foo", "_rev": "1-....", "url": "http://apache.couchdb.org", "vote": 1}
Sunday, April 25, 2010
![Page 12: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/12.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/15.jpg)
FutonSunday, April 25, 2010
![Page 16: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/16.jpg)
Réplicatuon
• Incrémentale
• Master-Master
• Continue ou à la demande
Sunday, April 25, 2010
![Page 17: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/17.jpg)
Sunday, April 25, 2010
![Page 18: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/18.jpg)
Sunday, April 25, 2010
![Page 19: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/19.jpg)
Sunday, April 25, 2010
![Page 20: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/20.jpg)
Sunday, April 25, 2010
![Page 21: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/21.jpg)
Sunday, April 25, 2010
![Page 22: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/22.jpg)
Sunday, April 25, 2010
![Page 23: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/23.jpg)
Sunday, April 25, 2010
![Page 24: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/24.jpg)
Sunday, April 25, 2010
![Page 25: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/26.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/27.jpg)
Autres fonctions
• db.views
• from couchdbkit.loaders import FileSystemDocsLoader
Sunday, April 25, 2010
![Page 28: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/28.jpg)
from couchdbkit.loaders import FileSystemDocsLoader
loader = FileSystemDocsLoader('/path/to/example/_design')loader.sync(db, verbose=True)
Sunday, April 25, 2010
![Page 29: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/30.jpg)
Extension Django
• from couchdbkt.ext.django import *
• Django helper
• manage.py syncdb
• DocumentForm
Sunday, April 25, 2010
![Page 31: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/31.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/33.jpg)
forms.py
class GreetingForm(DocumentForm): class Meta: document = Greeting
Sunday, April 25, 2010
![Page 34: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/34.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/35.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/36.jpg)
Sunday, April 25, 2010
![Page 37: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/37.jpg)
Liens
• http://apache.couchdb.org
• http://couchdbkit.org
Sunday, April 25, 2010
![Page 38: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/38.jpg)
Questions
Sunday, April 25, 2010
![Page 39: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/39.jpg)
@benoitc
Sunday, April 25, 2010
![Page 40: Couchdbkit & Dango](https://reader033.fdocuments.us/reader033/viewer/2022052905/558600ccd8b42a58068b509d/html5/thumbnails/40.jpg)
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