mongo db en azure para programadores de .net

Post on 26-Jul-2015

70 Views

Category:

Data & Analytics

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

#dotNETSpain2015

Francesc Jaumot

MongoDB en Azure para programadores de .NET Y

AX B

#dotNETSpain2015

#dotNETSpain2015

#dotNETSpain2015#dotNETSpain2015

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

Agenda

#dotNETSpain2015

¿Qué es MongoDB?

#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?

#dotNETSpain2015

Data Models: Relational to Document

#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

#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

#dotNETSpain2015#dotNETSpain2015

Es una representación binaria de los documentos JSON.

Ligero, manejable y eficiente.

Data Models: BSON (Binary-JSON)

#dotNETSpain2015

Transformar nuestro esquema

#dotNETSpain2015#dotNETSpain2015

StringInteger (32 bits, 64 bits)DoubleBooleanDateTimestampNullArray

Tipos de datos

ObjectObject idBinary DataRegular ExpressionJavaScriptSymbolMin keyMax key

#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}

#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’ }}

#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’ }}

#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}

#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]}

#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 }]}

#dotNETSpain2015

DEMOCreando nuestra db

#dotNETSpain2015

MongoDB en Windows Azure

#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?

#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?

#dotNETSpain2015#dotNETSpain2015

Deployment

#dotNETSpain2015

DEMOCluster de MongoDb en Azure

#dotNETSpain2015

MongoDB desde .NET (C#)

Using Statments

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

Server Object

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

#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?

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”);

Crear un documento

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

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);

Eliminar el documento

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

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”);

Q&A

#dotNETSpain2015

Francesc JaumotCTO @ Clibb

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

Y

AX B

top related