2010-01-15 15 views
4

Quelqu'un a-t-il déjà eu l'occasion de recevoir et de mettre à jour un grand volume de données, de les stocker, de les trier et de les visualiser très rapidement?Stockage des données en temps réel et accès avec .net

De préférence, je suis à la recherche d'une solution .NET, mais cela peut ne pas être pratique.

Maintenant, pour les détails ...

Je vais recevoir environ 1000 mises à jour par seconde, quelques mises à jour, des nouvelles lignes d'enregistrements de données. Mais, il peut également être très en rafale, avec parfois 5000 mises à jour et de nouvelles lignes. À la fin de la journée, je pourrais avoir 4 à 5 millions de lignes de données.

Je dois à la fois les stocker et afficher les mises à jour de l'utilisateur dans l'interface utilisateur. L'interface utilisateur permet à l'utilisateur d'appliquer un certain nombre de filtres aux données pour montrer ce qu'il veut. J'ai besoin de mettre à jour tous les enregistrements et montrer à l'utilisateur ces mises à jour.

J'ai un taux de mise à jour visuelle de 1 ips.

Quelqu'un at-il des conseils ou une orientation sur ce problème? Je ne peux pas m'imaginer que je suis le premier à devoir faire face à quelque chose comme ça ...

D'abord, une sorte de base de données en mémoire, je pense, mais sera-t-elle assez rapide pour interroger les mises à jour? près de la fin de la journée une fois que je reçois un ensemble de données assez grand? Ou est-ce que tout dépend de l'indexation intelligente et des requêtes?

Merci d'avance.

+3

vous voulez un SGBDR tel que SQL Server 2008 (sur du matériel décent, et des niveaux RAID appropriés). –

+0

Quelle serait la performance avec une table select * from quand elle est à un million de lignes? En outre, si d'un côté, j'affiche ces lignes, comment puis-je gérer les mises à jour de la base de données?Y a-t-il un mécanisme de poussée, ou dois-je l'interroger chaque seconde pour des changements? – scubabbl

+0

Personne ne va vous donner un nombre, il y a * way * trop de variables. Vous devez l'essayer vous-même. Remplir une base de données avec des données de test. Vous n'avez pas à interroger si c'est vous qui ajoutez des données à la base de données. –

Répondre

1

C'est un problème très intéressant et difficile. J'approcherais une conception de pipeline avec des processeurs implémentant le tri, le filtrage, l'agrégation, etc. Le pipeline a besoin d'un tampon d'entrée asynchrone (threadsafe) qui est traité en temps opportun (selon votre demande de 1fps sous une seconde). Si vous ne pouvez pas le faire, vous devez mettre en file d'attente les données quelque part, sur disque ou en mémoire en fonction de la nature de votre problème.

Par conséquent, l'interface utilisateur doit être implémentée dans un style de traction plutôt que de pousser, vous souhaitez uniquement mettre à jour toutes les secondes.

Pour le magasin de données, vous disposez de plusieurs options. L'utilisation d'une base de données n'est pas une mauvaise idée, car vous avez besoin de données persistantes (et je suppose aussi interrogeable) de toute façon. Si vous utilisez un ORM, vous pouvez trouver NHibernate en combinaison avec son cache de deuxième niveau supérieur un choix décent.

De nombreuses considérations peuvent également être similaires à celles effectuées par Ayende lors de la conception de NHProf, un profileur en temps réel pour NHibernate. Il a écrit une série de messages à leur sujet sur his blog.

+1

Je ne recommanderais pas NHibernate pour cela, l'insertion/mise à jour 1000-5000 lignes/sec n'est pas ce que NH est pour. Mais la chose du pipeline semble intéressante. – sirrocco

+0

vous pouvez toujours le combiner avec le chargement en bloc sql personnalisé. NH a des points d'extension pour (presque) tout. –

-1

Peut être Oracle est la solution RDBMS la plus appropriée pour vous. Le problème avec votre question est qu'à ce niveau «critique» il y a trop de variables et de conditions à traiter. Non seulement le logiciel, mais le matériel que vous pouvez avoir (ça coûte :)), la vitesse de connexion, votre configuration de système utilisateur commun attendu et de plus en plus et plus ... Bonne chance.

+0

Pourquoi Oracle sur, disons, SQL Server? –

+0

@John J'ai dit "peut-être", juste en regardant la description très basique du problème et par mon expérience personnelle qui me donne une idée que sur les bases de données énormes dans les banques et les instituts de recherche (si j'ai travaillé pendant un certain temps) et pas MS SQL Server. En fait, ma réponse n'était pas purement technique, car il est très difficile de proposer quelque chose de vraiment pratique sur cette question en lisant simplement le post, à mon avis, bonne chance. – Tigran

+1

Ok, en fonction de votre réponse, je suis downvoting. Ce n'est pas une bonne raison de penser qu'Oracle pourrait être meilleur. Vous n'avez pas l'expérience de dire que c'est mieux; vous avez de l'expérience en disant que c'est utilisé. –