Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3785 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

Enorme BD : 2 Millions de lignes/jour

n°1384330
pospos
Posté le 09-06-2006 à 10:57:36  profilanswer
 

Reprise du message précédent :
dommage que l'auteur du topic ne poste plus, c'etait un sujet interessant...

mood
Publicité
Posté le 09-06-2006 à 10:57:36  profilanswer
 

n°1384414
cinocks
Posté le 09-06-2006 à 12:15:34  profilanswer
 

tania_j a écrit :

Une procédure stockée construit en quelques sortes la/les requetes suivant les parametres que tu lui files; y'a donc ostensiblement un peu plus de CPU a utiliser qu'une requete simple (mais neanmoins optimisée) balancée a la bd. Tu vois mon raisonnement ou pas ?


 
Une procédure stockée consomme, au contraire, moins de ressource au serveur de données. Ca ne sera pas plus rapide sur l'execution de la requete à proprement parlé. Mais le moteur n'a pas besoin de refaire à chaque execution l'analyse syntaxique, verifier l'existence des sources et champs, la validité de la requete, et le plan d'execution à adopter. Il le sait dejà. C'est là que ca consomme moins de ressource.
 
C'est d'autant plus vrai que la requete est rapide en execution.


---------------
MZP est de retour
n°1384497
pospos
Posté le 09-06-2006 à 14:06:20  profilanswer
 

à mon sens la tu parle de prepare statements et non de procedures stockées

n°1384505
cinocks
Posté le 09-06-2006 à 14:11:25  profilanswer
 

Non de procedures stockées comme tu peux en trouver sous sybase, oracle, ou sql server.


---------------
MZP est de retour
n°1384525
pospos
Posté le 09-06-2006 à 14:25:03  profilanswer
 

ok je ne connais pas bien ces sytemes.
pour moi un prepare statement (au sens mysql ou postgres, mais il me semblait que c'etait un truc plus standard que ca, car c'est par exemple une methode de DBI, le driver base de donnée de perl) c'est justement le fait de permettre au moteur d'alayser une bonne fois la requete (parsing SQL, optimization, indexes à utiliser, etc...) puis ensuite d'utiliser cette requete "précompilée" autant de fois que necessaire avec des données differentes.
Au contraire une procedure stockée est à mon sens un bout de logique qu'on va mettre à l'interieur de la base de donnée, comme par exemple un traitement particulier sur les données. En ce sens, j'aurais presque envi de considerer les fonctions genre average ou meme les autoincrement comme des sortes de procedures stockées "standards" (des sortes de presets), et d'ailleus si je ne me trompe en Oracle un autoincrement n'est rien d'autre qu'une procedure stockée en trigger qui va incrementer une sequence.


Message édité par pospos le 09-06-2006 à 14:26:11
n°1384722
cinocks
Posté le 09-06-2006 à 16:29:22  profilanswer
 

le prepared statement, c'est juste de définir un moule de requete où la structure est faite. Il n'y a plus que les cases de valeur à remplir. Un truc du genre:
 
la requete toto est  
 

Code :
  1. SELECT * FROM matable WHERE champ1= :1 AND champ2 = :2


 
et on appelle toto par
 

Code :
  1. toto(10, 'maison')


 
Le moteur remplace les valeurs dans les bonnes cases. Du coup la requete est analysée et, il me semble, que c'est plus fiable que de passer le code SQL en live. Ca evite de faire de injection SQL dans les parametres.
 
La procédure stockée offre une plus grande programmation autour du SQL. On peut faire la requete toto en procédure stockée avec un truc du style:
 

Code :
  1. CREATE PROCEDURE toto (val1 integer, val2 char(10))
  2. IS
  3. SELECT * FROM matable WHERE champ1 =val1 AND champ2 = val2;
  4. END


Bon l'écriture n'est pas bonne :D c'est simplifié.
 
