RavenDB: NoSQL Database for .NET

12 dez

Fala Galera,

Hoje venho falar sobre um banco de dados noSQL, feito nativamente em .NET e ainda por cima open-source, o nome dele é o RavenDB.

O RavenDB é um banco 100% nativo .NET, Open Source, extremamente rápido e facilmente escalável permitindo que a sua aplicação .NET faça leituras e escritas de maneira rápida e com uma performance muito boa.

O RavenDB é um banco NoSQL do tipo “Document Database”, o que significa que ele armazena e recupera documentos, que podem estar em formato XML, JSON, entre outros.

Um banco do tipo “Document” é orientado a agregações que vem do Domain-Driven Design “Aggregates” que significa que cada documento é uma coleção de objetos relacionados que age sobre um contexto.

Exemplo de utilização do RavenDB

Para esse exemplo precisamos instalar o RavenDB, para isso devemos ir em https://ravendb.net/downloads e pegar o zip ou o seu executavél.

Dentro do zip deverá ter um command chamado start.cmd, selecione este arquivo e execute-o. Isso irá startar o servidor do RavenDB (Raven.Server.exe) e ainda abrirá no browser o Management Studio, ferramenta de administração do RavenDB.

Nosso foco será o Client .NET que podemos adicionar via NuGet no nosso projeto, ao adicionar o Client .NET do RavenDB estaremos fazendo referência a dois pacotes chamado Raven.Abstractions e Raven.Client.Lightweight

Para o nosso exemplo vamos criar um Console Application e adicionar os pacotes do RavenDB. Neste exemplo vamos usar um exemplo de Autor, Post e Comentários. Abaixo temos nosso modelo de classe que fará representação do domínio citado acima.

 public class Author
 {
        public Guid Id { get; set; }

        public String Name { get; set; }

        public String Email { get; set; }

        public List<Post> Post { get; set; }
 }

 public class Post
 {
        public Guid Id { get; set; }

        public String Title { get; set; }

        public String Article { get; set; }

        public DateTime DtPost { get; set; }

        public List<Comment> Comments { get; set; }

 }

 public class Comment
 {
        public Guid Id { get; set; }

        public String Title { get; set; }

        public String Text { get; set; }

        public String CommentUser { get; set; }

        public DateTime DtComment { get; set; }

 }

Acima está a implementação do nosso modelo, agora vamos fazer um test-drive do RavenDB, para isso no Main do nosso Console Application, vamos gravar um documento, alterar e consultar, com isso vamos poder ver como funciona o RavenDB

Vamos adicionar o Client do RavenDB, como foi mencionado acima, ele está disponível no NuGet. No Package Manager Console execute o comando abaixo:

  • Install-Package RavenDB.Client

Com o pacote instalado, vamos fazer nosso test-drive do RavenDB, no método Main adicione o código abaixo:

static void Main(string[] args)
      {
          var documentStore = new DocumentStore();
          documentStore.Url = "http://localhost:8080";
          documentStore.Initialize();

          //Cria a base de dados caso necessario
          documentStore.DatabaseCommands.GlobalAdmin.EnsureDatabaseExists("Post");

          //Armazena o Id para posteriormente seguir o exemplo de alteração e delete
          var idAuthor = Guid.NewGuid();

          //Cria um novo documento
          using (var session = documentStore.OpenSession("Post"))
          {

              var author = new Author()
              {
                  Id = idAuthor,
                  Email = "xpto@teste.com.br",
                  Name = "Rafael Cruz",
                  Post = new List<Post>() {
                      new Post()
                      {
                          Id = Guid.NewGuid(),
                          Article = "Lorem ipsum",
                          DtPost = DateTime.Now,
                          Title = "Novo Artigo de Teste",
                          Comments = new List<Comment>()
                          {
                              new Comment()
                              {
                                  Title = "Novo Comentário",
                                  Text = "Lorem Ipsum",
                                  CommentUser = "User Comment",
                                  DtComment = DateTime.Now,
                                  Id = Guid.NewGuid(),
                              }

                          }

                      }
                  }
              };

              session.Store(author);
              session.SaveChanges();
          }

          //Alterando uma ou mais propriedades
          using (var session = documentStore.OpenSession("Post"))
          {
              // usamos o método Load para recuperar um documento pelo Id
              var author = session.Load<Author>($"authors/{idAuthor}");

              author.Name = "Rafael Cruz Alterado";
              session.SaveChanges();
          }

          //Deletando um documento
          using (var session = documentStore.OpenSession("Post"))
          {
              // usamos o método Load para recuperar um documento pelo Id
              var author = session.Load<Author>($"authors/{idAuthor}");

              session.Delete<Author>(author);
              session.SaveChanges();
          }
                      
          documentStore.Dispose();

          Console.WriteLine("Operação concluída");
          Console.ReadKey();

      }

Neste código estamos criando uma nova base de dados chamada Post e inserindo um objeto chamado Author.

Ao instalar o RavenDB, ele vem com uma parte administrativa chamada Management Studio, nele é possível fazer administração da nossa base de dados.

Ao entrar na nossa base de dados chamada Post podemos ver um documento gravado como JSON conforme figura abaixo

ravendb

ravendb1

ravendb2

Conclusão

O RavenDB é um banco de dados NoSQL, Open Source, escrito em .NET e que funciona como uma API REST. Ele é muito simples de usar pois se assemelha muito com os ORM’s já conhecidos como Entity Framework e NHibernate

Além de contar com uma interface de administração muito fácil de se usar e com muitos recursos.

Quer saber mais sobre o RavenDB, clique aqui e conheça sua documentação.

O exemplo acima pode ser encontrado no meu GitHub atráves deste link

Abs e até a próxima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *