Mongo db en azure para programadores de .net

35
#dotNETSpain2015 Francesc Jaumot MongoDB en Azure para programadores de .NET Y A X B

Transcript of Mongo db en azure para programadores de .net

Page 1: Mongo db en azure para programadores de .net

#dotNETSpain2015

Francesc Jaumot

MongoDB en Azure para programadores de .NET Y

AX B

Page 2: Mongo db en azure para programadores de .net

#dotNETSpain2015

Page 3: Mongo db en azure para programadores de .net

#dotNETSpain2015

Page 4: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

¿Qué es MongoDb?Data Models: Relational to DocumentTransformar nuestro esquemaMongoDB en Windows AzureMongoDB desde .NET (C#)

Agenda

Page 5: Mongo db en azure para programadores de .net

#dotNETSpain2015

¿Qué es MongoDB?

Page 6: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

NoSQLNace en 2009 para cubrir las recientes necesidades en cuanto a rendimiento, escalabilidad y velocidad.Orientado a documentos.Soporte de índices.Ausencia de transacciones.Protocolo binario.Replicación Master/Slave.GridFS.Escrito en C++.

¿Qué es MongoDB?

Page 7: Mongo db en azure para programadores de .net

#dotNETSpain2015

Data Models: Relational to Document

Page 8: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

DatabaseContenedor físico para las colecciones. Cada base de datos puede contener colecciones.

CollectionsEquivale a una tabla de cualquier sistema RDBMS. Exista una colección dentro de una sola base de datos.

DocumentUn registro de una colección y la unidad básica de datos en format BSON. Todos tienen un _id generado automáticamnte.

FieldPareja de name-value. Un document puede contener cero o más campos. Los campos son análogos a las columnas de las tablas de los sitemas RDBMS.

Data Models: Conceptos

Page 9: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Relational

Data Models: Relation to Document MongoDB

Document

{“_id”: 52f602d787945c344bb4bda5,“name”: “Francesc”,“surname”: “Jaumot”,“city”: “Lleida”,“location”: [41.618471, 0.625764],“cars”: [ {“model”: “Mazda”, “year”: 2014, “value”: 32000}, {“model”: “Citröen C4”, “year”: 2014, “value”: 29000} ]}

CustomerId Name Surname City

1 Francesc Jaumot Lleida

2Jordi Rius

Mollerussa

3Yolanda

Manzanares AlmenarCarId

Model Year ValueCustomerId

1 Mazda CX5 2014 32.000$ 1

2 Mazda 5 2010 25.000$ 23 Citröen C4 2008 29.000$ 14 Seat Ibiza 2015 19.000$ NULL

Page 10: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Es una representación binaria de los documentos JSON.

Ligero, manejable y eficiente.

Data Models: BSON (Binary-JSON)

Page 11: Mongo db en azure para programadores de .net

#dotNETSpain2015

Transformar nuestro esquema

Page 12: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

StringInteger (32 bits, 64 bits)DoubleBooleanDateTimestampNullArray

Tipos de datos

ObjectObject idBinary DataRegular ExpressionJavaScriptSymbolMin keyMax key

Page 13: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Embeber{_id: 52f602d787945c344bb4bda5,name: ‘Francesc’,surname: ‘Jaumot’,city: ‘Lleida’,location: [41.618471, 0.625764],cars: [ {model: ‘Mazda’, year: ‘2014’, value: 32000}, {model: ‘Citröen C4’, year: ‘2014’, value: 29000} ]}

Patrones de modelado

Referenciar{ _id: 52f602d787945c344bb4bda5, name: ‘Francesc’, surname: ‘Jaumot’, city: ‘Lleida’, location: [41.618471, 0.625764] cars: [asf70yd787945c702ps45qwe]}

{ _id: asf70yd787945c702ps45qwe, model: ‘Mazda’, year: ‘2014’, value: 32000}

Page 14: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’, city: ‘Lleida’}

Document = { passport: ‘A1234567W’, driver: ‘B25172348’, dni: ‘12345678W’}

Relaciones 1 a 1

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’, city: ‘Lleida’ documents: { passport: ‘A1234567W’, driver: ‘B25172348’, dni: ‘12345678W’ }}

Page 15: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’}

Address1 = { city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº 10’}

Address2 = { city: ‘Almenar’, country: ‘Spain’, description: ‘C/Pradets 2A’}

Relaciones 1 a *

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’, address: { city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº 10’ },{ city: ‘Almenar’, country: ‘Spain’, description: ‘C/Pradets 2A’ }}

Page 16: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’}

Address1 = { _id: 1, city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº 10’}

Address2 = { _id: 2, city: ‘Almenar’, country: ‘Spain’, description: ‘C/Pradets 2A’}