Là on aurait le même résultat que le prepared statement. Par contre, dans la procédure, rien ne t'empeche de tartiner 10 000 lignes de code, dont des focntionnalités que tu ne pourras utiliser qu'en proc. Elles ne sont plus de l'ordre de la norme SQL.
 
Ensuite, je ne sais pas si les prepared statement sont compilées à l'avance? Ou seulement analysée par avance.


---------------
MZP est de retour
n°1384737
pospos
Posté le 09-06-2006 à 16:49:11  profilanswer
 

ils sont compilés (SQL parsé, indexes choisis, etc...) pour les version "recentes" (genre 4) de Mysql par exemple (et je pense pour les autres  bases aussi)
 
Par exemple dans DBI (le driver universel de base de donnée pour perl) tu a une interface prepare et chaque driver specifique (mysql, pg,...) peut on nous l'implementer.
Si il ne la réimplemente pas (c'est à dire si sont moeur ne sait pas en tirer profit) alors ca permet deja, comme tu le dis, de quoter proprement les valeurs au lieu de les foutre comme un porcs dans le SQL et ainsi eviter les erreurs.
 
Il faudrait que je regardes les differents DBD (drivers specifiques pour chaque base de donnée, pour DBI) pour voir lequels implementent cette methode. Pour Mysql c'est sur et pour pg il me semble aussi.
Le gain en vitesse est tellement important en utilisant cette fonction que je pense que la plupart des "grosses" sgbd l'implementent


Message édité par pospos le 09-06-2006 à 16:52:55
n°1384751
gizmo
Posté le 09-06-2006 à 17:05:29  profilanswer
 

En fait, un prepared statement est une procédure stockée en SQL dont la durée de vie est limitée. Généralement à la durée de la session.

n°1384791
cinocks
Posté le 09-06-2006 à 17:40:34  profilanswer
 

on ne peut pas faire des prepared statement definitif. Je ne vois pas trop l'interet de la chose du coup si ca ne sort pas de la session. A moins de l'utiliser enormement de fois. Ce qui risque de ne pas etre le cas pour un site web.


---------------
MZP est de retour
n°1384795
masklinn
í dag viðrar vel til loftárása
Posté le 09-06-2006 à 17:42:52  profilanswer
 

cinocks a écrit :

on ne peut pas faire des prepared statement definitif. Je ne vois pas trop l'interet de la chose du coup si ca ne sort pas de la session. A moins de l'utiliser enormement de fois. Ce qui risque de ne pas etre le cas pour un site web.


Automatiser l'échappement des données injectées (parce que je veux pas être méchant mais les conneries genre mysql_real_escape_string hein [:kiki]) et cacher temporairement les queries simples.
 
Une procédure stockée c'est pas une query simple, c'est pas du SQL et ça génère des traitements complexes (voir très complexes)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
mood
Publicité
Posté le 09-06-2006 à 17:42:52  profilanswer
 

n°1385029
cinocks
Posté le 10-06-2006 à 11:49:25  profilanswer
 

Non ce n'est pas ce que je voulais dire. Je lis qu'une prepared statement a une durée de vie limitée à la session. Je le comprend comme: il faut la declarer à chaque session pour pouvoir l'utiliser ensuite. Si c'est le cas, je ne vois pas l'interet.  
 
Bien que je pense que le prepared statement est déclaré une fois pour toute. Sinon je ne vois pas l'interet.


---------------
MZP est de retour
n°1385349
gizmo
Posté le 11-06-2006 à 11:01:49  profilanswer
 

Non, il n'est pas déclaré une fois pour toute. Par contre, si tu ne vois pas son intérêt, c'est ton problème.

n°1385368
cinocks
Posté le 11-06-2006 à 12:04:57  profilanswer
 

On va rester calme stp. Je ne vois pas l'interet de devoir redeclarer une structure a chaque session. A moins que de ne pas avoir la bonne notion de session. Est-ce qu'un appel d'une page PHP avec connexion à MySQL est une session? Si c'est le cas, tu vas devoir redeclarer le prepared statement que tu utilises à chaque appel de page. Je ne pense pas que sur une page on appel plusieurs fois la même requete. D'où le fait que je ne vois pas l'interet. Hormis le coté securité bien sur.


---------------
MZP est de retour
n°1385373
masklinn
í dag viðrar vel til loftárása
Posté le 11-06-2006 à 12:12:02  profilanswer
 

cinocks a écrit :

On va rester calme stp. Je ne vois pas l'interet de devoir redeclarer une structure a chaque session.


Pouvoir l'utiliser plusieurs fois par session sans avoir besoin de la redéfinir [:petrus dei]
 
Non parce que je ne sais pas si tu te rends compte, mais quand tu effectues des requêtes sur la DB sans prepared statements tu ne les redéfinis pas une fois par session mais une fois par requête [:freekill]
 
En plus j'ai l'impression que tu vois la création d'un prepared statement comme un truc gigantesque alors que c'est à peu près aussi contraignant que l'exécution d'une requête classique [:pingouino]


Message édité par masklinn le 11-06-2006 à 12:12:50

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1385375
cinocks
Posté le 11-06-2006 à 12:17:48  profilanswer
 

Non, je ne vois pas la chose comme etant un truc gigantesque. L'usage que j'ai de MySQL est pour du WEB et rien d'autre. Il faut dejà avoir besoin d'executer plusieurs fois la même requete lors de la construction d'une page. Ce que je n'ai jamais.
 
Par contre, j'ai un peux zappé le but du topic. Je n'ai vu l'interet des prepared statement que dans mon cas. :D


---------------
MZP est de retour
n°1385377
masklinn
í dag viðrar vel til loftárása
Posté le 11-06-2006 à 12:20:28  profilanswer
 

cinocks a écrit :

Il faut dejà avoir besoin d'executer plusieurs fois la même requete lors de la construction d'une page.


Ou ne pas vouloir se briser les couilles à échapper manuellement chaque donnée injectée à coup de mysql_real_escape_string...
 
Enfin bon le problème n'existe qu'en PHP dans la mesure où c'est l'un des rares langages assez mal foutus pour offrir quelque chose d'autre que des prepared statements dans ses interfaces de DBs, et à forcer à injecter manuellement ses valeurs dans ses requêtes [:pingouino]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1385379
cinocks
Posté le 11-06-2006 à 12:23:44  profilanswer
 

je sais pas, mais je me casse pas le cul a tout verifier. J'ai une classe qui fait le boulot pour moi. Apres, je suis d'accord pour l'aspect sécurité de la chose. C'est d'ailleurs le seul interet que j'y vois avec du PHP.


---------------
MZP est de retour
n°1396373
Nikosinus
Tu aimes les glaces, canard ?
Posté le 28-06-2006 à 11:08:12  profilanswer
 

Tout d'abord merci à tout ceux qui ont répondu.
J'ai cherché comment gérer autant données, et je suis arrivé à quelques conclusions :
-je suis toujours avec MySQL, et j'ai voulu tester la montée en charge. J'ai donc mis 200 Millions de lignes dans une table avec des valeurs aléatoires pour les 18 champs de cette table. J'ai testé beaucoup de requêtes avec retour unique (COUNT, SUM, AVG...). Sans avoir défini d'index, le temps de recherche est extrêmement long. Par contre, avec un index défini sur 16 champs (16 est le maximum), on arrive à un temps tout-à-fait correcte voisin du dixième de seconde (!). MySQL est vraiment extraordinaire !
-Mais le problème est essentiellement lié à la sécurité : en effet, toutes les données sont stockées dans un fichier de 4 Go, et tous les index pareil dans un fichier de 4 Go, ce qui est assez dangereux. De plus, lors de la mise en base, il ne faut garder que l'index PRIMARY, et recréer les INDEX à chaque ajout de données. Problème : à chaque session d'ajout de données, je dois donc le supprimer (20 Min) et le recréer (20 Min). Donc beaucoup trop coûteux en temps. De plus, j'ai testé avec 200 Millions de lignes, mais quid de 1 Milliard de lignes ?
-Finallement, j'ai trouvé une solution qui colle parfaitement à mon problème. Comme je dois faire des statistiques journalières, j'ai tout simplement créé une table par jour qui contiendra 2 Millions de lignes.
Ma base MySQL contiendra donc 365 tables de 2 Millions de lignes, et je suis gagnant sur toute la ligne : rapidité, sécurité, insertion des données, etc.
J'espère avoir été assez clair, n'hésitez pas si vous avez des questions.
Merci encore à tout ceux qui ont répondu, et je continuerai à faire part de mes recherches dans ce domaine.

n°1396407
Hermes le ​Messager
Breton Quiétiste
Posté le 28-06-2006 à 11:36:31  profilanswer
 

Nikosinus a écrit :

Tout d'abord merci à tout ceux qui ont répondu.
J'ai cherché comment gérer autant données, et je suis arrivé à quelques conclusions :
-je suis toujours avec MySQL, et j'ai voulu tester la montée en charge. J'ai donc mis 200 Millions de lignes dans une table avec des valeurs aléatoires pour les 18 champs de cette table. J'ai testé beaucoup de requêtes avec retour unique (COUNT, SUM, AVG...). Sans avoir défini d'index, le temps de recherche est extrêmement long. Par contre, avec un index défini sur 16 champs (16 est le maximum), on arrive à un temps tout-à-fait correcte voisin du dixième de seconde (!). MySQL est vraiment extraordinaire !
-Mais le problème est essentiellement lié à la sécurité : en effet, toutes les données sont stockées dans un fichier de 4 Go, et tous les index pareil dans un fichier de 4 Go, ce qui est assez dangereux. De plus, lors de la mise en base, il ne faut garder que l'index PRIMARY, et recréer les INDEX à chaque ajout de données. Problème : à chaque session d'ajout de données, je dois donc le supprimer (20 Min) et le recréer (20 Min). Donc beaucoup trop coûteux en temps. De plus, j'ai testé avec 200 Millions de lignes, mais quid de 1 Milliard de lignes ?
-Finallement, j'ai trouvé une solution qui colle parfaitement à mon problème. Comme je dois faire des statistiques journalières, j'ai tout simplement créé une table par jour qui contiendra 2 Millions de lignes.
Ma base MySQL contiendra donc 365 tables de 2 Millions de lignes, et je suis gagnant sur toute la ligne : rapidité, sécurité, insertion des données, etc.
J'espère avoir été assez clair, n'hésitez pas si vous avez des questions.
Merci encore à tout ceux qui ont répondu, et je continuerai à faire part de mes recherches dans ce domaine.


 
[blague]
 
On a trouvé le web-looser d'IGN.  
 
[/blague]

n°1396414
Nikosinus
Tu aimes les glaces, canard ?
Posté le 28-06-2006 à 11:41:04  profilanswer
 

[Re-blague]
Il dit qu'il voit pas le rapport.
[/Re-blague]
 
Merci pour le compliment, mais j'ai pas la prétention de bosser chez IGN

n°1396417
Hermes le ​Messager
Breton Quiétiste
Posté le 28-06-2006 à 11:42:34  profilanswer
 

Nikosinus a écrit :

[Re-blague]
Il dit qu'il voit pas le rapport.
[/Re-blague]
 
Merci pour le compliment, mais j'ai pas la prétention de bosser chez IGN


 
dommage [:spamafote]  
 

n°1396594
Tamahome
⭐⭐⭐⭐⭐
Posté le 28-06-2006 à 14:36:10  profilanswer
 

Nikosinus a écrit :

Qu'est ce que je dois utiliser ?


 
oublie DB2 aussi, sauf si tu as un mainframe a disposition.
 
Reste SQL Server ou Oracle.


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1396619
Nikosinus
Tu aimes les glaces, canard ?
Posté le 28-06-2006 à 15:12:17  profilanswer
 

Tamahome a écrit :

oublie DB2 aussi, sauf si tu as un mainframe a disposition.
 
Reste SQL Server ou Oracle.


 
... ou encore MySQL qui a l'avantage d'être gratuit. Quand à SQL Server, il paraît que c'est vraiment pas une bonne idée quand il y a une grande quantité de données.
Par contre pour Oracle, je sais pas trop...

n°1396626
Tamahome
⭐⭐⭐⭐⭐
Posté le 28-06-2006 à 15:23:11  profilanswer
 

Si SQL Server ne convient pas, alors mySQL non plus ne conviendra pas... ce n'est pas parce que c'est gratuit que c'est mieux hein :heink:
Bien au contraire...


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1396628
cinocks
Posté le 28-06-2006 à 15:24:42  profilanswer
 

Ce n'est pas parce que c'est payant qu'on est sur d'avoir un outils meilleur. Bien au contraire.


---------------
MZP est de retour
n°1396639
Nikosinus
Tu aimes les glaces, canard ?
Posté le 28-06-2006 à 15:46:01  profilanswer
 

Les deux théories se valent. Quand on regarde Linux et le nombre de développeurs qui y ont participé, on comprends pour cet OS est si efficace.
Dans la même idée, je pense que MySQL vaut largement, voire mieux que ses collègues payants.

n°1396644
gizmo
Posté le 28-06-2006 à 15:49:48  profilanswer
 

Nikosinus a écrit :


Dans la même idée, je pense que MySQL vaut largement, voire mieux que ses collègues payants.


Clairement pas :/ La v5 commence à ressembler à un vrai RDBMS, mais c'est loin d'être la panacée.

n°1396647
Hermes le ​Messager
Breton Quiétiste
Posté le 28-06-2006 à 15:52:35  profilanswer
 

gizmo a écrit :

Clairement pas :/ La v5 commence à ressembler à un vrai RDBMS, mais c'est loin d'être la panacée.


 
mwouai... Pas sûr que ce soit mieux chez les concurrents payants... Quand on voit les problèmes avec oracle et les dernières statistiques le concernant... :/

n°1396650
cinocks
Posté le 28-06-2006 à 15:57:26  profilanswer
 

Nikosinus a écrit :

Les deux théories se valent. Quand on regarde Linux et le nombre de développeurs qui y ont participé, on comprends pour cet OS est si efficace.
Dans la même idée, je pense que MySQL vaut largement, voire mieux que ses collègues payants.


Je doute que MySQL soit assez mature que ses homologues. Mais il est assez naif de penser que payant implique de qualité.


---------------
MZP est de retour
n°1396655
Hermes le ​Messager
Breton Quiétiste
Posté le 28-06-2006 à 16:05:19  profilanswer
 

cinocks a écrit :

Je doute que MySQL soit assez mature que ses homologues. Mais il est assez naif de penser que payant implique de qualité.


 
Payant ou gratuit, le problème n'est absolument pas là. Open source ou non open-source par contre, ça peut changer bien des choses, surtout quand on parle de programmes utilisés dans des millions de conditions différentes. En effet, une équipe aussi compétente et bien foutue soit-elle, n'a jamais les ressources pour gérer tous les imprévus alors que lorsque le programme est en open-source, n'importe quel progreux peut voir ce qui cloche en fonction de son utilisation. [:spamafote]
 
C'est pour cela que pour des applications comme des OS ou des BDD, je trouve moi très bien que ce soit en open-source, c'est assurément un avantage. Que la couche graphique d'OSX ne soit pas libre, à la limite on s'en fout, que le système de base le soit, c'est tout de suite bien mieux.  

n°1396702
Tamahome
⭐⭐⭐⭐⭐
Posté le 28-06-2006 à 16:52:40  profilanswer
 

mouais, en open source t'as ptet 20 000 coder dans leur coins mais t'auras 20 000 versions aussi...


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1396758
masklinn
í dag viðrar vel til loftárása
Posté le 28-06-2006 à 17:51:15  profilanswer
 

Tamahome a écrit :

mouais, en open source t'as ptet 20 000 coder dans leur coins mais t'auras 20 000 versions aussi...


wtf [:petrus dei]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1396762
Hermes le ​Messager
Breton Quiétiste
Posté le 28-06-2006 à 17:56:57  profilanswer
 

Tamahome a écrit :

mouais, en open source t'as ptet 20 000 coder dans leur coins mais t'auras 20 000 versions aussi...


 
Plait-il ??
 
T'es un rigolo toua.  :o  

n°1396800
cinocks
Posté le 28-06-2006 à 18:37:29  profilanswer
 

Tamahome a écrit :

mouais, en open source t'as ptet 20 000 coder dans leur coins mais t'auras 20 000 versions aussi...


Tu ne dois pas maitriser tous les concepts. Vois-tu 20 000 versions de MySQL se balader en ce moment :??:


---------------
MZP est de retour
n°1397066
masklinn
í dag viðrar vel til loftárása
Posté le 29-06-2006 à 11:06:38  profilanswer
 

cinocks a écrit :

Tu ne dois pas maitriser tous les concepts. Vois-tu 20 000 versions de MySQL se balader en ce moment :??:


ou 20000 forks du noyal linux, ou d'apache, ou de PostgreSQL, ou d'Adium, ou de Kopete, ou de Gnome, ou de Xorg, ou de...


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1397182
Tamahome
⭐⭐⭐⭐⭐
Posté le 29-06-2006 à 13:48:28  profilanswer
 

vous etes mignons :)


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1397195
cinocks
Posté le 29-06-2006 à 13:55:52  profilanswer
 

