Serie Sviluppo di un’Applicazione
Back to Basics
Interagire con il Database
Senior Solutions Architect, MongoDB Inc.
Massi...
Agenda
• Riassunto della lezione precedente
• Gli Operatori di Query di MongoDB
– Restituire documenti - cursori
– Proiezi...
Q & A
• Virtual Genius Bar
– Usate la chat per fare
domande
– Il team italiano vi
risponderà
– Usatelo durante la
sessione!
Riassunto dell’Ultima Lezione
Abbia visto l‟architettura applicativa
– JSON / RESTful
– Basata su Python
Schema design
– Modellato
• Articoli
• Commenti...
Modellazione degli Articoli
• Post degli articoli
• Ottenere la lista degli
articoli
• Ritornare un cursore
• Ottenere un ...
Modellazione dei Commenti
• Memorizzare i commenti
• Ottenere velocemente i
commenti più recenti
• Aggiungere nuovi
commen...
Modellazione delle Interazioni
• Usato per reportistica
sugli articoli
• Creazione di report
“pre-aggregati”
{
„_id‟ : Obj...
Eseguire le Query
$gt, $gte, $in, $lt, $lte, $ne, $nin
Usati per cercare nei documenti
– Array inclusi
Gli Operatori delle Query
db.articles...
La Find restituisce un cursore
– Usato per iterate il set dei risultati
– Il cursore ha molti metodi
Cursori
>var cursor =...
Restituiscono solamente gli attributi necessari
– La sintassi per selezionare gli attributi usa i booleani 0 e 1
– Aumenta...
Update dei dati
$each, $slice, $sort, $inc, $push
$rename,$setOnInsert, $set, $unset,$max, $min
$addToSet,$pop,$pullAll,$pull,$pushAll,$pu...
Aggiungere un elementoad un array di lunghezza fissa con…
$push, $each, $slice
Operatori di Update
>db.articles.update(
{ ...
Operatori di Update - Bucketing
• Scriviamo 10 commenti in un singolo documento (bucket)
• Crea automaticamente un nuovo d...
Analitica– Report Pre-Aggregati
• Usato per fare
statistiche sugli
articoli
• Crea report pre-
aggregati
{
„_id‟ : ObjectI...
Incrementare i Contatori
• Usate $inc per incrementare contatorimultipli
• Singola operazioneAtomica
• Incrementai contato...
Incrementare i Contatori
• Incrementate nuovi contatori
>db.interactions.update(
{„article_id‟ : ObjectId(..)},
{
„$inc‟ :...
Incrementare i Contatori
• Incrementate nuovi contatori
>db.interactions.update(
{„article_id‟ : ObjectId(..)},
{
„$inc‟ :...
Durabilità
Durabilità
• Con MongoDB potete scegliere
• In memoria
• Su disco
• Su multipli server
• Write Concern
• Ritorna dopo il s...
Unacknowledged
MongoDB Acknowledged
Wait for Journal Sync
Replica Set
• Replica Set – due o più copie
• E‟ uno shard “Self-healing”
• Indirizza diverse esigenze:
- High Availabilit...
Wait for Replication
Riassunto
Riassumendo
• Interagendo con il database
– Query e proiezioni
– Insert e Upsert
– Operatori
– Bucketing
– Report PreAggre...
Prossima Sessione: 29 Aprile.
– Indicizzazione
• Strategie di indicizzazione
• Search testuale
• Ricerche geografiche
– Es...
2014   it - app dev series - 03 - interagire con il database
Upcoming SlideShare
Loading in …5
×

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

723 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
723
On SlideShare
0
From Embeds
0
Number of Embeds
275
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

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.
  • 2014 it - app dev series - 03 - interagire con il database

    1. 1. Serie Sviluppo di un’Applicazione Back to Basics Interagire con il Database Senior Solutions Architect, MongoDB Inc. Massimo Brignoli #MongoDBBasicsIT
    2. 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. 3. Q & A • Virtual Genius Bar – Usate la chat per fare domande – Il team italiano vi risponderà – Usatelo durante la sessione!
    4. 4. Riassunto dell’Ultima Lezione
    5. 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. 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. 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. 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. 9. Eseguire le Query
    10. 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. 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. 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. 13. Update dei dati
    14. 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. 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. 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. 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. 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. 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. 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. 21. Durabilità
    22. 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. 23. Unacknowledged
    24. 24. MongoDB Acknowledged
    25. 25. Wait for Journal Sync
    26. 26. Replica Set • Replica Set – due o più copie • E‟ uno shard “Self-healing” • Indirizza diverse esigenze: - High Availability - Disaster Recovery - Manutenzione
    27. 27. Wait for Replication
    28. 28. Riassunto
    29. 29. Riassumendo • Interagendo con il database – Query e proiezioni – Insert e Upsert – Operatori – Bucketing – Report PreAggregated
    30. 30. Prossima Sessione: 29 Aprile. – Indicizzazione • Strategie di indicizzazione • Search testuale • Ricerche geografiche – Esempi di Codice

    ×