Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > NHibernate
NHibernate Forum d'entraide sur l'utilisation du mappeur objet/relationnel NHibernate.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/06/2011, 22h20   #21
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
Faut arrêter vos poncifs sur le sujet. moi j'ai fait des applis qui tiennent des To de données avec des ORM sans pb de perfs.

Et j'ai aussi vu des bases de données horribles avec du SQL peu performant s'écrouler avec 4 GO de données.

Faut arrêter de tout stigmatiser pour valoriser votre micro compétence.

Le SQL et les bases ça ne fait pas tout bien et rapidement. Ca n'est pas souple, c'est difficile à maintenir, c'est chiant à tester (les recharges de base....).

Et en plus c'est hors sujet et pénible.

Citation:
les ORM n'arrangent rien car ils sont nativement plus lents
Ahhhhhhh oui!!!!! ADO.NET est plus lent qu'ADO.NET ????? Prendre des données et hydrater un objet avec serait plus long que simplement les prendre...Oh mais nous avons des mathématiciens pointus ici !!!!

C'est certain que pour l'ORM, vous avez tous du voir qu'ils avaient des options, qu'on peut mettre des objets en lecture seule, utiliser un cache d'entités, continuer d'utiliser des vues indexées ou des procédures stockées !
OUI ON PEUT !!!!!

Sauf que vous ne faites aucun effort intellectuel. Le SQL, le SQL et encore le SQL....Mais qu'est ce que vous faites avec du SQL ?
Parce que dans mon cas, passer le code dans du SQL c'est divisé mes perfs par 100,1000 voir 10000, quant ça passe. Parce que j'ai besoin d'un langage plus performant que le SQL.

Si ça vous dépasse, c'est que probablement vous n'avez jamais dépassé l'ERP ou le site web. Bref, des insert massifs sans grande intelligence derriére autre que des barêmes de tva et des if partout.

Moi je pense à des applis qui ont des logiques fonctionnelles très complexes et massives et qui travaillent dans une latence inférieure à la seconde. Alors faut arrêter vos sketchs de "nous on fait de vrais applications donc on sait mieux".

Si vous arrivez à faire vos applis en SQL, c'est qu'elles sont triviales fonctionnellement.

Juste une vraie comparaison :
5000 options, une black & schole.
En SQL, 25 minutes
En C#, 30 secondes pour mettre toutes les entités en cache (no lock),1min 30 de calcul, 1 min d'insertion en ORM et la production est asynchrone.

Code disponible pour les sceptiques, c'est du 1 pour 1. Et c aussi un des plus simpliste.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/06/2011, 22h29   #22
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 911
Détails du profil
Informations personnelles :
Nom : Homme John Doe
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 911
Points : 1 457
Points : 1 457
les 3 secondes restantes c'est surout du a IE (sur un page j'avais un treeview qui pouvait contenir plusieurs centaine d'éléments dans un noeud dès que je dépliai ce noeud j’attendais 30Sec sur IE sur firefox c'était instantanée)
youtpout978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 08h54   #23
iberserk
Expert Confirmé
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 514
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 31
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 514
Points : 2 756
Points : 2 756
Envoyer un message via MSN à iberserk
B.A.F: je respect votre position, je ne pense pas être connu pour être un taliban SQL sur ce forum .NET...

Citation:
Oh mais nous avons des mathématiciens pointus ici !!!!
Citation:
Sauf que vous ne faites aucun effort intellectuel. Le SQL, le SQL et encore le SQL
Et je ne pense pas avoir été agressif non plus... je trouve que votre POST l'est inutilement...

Citation:
Parce que dans mon cas, passer le code dans du SQL c'est divisé mes perfs par 100,1000 voir 10000, quant ça passe. Parce que j'ai besoin d'un langage plus performant que le SQL.
Désolé mais cette phrase n'a aucun sens... si vous parlez d'un code qui fait un foreach avec envois d'un email alors oui ce n'est pas le travail du SGBD et c'est celui du code client...

Qui a dit qu'il fallait faire toute l'appli en SQL?

Personne ici... nous prônons juste de faire chaque partie avec les outils qui sont les plus performants pour le faire... en testant la solution retenue...

En clair les données c'est en SQL, les interactions avec le client... c'est au code client...

Pour moi faire de la présentation sur le SGBD ou traiter de la donnée en masse côté client c'est une erreur...


