Quantcast
Channel: kerrubin's blog » NoSQL
Viewing all articles
Browse latest Browse all 3

[C# RavenDB] Overview

0
0

Comme pour le billet sur MongoDB que j’avais écris, il y a un temps certain, voici le pendant pour RavenDB.

Pour le coup, je ne vais pas refaire l’introduction sur ce qu’est une base de données NoSQL, je vous laisse relire celle du billet mentionné.
Je ne vais pas non plus m’étendre sur les avantages de RavenDB, je vais laisser le discours « commercial » au site officiel le faire : RavenDB – Features.

Du coup, dans ce billet, nous allons plutôt aborder la mise en route de RavenDB.
Et au fil du billet, je comparerais avec MongoDB.

 

 

 

Installation de RavenDB.

 

Dans un premier temps, il convient donc de se rendre sur le site de RavenDB pour télécharger la dernière version stable, dans le cas présent, c’est la version 2261.

C’est un zip que je décompresse dans « D:\Programmes\RavenDB ». Il faudra donc adapter les chemins en fonction.

Là, on lance une invite de commande (mode administrateur) et on va dans le répertoire de RavenDB, puis dans le répertoire Server (donc : D:\Programmes\RavenDB\Server dans mon cas).
RavenDB est une application .Net, donc elle prend la forme d’assemblies (*.dll) et surtout d’un fichier Raven.Server.exe.config qui permet de la configurer.
Toutes les valeurs personnalisables sont mentionnées dans la documentation : Configuration options.

J’ai choisis l’option application IIS.
Cela veut dire que je vais attaquer la base de données en HTTP.
Du coup, j’ai créé une application Web sous IIS qui pointe vers « D:\Programmes\RavenDB\Web ».
Quand je lance le site http://localhost/RavenDB/, je suis redirigé vers l’URL http://localhost/RavenDB/raven/studio.html, avec un plugin Silverlight

Le Studio est SUPER utile et c’est un TRÈS gros plus en faveur de RavenDB, selon moi.
RavenDB - Studio

Il permet, en autres, de voir les documents et collections apparaître au fil de l’eau.

A noter que pour me facilité la tâche, dans le cadre du test, j’ai fais en sorte que RavenDB soit vraiment ouvert à tous les vents (les étapes sont numérotées) :
RavenDB - Authorisations

 

Dans le code .Net.

 

Là, j’ai fais une solution toute fraîche nommée « RavenDBSample » et grâce à NuGet, j’ai installé la package RavenDB.Client, version 2.0.2261.
Rien de bien compliqué là non plus.
Cela ajoute les assemblies Raven.Abstractions et Raven.Client.Lightweight.

Pour se connecter à RavenDB, c’est assez simple :

DocumentStore documentStore = new DocumentStore 
    { 
        // L'URL d'accès à RavenDB
        Url = "http://localhost/RavenDB",
        // Les credentials par défaut, je n'ais rien fais de précis pour cet exemple.
        Credentials = System.Net.CredentialCache.DefaultCredentials
    };
documentStore.Initialize();

Comparé à MongoDB, ça reste quand même dans la même lignée : simplicité.

Par contre, pour l’utilisation et un CRUD de base, je trouve ça plus simple que MongoDB.

Déjà, il faut savoir que RavenDB utilise un champ Id de type String.
Ce qui veut dire que si vos objets ont ceci :

public String Id { get; set; }

Alors il sera auto-géré par RavenDB.
En général, il va se présenter sous la forme [Nom du type]/[Identifiant incrémenté].
Si je reprends donc l’exemple d’un objet UserInfo, alors la première entrée aura pour Id « UserInfo/1″.

Ensuite, RavenDB ne travaille pas sur les collections comme MongoDB, mais plus sur des documents.
Ceci dit, les collections regroupant des documents existent toujours.

Les requêtes ne passent donc pas par les collections, mais par un objet de session, qui possède un scope définit.
Dans ce scope, on fait donc toutes nos petites opérations et puis c’est tout :)
Autant sur MongoDB, je me suis fais des classes génériques pour travailler avec les collections autant avec RavenDB, il n’y en a plus du tout besoin.

Exemples :

DocumentStore documentStore = new DocumentStore 
{ Url = "http://localhost/RavenDB", Credentials = System.Net.CredentialCache.DefaultCredentials };
documentStore.Initialize();

UserInfo user1 = new UserInfo()
{
    Login = "kerrubin1",
    Password = "P@55w0rd"
};
UserInfo user2 = new UserInfo()
{
    Login = "kerrubin2",
    Password = "M0td3P@553"
};

using (IDocumentSession session = documentStore.OpenSession())
{
    // Création d'un document.
    // Les propriétés Id de ses deux objets vont être automatiquement alimentées.
    session.Store(user1);
    session.Store(user2);
                
    // Méthode à appeler pour sauvegarder toutes les modifications en base.
    session.SaveChanges();

    // Ici, je prends tout, mais avec Linq, il est possible d'intercaler un Where.
    // Le Query est fait pour requêter.
    List<UserInfo> users = session.Query<UserInfo>().ToList();

    // Chargement d'un objet.
    // Contrairement au Query, le Load est bien fait pour charger un (ensemble de) document(s) précis.
    UserInfo kerrubin = session.Load<UserInfo>(user1.Id);

    // Modification de l'objet.
    kerrubin.Login = "kerrubin";
    // Comme pour l'insert, on sauvergarde le(s) changement(s).
    session.SaveChanges();

    // Et on supprime l'objet superflu.
    session.Delete<UserInfo>(user2);
    // Comme toujours, on sauvergarde les modifications.
    session.SaveChanges()

 

Conclusion.

 

Pour le moment, ma préférence va à RavenDB pour ce qui est de la gestion des objets.
Plus besoin de gérer les collections et les modifications sur les objets sont beaucoup plus simples, tout comme la récupération de tout un lot de données qui n’oblige plus à boucler sur un objet inutile.

De plus, RavenDB a des modes de fonctionnement assez sympas (comme ici via HTTP).
Le Studio est également un très gros plus car très simple d’utilisation et vraiment super utile.

Coté performances, comme je n’ai pas regardé sur de gros volumes (juste pour écrire ce billet, en fait), je me garderais bien de juger.

 

Pour aller plus loin.

 

Déjà, le site officiel de RavenDB.
Ensuite, le groupe Google dédié à RavenDB.
Le blog d’Ayende, le développeur majoritaire (de ce que j’ai compris ^^).
Et enfin le GitHub de RavenDB.



Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images