2009-03-07 7 views
2

J'utilise SqlServer pour piloter une application WPF, j'utilise actuellement NHibernate et je préexamine toutes les données afin qu'elles soient mises en cache pour des raisons de performances. Cela fonctionne pour une application client unique, mais je me demandais s'il y avait une base de données en mémoire que je pourrais utiliser afin de pouvoir partager l'information entre plusieurs applications sur la même machine. Idéalement, cela se situerait en dessous de ma pile NHibernate, donc mon code n'aurait pas à changer. Effectivement, je cherche à déplacer ma base de données de son format traditionnel sur le serveur pour être une base de données en mémoire sur le client.Dans la base de données de mémoire

Remarque Je n'ai besoin que de certaines fonctionnalités.

Répondre

1

VelocityVelocity est un serveur de mise en cache d'objets hors processus conçu par Microsoft pour faire à peu près ce que vous voulez, bien que ce soit uniquement sous forme de CTP pour le moment.

Je crois qu'il existe également des wrappers pour memcached, qui peuvent également être utilisés pour mettre en cache des objets.

3

Je serais incroyablement surpris si vous avez même besoin de charger toutes vos informations en mémoire. Je dis cela parce que, par exemple, je travaille sur une application Web au moment où (pour diverses raisons) charge des milliers d'enregistrements sur plusieurs pages. C'est PHP + MySQL. Et même ainsi, il peut le faire et rendre une page en moins de 100ms.

Avant de descendre cet itinéraire, assurez-vous de le faire. Commencez par rendre votre base de données aussi performante que possible. Maintenant, évidemment, cela inclut des choses comme avoir des index appropriés et ajuster votre base de données, mais même si vous mettez le cheval avant le panier. D'abord et avant tout, vous devez vous assurer que vous avez un bon modèle de données relationnelles: celui qui se prête à des requêtes performantes. C'est autant d'art que de science.

En outre, vous pouvez aimer NHibernate mais ORMs are not always the best choice. Par exemple, le SQL codé à la main sera largement supérieur.

Maintenant, en supposant que vous ayez un bon modèle de données et en supposant que vous avez ensuite optimisé vos index et vos paramètres de base de données et que vous avez correctement NHibernate configuré, alors et seulement alors devriez-vous envisager de stocker des données dans la mémoire si et seulement si la performance est toujours un problème.

Pour mettre cela en perspective, les seules fois où j'ai eu besoin de faire cela sont sur des systèmes qui doivent effectuer des millions de transactions par jour.

Une raison pour éviter la mise en cache en mémoire est qu'elle ajoute beaucoup de complexité. Vous devez gérer des problèmes tels que l'expiration du cache, des mises à jour indépendantes du magasin de données sous-jacent, si vous utilisez des mises à jour synchrones ou asynchrones, comment donner au client une vue cohérente (si pas à jour) de vos données, avec basculement et réplication et ainsi de suite. Il y a un énorme coût de complexité à payer.

En supposant que vous avez fait tout ce qui précède et que vous en avez toujours besoin, il me semble que ce dont vous avez besoin est une solution de cache ou de grille. Voici un overview of Java grid/cluster solutions mais beaucoup d'entre eux (par exemple Coherence, memcached) s'appliquent également à .Net. Un autre choix pour .Net est Velocity.

Il faut souligner et souligner que quelque chose comme NHibernate n'est cohérent que tant que rien ne met à jour la base de données et qu'il y a exactement un processus activé par NHibernate (à l'exception des solutions en cluster).Si deux applications de bureau sur deux ordinateurs différents mettent à jour la même base de données avec NHibernate, la mise en cache ne fonctionnera tout simplement pas car les unités de persistance ne seront tout simplement pas au courant des changements que l'autre effectue.

+0

être surpris, être très surpris, beaucoup de données + animations = sortie vidéo, j'ai besoin de toute la vitesse que je peux obtenir. – MrTelly

+0

Oh c'est certainement pas impossible, juste improbable. Dans mon expérience. Donc, vous pourriez avoir besoin de la mémoire cache. Si les données mises en cache sont mises à jour et que ces mises à jour doivent être propagées, plusieurs instances de NHibernate ne fonctionneront pas (malgré la mise en cluster). – cletus

1

Vous pouvez utiliser HANA, édition express. Vous pouvez download it for free, il est en mémoire, colonne et permet d'autres capacités d'analyse telles que l'analyse de texte, géospatiale ou prédictive. Vous pouvez également accéder avec ODBC, JDBC, bibliothèque hdb node.js, API REST parmi d'autres.

Questions connexes