|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 120 ![]() |
Bonsoir,
j'avais déjà fait un post sur les bases de données, mais à présent j'ai un peu plus d'éléments, d'où de nouvelles interrogations 1 : j'ai fait un chrono (avec stopwatch) pour comparer les 2 bases lorsque je fais 100 INSERT via une boucle, la base Access est 3 fois plus rapide !! mais lorsque je fais des SELECT, SqlCe est plus rapide d'environ 15% 2 : y a-t-il un nombre maxi de lignes (avec environ 12 colonnes de int et varchar(10) par exemple) pour les bases sous SqlCe ou Access ? 3 : quelle base choisir si j'ai 40000 enregistrements (INSERT) / jour, mais que je dois pouvoir aussi consulter dans la journée (SELECT) ? est-ce que c'est beaucoup pour ces bases "simples" 4 : si je dois vendre mon application (ou l’intégrer dans le prix d'un équipement), dois-je payer (ou indirectement faire payer) une éventuelle licence ? 5 : dois-je prévoir d'utiliser une autre base ? SQL, Oracle, ... merci @+ KaloOopS |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Bonjour,
Alors voici mes réponses par rapport à mon vécu : 1/ Cela ne m'étonne pas. Access possède un moteur un peu plus "évolué" que SQL Server CE, et se comportera davantage comme un réel SGBD : performances inférieures en INSERT/UPDATE, mais meilleures en SELECT contraitement à SQL Server CE qui se comporte plus comme une base fichier (excellentes performances en INSERT/UPDATE, mais lent pour les SELECT). 2/ Il n'y a pas de limite "logicielle". En revanche, les performances ont tendance à s'effondrer passé une certaine taille. Access, c'est autour de 100 Mo, surtout si la plupart des données sont dans la même table. Cela dépend aussi de la machine et de la mémoire dispo. Sur SQL Server CE, je pense que la limite est bien plus haute (toujours parcequ'il s'apparente à une base fichier) 3/ Il faut que tu vérifies sur les UPDATE et SELECT sont complexe ou non (jointures, sous-requêtes, etc.) Access sera meilleurs dans ce cas. Si les SELECT sont "unitaires", alors SQL Server CE devrait s'imposer comme choix. 4/ Non, les deux bases sont gratuites et distribuables librement. 5/ SQL Server Express offrirait de meilleures possibilités. Si tu veux conserver la simplicité et la possibilité d'"embarquer" la base, alors SQL Lite sera un très bon choix. |
|
|
00
|
|
|
#3 | |||||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 718 ![]() |
Citation:
Citation:
Citation:
Citation:
Ca dépend de ton besoin... L'avantage de bases comme SQL CE, Access ou SQLite, c'est qu'elles sont basées sur des fichiers, il n'y a pas besoin de serveur. Ca fait que c'est nettement plus simple à déployer et à configurer. Après, des bases comme SQL Server, Oracle ou MySQL sont mieux adaptées pour la montée en charge (nombre d'utilisateurs simultanés, volume de données, etc), mais si c'est juste une application pour un utilisateur en local ça ne vaut probablement pas le coup. Citation:
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|||||
|
11
|
|
|
#4 | ||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 718 ![]() |
Citation:
A mon avis, le test sur l'insertion de 100 lignes ne veut pas dire grand chose, parce que c'est trop rapide pour que les différences observées soit significatives. Il y a trop de choses qui peuvent interférer sur une opération aussi courte. En plus, tout dépend de comment tu as codé ton test ; pour que ce soit significatif, il faut que les conditions soient exactement les mêmes pour les 2 SGBD. J'ai refait le test avec un code exactement équivalent pour 4 SGBD différents, en insérant 100000 lignes avec ou sans transaction : Citation:
Le code du test : http://pastebin.com/6EwVBNTe (exécuté dans LinqPad)
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||
|
10
|
|
|
#5 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Il supporte bien plus de fonctionnalités SQL que SQL Server CE (sous-requêtes notamment). Pour cette raison, il me fait bien plus penser à un SGBD "classique", alors que SQL Server CE me fait fortement penser au drivers JET qui joue avec des fichiers dBase, qui possède les mêmes limitations (mais aussi moins d'avantages, SQL Server CE c'est pas pourri non plus
Après, niveau performances, ok, le test démontre que finalement, Access est bien plus lent. |
|
|
01
|
|
|
#6 | ||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 718 ![]() |
Citation:
Citation:
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||
|
00
|
|
|
#7 | |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Je parle du support des fichiers dBase, qui est extrêment limité (mais pour de l'embarqué, tout à fait raisonnable). |
|
|
|
00
|
|
|
#8 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 718 ![]() |
Je confirme, j'ai testé en 3.5 et 4.0, et c'est visiblement pas supporté...
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Soit je confond avec autrechose, soit je me suis arrêté trop tôt lorsque j'ai rencontré une erreur. J'avais en mémoire d'avoir été très déçu par le non support d'une fonctionnalité qu'Access supportait. Peut-être autrechose, ou moi qui me suis planté lorsque j'ai voulu m'en servir. |
|
|
|
00
|
|
|
#10 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 718 ![]() |
Euh... pourquoi ? J'ai dit que j'avais testé, et que je confirmais ce que tu avais dit. Les sous-requêtes ne sont effectivement PAS supportées, donc on est d'accord
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 215 ![]() |
Citation:
mef Access ne supporte pas le multithreading, les autres BDD oui. C'est vraiment bien si tu fais un SELECT une autre opération en même temps. L'intérêt du multithreading c'est que tu peux faire plusieurs choses en même temps. Access ne permet pas les accès concurrentiels la plupart des autres bases oui selon les modes optimistes, pessimistes etc...
__________________
Alea Jacta Est |
|
|
|
00
|
|
|
#12 | |
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 120 ![]() |
Bonsoir
merci pour vos réponses et vos tests (va falloir que j’étudie le code car c'est pas mal ce truc pour alterner entre différentes bases c'était 40 000 et non 4 000 mais bon je pense que les réponses sont les mêmes à partir de combien d'enregistrements par jour on peut considérer que c'est une "bonne" ou "grosse" base ?? Citation:
autre question : est-ce que SQLite est libre de licence quelconque ?? merci @++ KaloOopS |
|
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
|
|
|
00
|
|
|
#14 | |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Si tu conserve 5 ans d'historique, ça va vite devenir considérable (73 000 000 enregistrements au bout de 5 ans), d'autant plus que j'imagine qu'il n'y a pas qu'une seule table qui grossisse. Pour une telle volumétrie, ni Access, ni SQL Server CE ne tiendront la charge : tu pourras effectivement travailler avec un tel volume, mais les performances seront fortement dégradées (quoique Access, on arrive proche du point de non retour). Une transaction, c'est la possibilité de garantir l'intégrité des données en associant plusieurs actions dans la base en une seule, et en séparant les données en cours de modifications (visibles par la seule personne qui les modifie) et les données intègres (visibles par tous). Le meilleur exemple d'une transaction, c'est une opération de débit sur un compte comptable : un crédit doit obligatoirement être inscrit en même temps dans un autre. Si l'une des deux écritures tombe en erreur, alors il faut qu'aucune des deux écritures ne soit passée. Idem, personne ne dois pouvoir lire les lignes de débit que tu as inserré avant que tu aies fini d'écrire les lignes en crédit. Pour qu'un SGBD-R puisse porter le nom de "-R", il faut qu'il supporte un minimum les transactions. Access et SQL Server CE les supportent. Mais contrairement à SQL Server Express, Oracle, Postgre-SQL ou SQL Lite, ils les supportent que partiellement, et avec des performances catastrophiques (surtout Access). SQL Lite, si je ne m'abuse, est distribué sous licence GNU/GPL. A vérifier sur leur site. |
|
|
|
00
|
|
|
#15 | |
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 120 ![]() |
Citation:
40000 est à mon avis le cas extrême, car même si nous faisons des machines capables de faire des cadences de 1 pièce toutes les 2 secondes, à mon avis avec de telle cadence, le client doit avoir sa propre traçabilité et non pas une solution indépendante vendue par son fournisseur (en l'occurence nous), malheureusement pour la durée de vie, normalement on fait des machines solides dans le temps donc a moyen terme vu qu'il y ait des fortes probabilités d'avoir de gros volumes je vais me diriger vers SQLite merci pour vos réponses @++ KaloOopS |
|
|
|
00
|
|
|
#16 | |
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 120 ![]() |
Tom,
Citation:
est-ce possible de jongler entre plusieurs types de SGBD ? sans changer/adapter le code en fonction de telle ou telle base merci @++ KaloOopS |
|
|
|
00
|
|
|
#17 | ||||
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 718 ![]() |
En gros, c'est un moyen de "grouper" plusieurs opérations pour garantir la cohérence des données. Soit toutes les opérations réussissent et sont "validées" (commit) de façon atomique (comme s'il n'y en avait qu'une), soit on annule tout (rollback). Comme ça on est sûr que les données ne se retrouvent jamais dans un état "bancal" et incohérent.
Wikipedia t'expliquera ça mieux que moi http://fr.wikipedia.org/wiki/Transac...onn%C3%A9es%29 C'est dans le domaine public, il n'y a aucune restriction d'utilisation. http://www.sqlite.org/copyright.html Citation:
Citation:
Citation:
System.Data System.Data.Common System.Diagnostics (pour le Stopwatch) De toutes façons Visual Studio peut ajouter automatiquement les using manquants (clique sur le Smart Tag sur les symboles qu'ils ne reconnait pas) Citation:
Cela dit, le fait de pouvoir faire abstraction du SGBD reste intéressant et utile : si tu isoles bien le code spécifique du code générique, ça fait quand même nettement moins de travail le jour où tu veux changer de SGBD...
__________________
Pas de questions techniques par MP ! Le forum est là pour ça... |
||||
|
10
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2010 Messages : 120 ![]() |
Merci pour encore pour toutes ces réponses
@++ KaloOopS |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com