Citation:
ADO.NET est plus lent qu'ADO.NET !!!
A? je croyais qu'on parlait de NH?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 09h49   #24
WOLO Laurent
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 698
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 36
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 698
Points : 4 073
Points : 4 073
Envoyer un message via Yahoo à WOLO Laurent
Citation:
Envoyé par B.AF Voir le message
Sauf que vous ne faites aucun effort intellectuel. Le SQL, le SQL et encore le SQL....Mais qu'est ce que vous faites avec du SQL ?
Parce que dans mon cas, passer le code dans du SQL c'est divisé mes perfs par 100,1000 voir 10000, quant ça passe. Parce que j'ai besoin d'un langage plus performant que le SQL.
Ce n'est que normal, tu préfères augmenter tes perfs aux détriments de celle de l'application que tu livres ! C'est une fuite en avant qui fini par vous rattraper.
Citation:
Envoyé par B.AF Voir le message
Juste une vraie comparaison :
5000 options, une black & schole.
En SQL, 25 minutes
En C#, 30 secondes pour mettre toutes les entités en cache (no lock),1min 30 de calcul, 1 min d'insertion en ORM et la production est asynchrone.

Code disponible pour les sceptiques, c'est du 1 pour 1. Et c aussi un des plus simpliste.
Ah bon ! même sans voir la solution, je dirais que cela ne peut pas être possible, reste la façon dont vous traiter le sujet. Sinon, tu pourrais nous faire voir ton code.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/06/2011, 10h21   #25
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
C'est certain que maximiser une vraissemblance et faire une variance conditionnelle, c'est probablement nous qui ne savons pas faire de SQL.
Mais descendez deux secondes de votre piedestal !
On a pas besoin du SQL systèmatiquement pour faire des applications fiable, d'envergure et performantes.

Comment on fait des fonctions numériques en SQL ?
Comment on fait de la programmation paralélle en SQL ?
Comment on fait de la génération aléatoire en SQL ?
Comment on fait du temps réel en SQL ? Des signaux ?
Comment on gére le temps en SQL ?
Comment on fait une monte carlo en SQL ?
Et surtout si c'est faisable; comment le faire de façon performante (Vraiment) ??????

Ah ok, SELECT Produit * Quantité * sp_trouvetva('FR', GETDATE(), 'REGIME INDEPENDANT') c'est certain que ça marche. Mais ça marche aussi en basic et dans Excel.

Dans les applications qui ont besoin d'une latence faible voir très faible, le SQL est un boulet à trainer.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 11h14   #26
iberserk
Expert Confirmé
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 514
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 31
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 514
Points : 2 756
Points : 2 756
Envoyer un message via MSN à iberserk
Bon puisque vous ne changez pas de ton je vais m'y mettre:

Citation:
SELECT Produit * Quantité * sp_trouvetva('FR', GETDATE(), 'REGIME INDEPENDANT')
C'est sûr que si vous codez tout comme ça vous n'êtes pas près de faire quelque chose de performant avec du SQL :-)


Manifestement,le problème est que vous semblez mieux maîtriser .NET que SQL...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 11h29   #27
WOLO Laurent
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 698
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 36
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 698
Points : 4 073
Points : 4 073
Envoyer un message via Yahoo à WOLO Laurent
Citation:
Envoyé par iberserk Voir le message
Bon puisque vous ne changez pas de ton je vais m'y mettre:
Ne tombe pas dans le piège de le vouloir le suivre un jour il comprendra.
Citation:
Envoyé par B.AF Voir le message
C'est certain que maximiser une vraissemblance et faire une variance conditionnelle, c'est probablement nous qui ne savons pas faire de SQL.
Mais descendez deux secondes de votre piedestal !
On a pas besoin du SQL systèmatiquement pour faire des applications fiable, d'envergure et performantes.

Comment on fait des fonctions numériques en SQL ?
Comment on fait de la programmation paralélle en SQL ?
Comment on fait de la génération aléatoire en SQL ?
Comment on fait du temps réel en SQL ? Des signaux ?
Comment on gére le temps en SQL ?
Comment on fait une monte carlo en SQL ?
Et surtout si c'est faisable; comment le faire de façon performante (Vraiment) ??????

Ah ok, SELECT Produit * Quantité * sp_trouvetva('FR', GETDATE(), 'REGIME INDEPENDANT') c'est certain que ça marche. Mais ça marche aussi en basic et dans Excel.

