Mongo db en azure para programadores de .net
-
Upload
francesc-jaumot -
Category
Data & Analytics
-
view
70 -
download
3
Transcript of Mongo db en azure para programadores de .net
#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