Une grosse BDD ou plusieurs ? - SQL/NoSQL - Programmation
Marsh Posté le 09-04-2008 à 20:09:59
une seule base, sinon, tu vas galerer vraiment des qu'il sagira de faire une requete a cheval sur plusieurs club
et des tables a moins d' un million de ligne, ca ne pose pas de problème si elles sont bien structurée et que tu utilise judicieusement les index
Marsh Posté le 09-04-2008 à 21:12:21
Il n'y a aucune communication entre 2 clubs, donc ça ne pose pas de problème.
Au delà du million, quels sontles problèmes qui se posent ?
Merci.
Marsh Posté le 10-04-2008 à 02:23:48
aucun si tu écrit correctement tes requêtes et que tu administre correctement ta base (et que tu n'utilises pas un sgbd pourri, mais un sgbd dont les capacités correspondes à ton besoin -ce qui n'exclu par forcément mysql-)
mais vu ta volumétrie, tu peux même bosser avec access, t'aura pas de problèmes de performances...
par contre 40 tables, ça me semble un peu énorme.
t'as bien suivit les méthodes merise/uml. maintenant, dénormalise un peu ton modèle, tu dois avoir les 3/4 de tes tables avec une structure identique, qui peuvent parfaitement être mutualisées
Marsh Posté le 10-04-2008 à 07:47:53
On a chez nous une base de données avec quelques centaines de tables dont certaines pèsent quelques millions de lignes (je travaille dans la finance).
Évidemment côté administration c'est un peu plus tendu, avec des checks tous les week-end et tout, mais sinon, ça roule et c'est même rapide pour peu que l'on place les index correctement.
Marsh Posté le 10-04-2008 à 11:56:29
juliuscesar a écrit : Il n'y a aucune communication entre 2 clubs, donc ça ne pose pas de problème. |
et le jour ou tu vaux faire une requete pour voir combien d'adherent /d'entrainement /... par club ?
sans compté qu'a chaque ajout de club, c'est une nouvelle base à créer et a initiliaser
honetement, si tu avais 10 fois plus de données et tellement de connexion que tu mette tes bases sur des serverus différents, alors oui , tu devrai séparé
mais là, c'est aps le cas
Marsh Posté le 10-04-2008 à 12:04:03
ta volumétrie n'est pas si énorme que ça... une seule base bien conçue sera parfaitement adaptée!
Marsh Posté le 10-04-2008 à 12:29:32
Je confirme également. J'exploite une base mysql avec presque 1 million de données dans une gestion commerciale: Ça ne pose aucun problème. Si tu craints les plantages c'est plutôt du coté OS qu'il faut voir. windows a fait de gros progrès mais le plus sure reste encore linux.
Marsh Posté le 10-04-2008 à 13:44:41
par contre, prévoit du début la sauvegarde et la restauration
c'est souvent sous évalué
Marsh Posté le 10-04-2008 à 20:11:01
flo850 a écrit : |
surtout que je pense (faudrait faire un bench pour vérifier) que d'avoir plusieurs bases qui tournent sur le même serveur, ça consomme bien plus que d'avoir une unique base plus volumineuse. Oracle par exemple, une base = 3 services windows, et 300 Mo de mémoire utilisée. c'est invariable. donc avec 10 bases, tu fous à genoux même un gros serveur, avant même d'avoir commencé à mettre la moindre ligne dans les tables.
Marsh Posté le 10-04-2008 à 20:38:28
pas sous MySQL
l'avantage d'avoir plusieurs bases et de pouvoir les repartir sous différents serveur
Marsh Posté le 10-04-2008 à 20:39:21
thierryR a écrit : Je confirme également. J'exploite une base mysql avec presque 1 million de données dans une gestion commerciale: Ça ne pose aucun problème. Si tu craints les plantages c'est plutôt du coté OS qu'il faut voir. windows a fait de gros progrès mais le plus sure reste encore linux. |
là, je travaille sur un projet Générix (ERP).
le client à 700 000 de références produits (ouais ouais, vous rêvez pas).
et il a 400 magasins.
et...
tous les stocks des magasins sont gérés par la centrale... c'est donc 400 dépôts.
400 * 700 000 = 280 000 000 de fiches de stocks...
mais c'est pas tout (ce serait trop simple )
Dans le cadre du calcul de réapprovisionnement automatique des magasins et de la centrale, une table permet de stocker des tuples genre "produit/magasin" afin d'infiquer un seuil en "tête de gondole" (donc à rajouter au seuil minimum), en fonction du pays du fournisseur du produit, de la situation géographique du magasin, du nombre de commandes passées dessus le mois derniers, etc... C'est pas moine de 50 lignes qui peuvent venir ainsi être définir pour chacune de ces entrées de stock.
Et moi ? Dans le cadre de mes devs, j'ai une copie de cette base Oracle (24 Go de données pour 37 Go d'index ) sur une machine virtuelle dotée de 1 Go de mémoire sous Windows XP, qui tourne sur mon ordinateur portable doté de 2 Go de mémoire sous Vista.
On est 4 à travailler dessus, à faire des requêtes SQL imbittables, lancée par l'usine à gaz qu'est OC4J (une 100 aine de requêtes pour afficher une pauvre fiche produit )
Bah ça ronronne tranquille, j'ai pas de problèmes de performances -j'oubliais, OC4J tourne dans la même machine virtuelle qu'Oracle, sinon ça serait pas drôle -
Bref, quand t'auras au grand minimum plusieurs dizaines de millions de lignes dans tes tables, voir comme moi des milliards, tu pourras commencer à te poser des questions d'administration de la base. D'ici là, un moteur de SGBD pas trop pourri, quelques index, et roule ma poule, t'as pas à t'inquiéter pour tes quelques dizaines de milliers de lignes
Marsh Posté le 10-04-2008 à 20:41:03
flo850 a écrit : pas sous MySQL |
et c'est bien le seul que je vois.
car rien que d'avoir plusieurs bases, ça implique de facto une fragmentation monstrueuse des fichiers de données dès que MySQL aura besoin de le faire grossir. Donc même si en soit ça ne surcharge pas spécialement le serveur (ceci dit, je doute que mysql ne lance pas au minimum un process par base de données) tu perdras ailleurs.
Marsh Posté le 10-04-2008 à 22:35:59
au pire pour les bases vraiment énormes ou pour celles qui nécessitent des perfs maximales, MySQL gère le partitioning dans ses dernières versions (à partir de la 5.1.22)
Marsh Posté le 11-04-2008 à 01:35:40
ouais, m'enfin quand on arrive à des problèmes de volumétrie énormes et des besoins de perfs conséquents, MySQL n'apporte plus rien avec son partionning.
il faut déjà se poser la question sur l'adéquation entre les fonctionnalités/possibilités de mysql (ou de tout autre sgbd) et le besoin qu'on en a.
pour certaines choses, mysql excèle, pour d'autres, c'est de la merde.
à la limite si on veut un truc qui est réputé plus rapide que mysql et plus robuste, sans oublier plus standard et tout aussi gratuit, on prends postgresql.
ou on peut aussi se tourner vers les produits oracle, sql server ou bd2 qui existent tous les trois en versions gratuites sans limitations notables (qui offrent de toute façon des possibilités étendues par rapport à mysql)
Marsh Posté le 26-04-2008 à 15:59:39
Hello, c'est encore moi !
Je continue ici, parce qu'il y a un lien avec le reste.
J'ai donc ma base de données distante avec mes différents clubs.
Dans chaque club, il y a plusieurs utilisateurs, qui ont accès à certaines infos.
J'identifie chaque utilisateur avec son login/pass, tout ça dans une table de la base.
Donc ma question, c'est de savoir comment pour chaque requête que j'ai à faire, je peux savoir si mon utilisateur a les droits suffisants.
Est-ce que je dois faire une procédure stockée, à laquelle je passe ma requête, et qui vérifie les droits accès ?
Est-ce que je dois écrire ma requête dans une espèce de langage intermédiaire, ma procédure s'occupant de faire les vérifs et de traduire ça en SQL ?
Une meilleure solution, à laquelle je n'ai pas pensée ?
Merci beaucoup pour vos futures réponses
Marsh Posté le 26-04-2008 à 17:09:14
perso , je fais la geston des droits avec un langages serveur qui me sert a écrire l'interface
Marsh Posté le 26-04-2008 à 17:30:05
flo850 a écrit : et des tables a moins d' un million de ligne, ca ne pose pas de problème si elles sont bien structurée et que tu utilise judicieusement les index |
Avec plus non plus, surtout qu'avec le table partitioning d'un postgres ou d'un oracle tu peux relativement facilement monter à quelques centaines de millions
Marsh Posté le 28-04-2008 à 11:51:37
flo850 a écrit : perso , je fais la geston des droits avec un langages serveur qui me sert a écrire l'interface |
Quel langage ? Tu peux m'en dire un peu plus ?
Marsh Posté le 28-04-2008 à 12:05:14
je fais ca en PHP
mais de toute manière , ta base de données va avoir une interface graphique, que ce soit une interface dans un navigateur ou via un client lourd . A toi de voir quelle interface tu veux mettre en place pour choisir quel langage utiliser
Marsh Posté le 28-04-2008 à 13:50:10
Je fais ca avec un client lourd, en Java.
Jsais pas trop par où commencer en fait..
Marsh Posté le 28-04-2008 à 14:32:54
pour un truc distribué sur plusieurs site, tu aurai peut être intérêt a regarder du cote du WEB
ça te compliquera le développement de l'interface, mais tu sera plus à l'aise par lal suite pour les mise à jour et l'installation
Marsh Posté le 29-04-2008 à 14:30:00
MagicBuzz a écrit : |
C'est quoi que t'appelles un gros serveur?
Marsh Posté le 29-04-2008 à 15:05:18
Un truc qui reste dans le commun des mortels à base de x86
(ceci dit, niveau quantité de mémoire, tu vas aussi vite arriver à saturation sur un dec alpha si tu commences à créer une base de données oracle par club...)
Marsh Posté le 29-04-2008 à 15:47:53
MagicBuzz a écrit : (ceci dit, niveau quantité de mémoire, tu vas aussi vite arriver à saturation sur un dec alpha si tu commences à créer une base de données oracle par club...) |
Ouais enfin des bestioles genre Sun Fire X4600, avec les options qui vont bien tu les montes à 256Go de RAM hein
Et la plus grosse config de base pour les T5240 c'est du 64Go de RAM, qui peut être monté à 128
Marsh Posté le 29-04-2008 à 20:42:15
256 Go de mémoire, quand tu veux je te la sature (ça va juste mettre un peu plus de temps )
Marsh Posté le 29-04-2008 à 20:46:45
MagicBuzz a écrit : 256 Go de mémoire, quand tu veux je te la sature (ça va juste mettre un peu plus de temps ) |
On rappelle ta déclaration initiale:
MagicBuzz a écrit : (ceci dit, niveau quantité de mémoire, tu vas aussi vite arriver à saturation sur un dec alpha si tu commences à créer une base de données oracle par club...) |
Marsh Posté le 29-04-2008 à 20:59:12
MagicBuzz a écrit : |
Tu tafe a aznetwork ??
Marsh Posté le 30-04-2008 à 08:16:53
masklinn a écrit :
Et la plus grosse config de base pour les T5240 c'est du 64Go de RAM, qui peut être monté à 128 |
le tout allouable et adressable par un seul processus d'un coup ?
Marsh Posté le 30-04-2008 à 11:58:11
0x90 a écrit : |
Je sais pas et j'en doute très fort, mais c'est pas des plus important dans le cadre dont on parlait.
Marsh Posté le 30-04-2008 à 14:02:35
ReplyMarsh Posté le 30-04-2008 à 15:03:22
juliuscesar a écrit : Je fais ca avec un client lourd, en Java. |
flo850 a écrit : pour un truc distribué sur plusieurs site, tu aurai peut être intérêt a regarder du cote du WEB |
Il peut aussi faire du Java Webstart, comme ça, il a l'avantage des deux mondes: un client lourd qu'il a déjà commencé à développer, et la MAJ instantanée, sans avoir à s'encombrer d'un serveur d'application Jboss/Tomcat.
Marsh Posté le 30-04-2008 à 15:28:21
el muchacho a écrit : |
En fait l'utilisateur veut aussi pouvoir bosser en étant déconnecté (après s'être connecté une première fois pour synchroniser les trucs de la base).
Ca pose pas de problème avec WebStart ?
Et avec un gros programme, ça marche bien ?
Marsh Posté le 30-04-2008 à 15:52:47
juliuscesar a écrit : |
Le programme est dans un espèce de cache fait exprès, il sera chargé que la première fois (et au démarrage si la connection marche, il va vérifier si y'a une nouvelle version et la télécharger le cas échéant).
Marsh Posté le 30-04-2008 à 18:00:10
el muchacho a écrit : |
A la limite, il peut aussi faire comme Oracle application : une bonne grosse applet de 400 Mo à télécharger quand tu te connectes au site
Marsh Posté le 30-04-2008 à 18:02:12
juliuscesar a écrit : |
Non, au contraire.
Par contre il faudra installer un SGBD en local, ce que ne permet pas Java Webstart à ma connaissance.
A moins que les données nécessaires soient "petites" et qu'il puisse faire comme j'ai fait sur un projet en C# : charger les données dans des DataSet (j'imagine qu'il y a l'équivalent en Java) et les sérialiser en XML. Ensuite tu peux t'en servir comme si c'était une vraie base de données, avec des performances honorables. La synchronisation avec la base mère se fait ensuite sans trop de difficultés.
Marsh Posté le 01-05-2008 à 06:36:10
juliuscesar a écrit : |
Oui, ça marche bien, si j'en juge par des applis de ce type que j'ai utilisées (un programme d'analyse de trading assez puissant sur le site Boursorama, et le petit logiciel de géométrie Géogebra. Essaye, ça te donnera une idée. Une fois que tu l'as lancé une fois, le logiciel est installé sur ton disque, et tu peux le lancer à partir de ton bureau en offline)
Marsh Posté le 01-05-2008 à 13:06:24
MagicBuzz a écrit : |
SQLite...
Marsh Posté le 09-04-2008 à 17:57:10
Bonjour,
Dans le cadre d'un stage, je dois faire une application permettant la gestion complète d'un club sportif.
Pour vous donner une idée des chiffres, j'estime avoir (en gros) :
- 50 clubs (un bon début, mais ça pourra facilement monter par la suite),
- 300 joueurs par club,
- 1000 entraînements par saison et par club,
- 100 matchs par saison et par club.
J'ai une bonne quarantaine de tables pour tout stocker (joueurs, entrainements, exercices, soins, matchs, etc)
Il faut savoir que les données de chaque club sont totalement distinctes.
Naturellement, j'ai pensé à créer une nouvelle base pour chaque club. Mais on m'a dit que niveau maintenance, ce serait pas super.
Si je mets tous les clubs dans la même base, ça va donner quelque chose d'énorme. Ca ne posera pas de gros problèmes au niveau du temps d'accès ?
C'est vrai que si je fais une base par client, je vais dupliquer n fois la structure des tables...
Concernant le nombre d'accès simultanés, est-ce que ça se joue au niveau d'une base ou d'un serveur ?
Et si la base crashe pour une raison ou pour une autre, tous les utilisateurs seront bloqués, alors qu'avec plusieurs bases ce sera pas moins pire ?
Si j'ai une grosse base avec tous les clubs, il va falloir que je stocke en plus à quel club appartient chaque joueur, entraînement, etc. Alors qu'avec une base par club, pas de confusion possible.
Je pense que ça peut aussi jouer selon le SGBD utilisé. Pour l'instant j'y ai pas encore réfléchi en détails. Tout ce que je sais, c'est qu'il faudra y accéder via internet avec un programme écrit dans un truc du genre Java.
Si vous pouviez m'aider ce serait vraiment pas mal, c'est dommage qu'on nous parle pas de ce genre de trucs en cours d'info, parce que c'est des problèmes très concrets et récurrents...
Merci d'avance
Message édité par juliuscesar le 09-04-2008 à 17:58:56