Dans les applications qui ont besoin d'une latence faible voir très faible, le SQL est un boulet à trainer.
Tu es vraiment têtu, chaque outils a son rôle, mais une fois de plus tu ne connais pas le SQL, c'est l'impression que tu donnes au vu de la liste que tu viens d'énumerer !
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 12h13   #28
diplomegalo
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 35
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 35
Points : 14
Points : 14
Bonjour

Woaw que de forces vives !

Merci de vos réponses.

Citation:
Envoyé par Nathanael Marchand Voir le message
Et le plan d'execution de cette requete, il donne quoi?
Insignifiant (cost = 3). Le champ est indexé.

Citation:
Envoyé par WOLO Laurent Voir le message
Et si la requête SQL n'était pas la cause ?
Pouvez-vous nous donner le nombre de requête/s ?
Chaque test = une requête. Il n'y a pas de requêtes supplémentaires.

Citation:
Envoyé par B.AF Voir le message
(...) il y a moyen de voir le code dans son intégralité ?
C'est à dire tous les mappings avec toutes les associations et les configs ?
Ca représente pas mal à mettre dans un petit post. Une indication particulière pour permettre de présenter tout ce code de manière lisible (à part la balise CODE) ?

En ce qui concerne le débat pour ou contre. Dans mon cas c'est surtout une question de rapidité et facilité. Je n'avais clairement pas le temps de commencer à me plonger dans le développement d'un ORM. De plus je n'ai pas vraiment de bonne méthod de développement (design, pattern, etc.). Il me fallait une base sûr, solide et peut coupler qui me permettrait d'envisager des changements au niveau de mon application. Ca était long à prendre en main et mettre en place mais maintenant ajouter une entité et configurer les comportement est vraiment peu couteux en temps de développement.

Merci pour votre aide à tous.

Bien à vous
diplomegalo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 14h57   #29
potocastel
Membre à l'essai
 
Homme Nicolas Castellano
Développeur informatique
Inscription : juin 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Castellano
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 8
Points : 22
Points : 22
Oulaa il y a de l'animation je sens que je vais m'amuser sur ce forum

Sinon pour discuter sur le sujet, est ce que tu ne pourrais pas faire un objet ISession statique?

Et de ne plus utiliser le using pour chaque requête?
potocastel est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/06/2011, 18h49   #30
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
Citation:
Envoyé par potocastel Voir le message
Oulaa il y a de l'animation je sens que je vais m'amuser sur ce forum

Sinon pour discuter sur le sujet, est ce que tu ne pourrais pas faire un objet ISession statique?

Et de ne plus utiliser le using pour chaque requête?
Non une session statique n'apporterait rien en perf, pire, c'est pas terrible d'avoir des sessions longues.
Au contraire, son pattern uow est bon.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 18h51   #31
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
Citation:
Envoyé par iberserk Voir le message

Manifestement,le problème est que vous semblez mieux maîtriser .NET que SQL...
Moi je pense qu'à trois, vous êtes juste enfermés dans votre micro compétence, que vous ne maitrisez ni le dev ni la conception logicielle et que vous venez faire un troll et un hors sujet dont tout le monde se passerait bien.

Bon select, bon union, bon tout, et j'arrête là cette discussion est insignifiante avec des gens inintéressants.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 23/06/2011, 18h53   #32
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
Citation:
Envoyé par diplomegalo Voir le message

Ca représente pas mal à mettre dans un petit post. Une indication particulière pour permettre de présenter tout ce code de manière lisible (à part la balise CODE) ?


Merci pour votre aide à tous.

Bien à vous
Laisse moi un message et je te donnerai un mail sur lequel l'envoyer.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 21h58   #33
iberserk
Expert Confirmé
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 514
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 31
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 514
Points : 2 756
Points : 2 756
Envoyer un message via MSN à iberserk
Citation:
Moi je pense qu'à trois, vous êtes juste enfermés dans votre micro compétence, que vous ne maitrisez ni le dev ni la conception logicielle et que vous venez faire un troll et un hors sujet dont tout le monde se passerait bien.
D'accord on est trois inconnus qui avons volé les identifiants de vrai gens
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 09h44   #34
WOLO Laurent
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 698
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 36
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 698
Points : 4 073
Points : 4 073
Envoyer un message via Yahoo à WOLO Laurent
Nous trois, nous avons une micro-compétance ...,vous me faites rire mais bon, il vaut mieux rester humble.
__________________