tu te defend bien :o


---------------
MZP est de retour
n°1397275
Hermes le ​Messager
Breton Quiétiste
Posté le 29-06-2006 à 15:57:18  profilanswer
 

Tamahome a écrit :

vous etes mignons :)


 
merci, pas toi. [:itm]  :hello:

n°1397302
Tamahome
⭐⭐⭐⭐⭐
Posté le 29-06-2006 à 16:31:27  profilanswer
 


 
ah, une attaque ad hominem....


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1397349
esox_ch
Posté le 29-06-2006 à 17:28:18  profilanswer
 

Je pense que Tamahome se refère un peu au phénomène "mon mien il est mieux que ton tien" souvent assez en vogue parmis les linuxiens ... Notamment le fait d'avoir X types differents de gestionnaires de bureau, messagerie,... Parcontre je comprend pas vraiment en quoi c'est un problème :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1397687
orafrance
Posté le 30-06-2006 à 09:11:39  profilanswer
 

Nikosinus a écrit :

Quand à SQL Server, il paraît que c'est vraiment pas une bonne idée quand il y a une grande quantité de données.


 
bah parle pas de MySQL dans ce cas :D
 
Sinon, cela n'est plus vrai, M$ a rattrapé son retard par rapport à Oracle ;)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
Probleme lors mise a jour de textarea : encodage ?nombre de lignes et de colonnes d'un range
Mise à jour d'un champ[résolu] demande traduction francais-->php (trois lignes SIMPLES)
SELECT de la date la plus proche du jour actuelcomment mettre à jour une page en php?
en cliquant sur une image mise à jour de la BDDMise à jour du contenu d'un tableau JTable
Séparer les colonnes d'une listbox par des lignes?Mise à jour de mon RTE (rich texte editor)
Plus de sujets relatifs à : Enorme BD : 2 Millions de lignes/jour


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)