Question

J'utilise SqlServer pour piloter une application WPF. J'utilise actuellement NHibernate et prélève 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 existe une base de données en mémoire que je pourrais utiliser pour pouvoir partager les informations entre plusieurs applications sur le même ordinateur. Idéalement, cela serait placé sous ma pile NHibernate, afin que mon code ne soit pas modifié. En fait, je cherche à déplacer ma base de données de son format traditionnel sur le serveur pour devenir une base de données en mémoire sur le client.

Remarque je n'ai besoin que de la fonctionnalité de sélection.

Était-ce utile?

La solution

http://www.db4o.com/ peut être votre ami!

Autres conseils

Je serais très surpris que vous ayez même besoin de charger toutes vos informations en mémoire. Je dis cela parce que, à titre d'exemple, je travaille actuellement sur une application Web qui (pour diverses raisons) charge des milliers d'enregistrements sur de nombreuses pages. C'est PHP + MySQL. Et même ainsi, il peut le faire et afficher une page en moins de 100 ms.

Avant de suivre cette route, assurez-vous de devoir 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 mettre le cheval avant le panier.

Avant tout, vous devez vous assurer que vous avez un bon modèle de données relationnel: un modèle qui se prête aux requêtes les plus performantes. C’est autant l’art que la science.

De même, vous pouvez aimer NHibernate mais les les ORM ne sont pas toujours les meilleurs choix . Dans certains cas, par exemple, le code SQL codé à la main sera nettement supérieur.

Supposons maintenant que vous avez un bon modèle de données et que vous optimisez ensuite vos index et paramètres de base de données, puis que vous avez correctement configuré NHibernate. Dans ce cas, vous devriez envisager de stocker les données en mémoire si et seulement si les performances restent un problème .

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

Une des raisons d'éviter la mise en cache en mémoire est parce qu'elle ajoute beaucoup de complexité. Vous devez faire face à des problèmes tels que l'expiration du cache, les mises à jour indépendantes du magasin de données sous-jacent, que vous utilisiez des mises à jour synchrones ou asynchrones, la manière dont vous donnez au client une vue cohérente (sinon actualisée) de vos données, la manière dont vous traitez. avec basculement et réplication et ainsi de suite. Il y a un coût énorme de complexité à payer.

En supposant que vous ayez fait tout ce qui précède et que vous en ayez toujours besoin, il me semble que vous avez besoin d’une solution de cache ou de grille. Voici un aperçu des solutions Java en grille / en cluster , mais bon nombre d’entre elles (par exemple, Coherence, memcached) s’appliquent également à .Net. Velocity est un autre choix pour .Net.

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 en externe et qu’il existe exactement un processus activé par NHibernate (à l’exclusion 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 modifications apportées par l'autre.

Velocity est un serveur de mise en cache d'objet de processus conçu par Microsoft pour faire à peu près tout ce que vous voulez. bien que ce soit seulement sous forme de CTP pour le moment.

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

Vous pouvez utiliser HANA, édition express. Vous pouvez le télécharger gratuitement , c'est en mémoire, colonnaire et permet d’autres fonctions d’analyse telles que l’analyse de texte, géospatiale ou prédictive. Vous pouvez également accéder à ODBC, JDBC, à la bibliothèque node.js hdb et aux API REST, entre autres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top