Relaciones 1 a *Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’, address: [1,2]}

Address1 = { _id: 1, city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº10’, customer_id: 1}

Page 17: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’}

Address1 = { _id: 1, city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº 10’}

Address2 = { _id: 2, city: ‘Almenar’, country: ‘Spain’, description: ‘C/Pradets 2A’}

Relaciones * a *Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’, address: [1,2]}

Address1 = { _id: 1, city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº10’, customer_id: [1]}

Page 18: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Customer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’}

Address1 = { _id: 1, city: ‘Lleida’, country: ‘Spain’, description: ‘C/Pixel nº 10’}

Address2 = { _id: 2, city: ‘Almenar’, country: ‘Spain’, description: ‘C/Pradets 2A’}

Relaciones * a * con camposCustomer = { _id: 1, name: ‘Francesc’, surname: ‘Jaumot’, address: [{ address_id: 1, primary: true },{ address_id: 2, primary: false }]}

Page 19: Mongo db en azure para programadores de .net

#dotNETSpain2015

DEMOCreando nuestra db

Page 20: Mongo db en azure para programadores de .net

#dotNETSpain2015

MongoDB en Windows Azure

Page 21: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Alta escalabilidadReplicación de los datosEscalabilidad según la demandaEscalabilidad de nuestra DBIntegración con Azure DiagnosticsPersistencia de datos en BLOB’s

¿Por qué Windows Azure?

Page 22: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Virtual Machine (VM)Mayor configuración de los servicios completos de MongoDB; servidor, replicas, gestión completa del storage,backup…

MongoDb Replica SetUn cluster totalmente gestionado, escalable, monitorizado y fácil de desplegar.

¿Opciones?

Page 23: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

Deployment

Page 24: Mongo db en azure para programadores de .net

#dotNETSpain2015

DEMOCluster de MongoDb en Azure

Page 25: Mongo db en azure para programadores de .net

#dotNETSpain2015

MongoDB desde .NET (C#)

Page 26: Mongo db en azure para programadores de .net

Using Statments

using MongoDB.Bson;using MongoDB.Driver;using MongoDb.Driver.Linq;

Page 27: Mongo db en azure para programadores de .net

Server Object

var connectionString = “mongodb://localhost”var client = new MongoClient(connectionString);var server = client.GetServer();var database = server.GetDatabase(“dotnet”);

Page 28: Mongo db en azure para programadores de .net

#dotNETSpain2015#dotNETSpain2015

BsonDocument object modelPodemos trabajar con esta clase cuándo nuestro modelo de datos sea libre o sea complicado de definir nuestras clases de dominio.

Clases de dominioPodemos trabajar con nuestras clases de dominio.Estas no pueden tener argumentos en el constructor y debemos definir los campos públicos que queremos guarder en nuestra base de datos.Lo serializaremos con XmlSerializer.

¿Cómo trabajar con las colecciones?

Page 29: Mongo db en azure para programadores de .net

Definir la entidad y guardar

public class Customer{

public ObjectId Id { get; set; } public string Name { get; set; } public string Surname { get; set; } public int Phone { get; set; } public string City { get; set; }}

var collection = database.GetCollection<Customer>(“Customers”);

Page 30: Mongo db en azure para programadores de .net

Crear un documento

var entity = new Customer { Name = “Francisco”, Surname = “Cano”, Phone = 699956120, City = “Madrid”}collection.Insert(entity);var id = entity.Id;

Page 31: Mongo db en azure para programadores de .net

Recuperar y modificar un documentovar query = Query<Customer>.EQ(s => s.Id, id);var entity = collection.FindOne(query);entity.Name = “Jonh”;collection.Save(entity);

var query = Query<Customer>.EQ(s => s.Id, id);var update = Update<Customer>.Set(p => p.Name, “Ursula”);Collection.Update(query,update);

Page 32: Mongo db en azure para programadores de .net

Eliminar el documento

var query = Query<Customer>.EQ(s => s.Id, id);Collection.Remove(query);

Page 33: Mongo db en azure para programadores de .net

MongoDB tiene LINQ

var collection = database.GetCollection<Customer>(“Customers”);

var query = from tbl in collection.AsQueryable<Customer>() where tbl.Name == “Ursula” select tbl;

var query = collection.AsQueryable<Customer>() .Where(e => e.Name == “Ursula”);

Page 34: Mongo db en azure para programadores de .net

Q&A

Page 35: Mongo db en azure para programadores de .net

#dotNETSpain2015

Francesc JaumotCTO @ Clibb

¡¡¡Si te ha gustado no olvides rellenar la encuesta!!!Thanks

Y

AX B