Crear nuestro propio sistema de migración de datos para CosmosDB
Para
desarrollar nuestro sistema que nos permite pasar los datos a comosdb, ocupamos
crear primero un proyecto en c# con ayuda del Visual Studio. Después de crear
el proyecto de tipo console app en el visual studio debemos buscar en Nuget.
- Microsoft.Azure.DocumentDB
- Microsoft.Azure.Graphs
Vamos a
buscar en Nuget la librería de DocumentDB para guardar los documentos ahora si
queremos guardarlos como un Graph podemos usar la librería Microsoft.Azure.Graphs.
Después de instalar
la que necesitamos podemos iniciar a trabajar en la aplicación en c#.
Vamos a
usar una pequeña tabla con datos de personas. Esta es la tabla que vamos a
migrar a cosmosDB.
Ahora vamos
a crear un pequeño archivo de EnityFramework para leer los datos de SQL Server
Aquí vamos
a enlistar las referencias que vamos a ocupar para poder crear nuestra aplicación.
Vamos a
analizar el código que estamos desarrollando
public class Program
{
public static void Main(string[] args)
{
const string EndpointUrl = "https://ddfaa853-0ee0-4-231-b9ee.documents.azure.com:443/";
const string PrimaryKey = "5yc3kFkmLqpVfTG2tr98Doe6zoivswJ4QZBoDS9DfUyUMmm0p2kiMI26X" +
"XOBnakslOtIqfBpXgUChfqlooQXHQ==";
var policy = new ConnectionPolicy()
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp,
MaxConnectionLimit = 1000
};
using (DocumentClient client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey, policy))
{
DocumentCollection graph = client.CreateDocumentCollectionIfNotExistsAsync(
UriFactory.CreateDatabaseUri("CosmosDBResult"), new DocumentCollection { Id = "person" }, new RequestOptions { OfferThroughput = 1000 }).Result;
using (var db = new cosmosdbEntities())
{
var dataToImport = (from p in db.people
select p).ToList();
foreach (var currentData in dataToImport)
{
var documentToSave = "g.addV('person').property('name', '" + currentData.name + "').property('id', '" + currentData.id + "')" +
".property('lastName', '" + currentData.lastName + "').property('email', '" + currentData.email + "').property('phone', '" + currentData.phone + "')";
IDocumentQuery<dynamic> query = client.CreateGremlinQuery<dynamic>(graph, documentToSave);
dynamic result = query.ExecuteNextAsync().Result;
Console.WriteLine(result);
}
}
}
}
}
Con la variable EndPoint definimos el url para acensar
a nuestra base de datos y con la variable PrimaryKey se almacena la clave
primaria de nuestra base de datos de cosmosdb (la cual la puede encontrar en
los Keys en Azure)
En el bloque de ConnectionPolicy vamos a
definir que la manera de conectar a cosmos para guardar los datos es por medio
de TCP y no usando HTTP. En los proyectos que he trabajado con cosmos nos ha
funcionado mejor.
Con el
objeto de tipo DocumentClient podemos conéctanos a la base de datos usando los
paramatros antes definidos como el URL de la base de datos, la clave y la política.
Ahora el ultimo objeto no es necesario definirlo ni pasarlo (Policy).
Ahora vamos
a crear un objeto DocumentCollection para apuntar a la colección donde queremos
guardar los datos. En nuestro caso usamos “CosmosDBResult” como el nombre de
nuestra base de datos y person como la colección donde vamos a guardar todos
los documentos.
Db es el
objeto que nos permite extraer los datos de SQL usando EF. Hacemos un query y
leemos todos los datos.
Con el foreach
vamos a crear todos los documentos que ocupamos guardar. Creando un string que
representa cada uno de los vértices que vamos a crear. La etiqueta de cada vértice
es “person” y cada valor lo agregamos como una propiedad. El id es el que va a
identificar el documento como único.
Después query
es el que nos permite crear un Gremli query para poder guardar nuestro
documento. Pasándole el documento y la colección que queremos usar.
Finalmente,
client.CreateGremlinQuery nos permite ejecutar el query y guardar los
documentos en cosmos. Los resultados los podemos ver en el console de Windows.
Ahora
solo nos queda ver los documentos en cosmosdb.
Si nos vamos
a Azure y luego a nuestra base de datos de cosmosdb. Podemos ver un menú como
el de la fotografía. Tenemos que dar clic en “Data Explorer” para poder ver
nuestra base de datos y poder ver los datos.
Podemos usar
SQL o Gremlin para poder visualizar los datos.
Por ejemplo,
SQL:
Etiquetas: CosmosDB