Découvrez la FAQ de MS SQL Server.
La chance accorde ses faveurs aux esprits avertis !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 10h19   #35
diplomegalo
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 35
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 35
Points : 14
Points : 14
Bonjour

Je vous annonce que je stoppe ce topic. Les performances ne sont pas super bonne mais acceptable pour l'environnement dans lequel je travail.

Voilà pour les plus curieux d'entre vous des extraits de code :

** Une classe static qui me permet de gérer la configuration Fluent Nhibernate :

Code :
public abstract class FNSettings
La SessionFactory est créée une seule fois lors du premier appel.

Code :
1
2
3
4
5
6
7
8
 
public static ISessionFactory SessionFactory {
            get {
                if (_sessionFactory == null)
                    _sessionFactory = FNSettings.CreateSessionFactory();
                return _sessionFactory;
            }
        }
Création d'une session

Code :
1
2
3
4
 
public static ISession CreateSession() {
            return SessionFactory.OpenSession();
        }
Configuration Fluent

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
private static FluentConfiguration FNConfiguration{
            get {
                if (_fnConfiguration == null){
                    var cfg = OracleClientConfiguration.Oracle10
                        .ConnectionString(c => c.Is(FNSettings.ConnectionString))
                        .Dialect<NHibernate.Dialect.Oracle10gDialect>()
                        .ShowSql();
 
                    _fnConfiguration = Fluently.Configure()
                        .Database(cfg)
                        .ExposeConfiguration(
                            c => c.SetProperty("current_session_context_class", "web")) //use for HttpModule 
                        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ContactMap>())
                        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PersonMap>())
                        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ScreeningMap>());
                }
                return _fnConfiguration;
            }
        }
** Mapping de contact

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public class ContactMap : ClassMap<Contact>
    {
        public ContactMap()
        {
            Table("CONTACT");
 
            Id(x => x.Id, "contactid");
            Map(x => x.Firstname, "firstname");
            Map(x => x.Lastname, "lastname");
            Map(x => x.Numcli);
            Map(x => x.Birthday);
 
            References<Screening>(x => x.Screening)
                .Column("contactid");
 
            HasMany<Person>(x => x.Person)
                .KeyColumn("contactid")
                .Inverse();
        }
    }
** Une abstract classe Repository

Code :
internal abstract class Repository<T> : IRepository<T> where T : class {
Un propriété Session

Code :
1
2
3
4
5
6
7
8
9
10
11
 
private ISession _session;
        protected ISession Session{
            get {
                if (_session == null) { 
                    _session = FNSettings.CreateSession();
                    //_session = FNSettings.GetCurrentSession();
                }
                return _session;
            }
        }
Get by id session

Code :
1
2
3
4
5
6
7
8
 
public T GetById(object id){
            if (id == null)
                throw new ArgumentNullException("Id cannot be null");
            if (string.IsNullOrEmpty(id.ToString()))
                throw new ArgumentException("Id cannot be null or empty");
            return (T) Session.Get<T>(id);
        }
** Une classe repository spécifique au contact qui hérite de la classe Repository

Code :
internal class ContactRepository : Repository<Contact>, IContactRepository{
Criteria

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public Contact GetByEntityId(string idSlx) {
            if (string.IsNullOrEmpty(idSlx))
                throw new ArgumentException("Id cannot be null or empty");
 
            ICriteria criteria = Session.CreateCriteria<Contact>();
            criteria.Add(Restrictions.Eq("Id", idSlx));
 
            try{
                return criteria.List<Contact>()[0];
            }catch (IndexOutOfRangeException){
                throw new ObjectNotFoundException(idSlx, typeof(Contact).Name) ;
            }
        }
Donc j'ai une session par instance de repository qui reste "ouverte" durant toute la durée de vie du repository (utile au lazyload).

Tout ça est très standard...

Merci pour votre aide

Bien à vous
diplomegalo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 10h47   #36
diplomegalo
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 35
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 35
Points : 14
Points : 14
Bonjour

Dernièrement j'ai également ajouté quantité d'index dans ma base de données. Cela m'a permis d'améliorer considérablement les temps de réponses et à donc solutionner définitivement mon problème.

Merci à tous.
diplomegalo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h04.


 
 
 
 
Partenaires

Hébergement Web