martes, 30 de enero de 2018

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:

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio