2009-09-05 4 views
0

Je travaille dans Visual Studio 2005, .NET 2.0.Quelle base de données dois-je utiliser pour obtenir les meilleures performances?

J'ai besoin d'écrire une application, qui écoute sur le port COM et enregistre les données entrantes dans une base de données. Caractéristique principale: enregistrer les données entrantes (séries de numéros à 13 chiffres), si ce numéro existe déjà, puis le marquer comme double. Par exemple, il pourrait y avoir ces enregistrements dans la base de données:

0000000000001 OK
0000000000002 OK
0000000000002 Double
0000000000003 OK
0000000000004 OK

je pouvais utiliser la base de données SQL, mais je ne sais pas si c'est assez rapide ... La base de données devrait pouvoir stocker jusqu'à 10.000.000 d'enregistrements et écrire jusqu'à 100 enregistrements par minute (il faut donc vérifier 100 fois par minute si cet enregistrement existe déjà).

Quelle base de données dois-je utiliser? Peut-être que toute la base de données devrait être en RAM. Où pourrais-je en apprendre plus à ce sujet?

Merci

Répondre

3

Le niveau de performance que vous visez ne va pas gravement taxer les bases de données. Microsoft SQL Server, Oracle, Informix, MySQL, PostgreSQL et Sybase géreront facilement cette situation.

La clé est de bien concevoir votre base de données et vos structures de mémoire. Une approche native échouera rapidement - mais un peu de conception intelligente (en utilisant les bonnes structures de table, les index et les requêtes) fonctionnera bien.

Maintenant, si vous vouliez enregistrer 100 enregistrements par seconde alors vous parleriez un défi.

+0

OK ... maintenant, quand j'y pense, 100 lectures par minute ne sont vraiment pas une grosse affaire ... – sventevit

0

Il me semble que vous devez garder une représentation en mémoire de vos données (qui est, écrire des classes qui contiennent) et mise à jour/check vers cette représentation en mémoire plutôt que contre un "vraie" base de données.

Si vous avez besoin de stocker les données à long terme, vous pouvez les enregistrer régulièrement, de préférence pendant une interruption de l'entrée de nouvelles données depuis les ports COM, mais si cela ne se produit pas, peut-être avec un thread qui enregistre des éléments dans la base de données tandis que votre thread d'origine continue de collecter de nouvelles données.

1

Je pense que sur un matériel décent, n'importe quel serveur de base de données serait capable de gérer 100 mises à jour par minute (moins de 2 mises à jour par seconde).

Je vous recommande d'utiliser MySQL car il prend en charge les mises à jour atomiques qui excluent l'obligation d'utiliser la transaction pour "vérifier si existe, puis mettre à jour" dont vous avez besoin. Par exemple:

INSERT INTO data (number, status) VALUES ('00000001', 'OK') ON DUPLICATE KEY UPDATE status = 'DOUBLE'; 

Il existe d'autres serveurs SQL qui prennent en charge cette fonctionnalité, la meilleure recommandation va avec ce que vous savez (et ne pas oublier de mettre un index unique sur la colonne du numéro).

3

Vous n'avez pas besoin de DB, vous avez besoin d'une table de hachage. vous pouvez également utiliser un arbre trié, il sera plus efficace dans l'espace. en ce qui concerne le serveur sql, vous n'effrayez pas SQL avec 100 longs par minute ...

0

Si tout ce dont vous avez besoin est une paire valeur/clé, alors pourquoi ne pas regarder un cache distribué?

Velocity ou l'un des ports .net memcache devrait fonctionner correctement. L'avantage de cette approche est qu'elle évoluera si vos besoins augmentent, et aucun coût d'installation/maintenance ou de licence du serveur db.

0

Je suis d'accord avec Bevan.

Pour un examen plus approfondi:

  • l'aide d'une procédure stockée de sorte que le sql est optimisé.
  • Utilisation d'instructions préparées.
  • Quand lisez-vous la base de données? Vous pouvez commencer par insérer, puis ajouter des fonctionnalités (rapports, etc) pour la lecture, et vous commencerez à traiter des verrous, ce qui peut tuer votre performance si vous ne le planifiez pas.
+0

L'utilisation d'un proc stocké ne le rend pas nécessairement optimisé. SQL Server 2005 et mieux (peut-être même 2000), réutiliser les plans d'exécution des instructions SQL également. – JoshBerke

Questions connexes