• Like

2014 it - app dev series - 03 - interagire con il database

  • 422 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
422
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
12
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Not really fire and forget. This return arrow is to confirm that the network successfully transferred the packet(s) of data.This confirms that the TCP ACK response was received.
  • Presenter should mention:Default is w:1w:majority is what most people should use for durability. Majority is a special token here signifying more than half of the nodes in the set have acknowledged the write.

Transcript

  • 1. Serie Sviluppo di un’Applicazione Back to Basics Interagire con il Database Senior Solutions Architect, MongoDB Inc. Massimo Brignoli #MongoDBBasicsIT
  • 2. Agenda • Riassunto della lezione precedente • Gli Operatori di Query di MongoDB – Restituire documenti - cursori – Proiezioni • Gli Operatori di Update di MongoDB – Pacchetti Fissi – Report PreAggregati • Write Concern – Compromesso tra Durabilità e Velocità
  • 3. Q & A • Virtual Genius Bar – Usate la chat per fare domande – Il team italiano vi risponderà – Usatelo durante la sessione!
  • 4. Riassunto dell’Ultima Lezione
  • 5. Abbia visto l‟architettura applicativa – JSON / RESTful – Basata su Python Schema design – Modellato • Articoli • Commenti • Interazioni Schema e Architectura Client-side JSON (eg AngularJS) (BSON)Pymongo driver Python web app HTTP(S) REST
  • 6. Modellazione degli Articoli • Post degli articoli • Ottenere la lista degli articoli • Ritornare un cursore • Ottenere un articolo individuale { '_id' : ObjectId(...), 'text': 'Article content…', 'date' : ISODate(...), 'title' : ‟Intro to MongoDB', 'author' : 'Dan Roberts', 'tags' : [ 'mongodb', 'database', 'nosql‟ ] } Collection degli articoli METODI def get_article(article_id) def get_articles(): def create_article():
  • 7. Modellazione dei Commenti • Memorizzare i commenti • Ottenere velocemente i commenti più recenti • Aggiungere nuovi commenti a un documento • „Bucketing‟ { „_id‟ : ObjectId(..), „article_id‟ : ObjectId(..), „page‟ : 1, „count‟ : 42 „comments‟ : [ { „text‟ : „A great article, helped me understand schema design‟, „date‟ : ISODate(..), „author‟ : „johnsmith‟ }, … } Collection dei commentiMETODI def add_comment(article_id): def get_comments(article_id):
  • 8. Modellazione delle Interazioni • Usato per reportistica sugli articoli • Creazione di report “pre-aggregati” { „_id‟ : ObjectId(..), „article_id‟ : ObjectId(..), „section‟ : „schema‟, „date‟ : ISODate(..), „daily‟: { „views‟ : 45, „comments‟ : 150 } „hours‟ : { 0 : { „views‟ : 10 }, 1 : { „views‟ : 2 }, … 23 : { „views‟ : 14, „comments‟ : 10 } } } Collection interazioni METPDI def add_interaction(article_id, type):
  • 9. Eseguire le Query
  • 10. $gt, $gte, $in, $lt, $lte, $ne, $nin Usati per cercare nei documenti – Array inclusi Gli Operatori delle Query db.articles.find( { 'title' : ‟Intro to MongoDB‟ } ) db.articles.find( { ‟date' : { „$lt‟ : {ISODate("2014-02-19T00:00:00.000Z") }} ) db.articles.find( { „tags‟ : { „$in‟ : [„nosql‟, „database‟] } } );
  • 11. La Find restituisce un cursore – Usato per iterate il set dei risultati – Il cursore ha molti metodi Cursori >var cursor = db.articles.find( { ‟author' : ‟Dan Roberts‟ } ) >cursor.hasNext() true >cursor.next() { '_id' : ObjectId(...), 'text': 'Article content…‟, 'date' : ISODate(...), 'title' : ‟Intro to MongoDB‟, 'author' : 'Dan Roberts‟, 'tags' : [ 'mongodb', 'database‟,'nosql’ ] }
  • 12. Restituiscono solamente gli attributi necessari – La sintassi per selezionare gli attributi usa i booleani 0 e 1 – Aumenta l‟efficienza Proiezioni >var cursor = db.articles.find( { ‟author' : ‟Dan Roberts‟ } , {‘_id’:0, ‘title’:1}) >cursor.hasNext() true >cursor.next() { "title" : "Intro to MongoDB" }
  • 13. Update dei dati
  • 14. $each, $slice, $sort, $inc, $push $rename,$setOnInsert, $set, $unset,$max, $min $addToSet,$pop,$pullAll,$pull,$pushAll,$push Operatori di Update >db.articles.update( { '_id' : ObjectId(...)}, { '$push' : {'comments' : „Great article!‟} } ) { 'text': 'Article content…‟ 'date' : ISODate(...), 'title' : ‟Intro to MongoDB‟, 'author' : 'Dan Roberts‟, 'tags' : ['mongodb', 'database‟,'nosql’ ], ’comments' : [‘Great article!’ ] }
  • 15. Aggiungere un elementoad un array di lunghezza fissa con… $push, $each, $slice Operatori di Update >db.articles.update( { '_id' : ObjectId(...)}, { '$push' : {'comments' : { '$each' : [„Excellent‟], '$slice' : -3}}, }) { 'text': 'Article content…‟ 'date' : ISODate(...), 'title' : ‟Intro to MongoDB‟, 'author' : 'Dan Roberts‟, 'tags' : ['mongodb', 'database‟,'nosql’ ], ’comments' : [‘Great article!’, ‘More please’, ‘Excellent’ ] }
  • 16. Operatori di Update - Bucketing • Scriviamo 10 commenti in un singolo documento (bucket) • Crea automaticamente un nuovo documento • Use{upsert: true} not insert.>db.comments.update( {„c‟: {„$lt‟:10}}, { „$inc‟ : {c:1}, '$push' : { 'comments' : „Excellent‟ } }, {upsert : true} ) { „_id‟ : ObjectId( … ) „c‟ : 3, ’comments' : [‘Great article!’, ‘More please’, ‘Excellent’ ] }
  • 17. Analitica– Report Pre-Aggregati • Usato per fare statistiche sugli articoli • Crea report pre- aggregati { „_id‟ : ObjectId(..), „article_id‟ : ObjectId(..), „section‟ : „schema‟, „date‟ : ISODate(..), „daily‟: { „views‟ : 45, „comments‟ : 150 } „hours‟ : { 0 : { „views‟ : 10 }, 1 : { „views‟ : 2 }, … 23 : { „views‟ : 14, „comments‟ : 10 } } } Collections Interazioni METODO def add_interaction(article_id, type):
  • 18. Incrementare i Contatori • Usate $inc per incrementare contatorimultipli • Singola operazioneAtomica • Incrementai contatori giornalieri e orari >db.interactions.update( {„article_id‟ : ObjectId(..)}, { „$inc‟ : { „daily.views‟:1, „daily.comments‟:1 „hours.8.views‟:1 „hours.8.comments‟:1 } ) { „_id‟ : ObjectId(..), „article_id‟ : ObjectId(..), „section‟ : „schema‟, „date‟ : ISODate(..), „daily‟: { „views‟ : 45, „comments‟ : 150 } „hours‟ : { 0 : { „views‟ : 10 }, 1 : { „views‟ : 2 }, … 23 : { „views‟ : 14, „comments‟ : 10 } } }
  • 19. Incrementare i Contatori • Incrementate nuovi contatori >db.interactions.update( {„article_id‟ : ObjectId(..)}, { „$inc‟ : { „daily.views‟:1, „daily.comments‟:1, „hours.8.views‟:1, „hours.8.comments‟:1, ‘referrers.bing’ : 1 } ) { „_id‟ : ObjectId(..), „article_id‟ : ObjectId(..), „section‟ : „schema‟, „date‟ : ISODate(..), „daily‟: { „views‟ : 45, „comments‟ : 150 } „hours‟ : { ….. } „referrers‟ : { „google‟ : 27 } }
  • 20. Incrementare i Contatori • Incrementate nuovi contatori >db.interactions.update( {„article_id‟ : ObjectId(..)}, { „$inc‟ : { „daily.views‟:1, „daily.comments‟:1, „hours.8.views‟:1, „hours.8.comments‟:1, ‘referrers.bing’ : 1 } ) { „_id‟ : ObjectId(..), „article_id‟ : ObjectId(..), „section‟ : „schema‟, „date‟ : ISODate(..), „daily‟: { „views‟ : 45, „comments‟ : 150 } „hours‟ : { ….. } „referrers‟ : { „google‟ : 27, ‘bing’ : 1 } }
  • 21. Durabilità
  • 22. Durabilità • Con MongoDB potete scegliere • In memoria • Su disco • Su multipli server • Write Concern • Ritorna dopo il successo di un‟operazione di scrittura • Il driver chiama getLastError • Compromesso • Latenza della risposta
  • 23. Unacknowledged
  • 24. MongoDB Acknowledged
  • 25. Wait for Journal Sync
  • 26. Replica Set • Replica Set – due o più copie • E‟ uno shard “Self-healing” • Indirizza diverse esigenze: - High Availability - Disaster Recovery - Manutenzione
  • 27. Wait for Replication
  • 28. Riassunto
  • 29. Riassumendo • Interagendo con il database – Query e proiezioni – Insert e Upsert – Operatori – Bucketing – Report PreAggregated
  • 30. Prossima Sessione: 29 Aprile. – Indicizzazione • Strategie di indicizzazione • Search testuale • Ricerche geografiche – Esempi di Codice