base de donnée enorme sur pc classique

base de donnée enorme sur pc classique - SQL/NoSQL - Programmation

Marsh Posté le 20-12-2017 à 08:19:50    

bonjour,
 
je voulais faire un explorateur de blockchain from scratch.
Pour ce faire j'ai parsé toute la blockchain bitcoin et j'ai stocker les info dans une base sqlite.
 
Ma table qui contient les adresse existante fait 430 million de lignes (avec doublons)
je fais tourner ça sur un SSD sata3 et avec 16GB de ram.
 
j'ai voulu creer un index sur la collone des addresse mais la ram monte a 100% puis le pc freeze
j'ai esseyer de faire un select distinct pour ecrire une table mais au bout de 72h la base mouline toujours.
 
pour info une addresse est en base 58 et ressemble a ça :  1Hz96kJKF2HLPGY15JWLB5m9qGNxvt8tH
 
Est-il impossible de creer un index? je croyais que les bdd se debrouillait pour fonctionner quel que soit la machine.
Je suis en train de me demander si je ne devrais pas realiser ma propre solution de stockage :
 
1/
faire un fichier texte par addresse avec l'adresse en nom de fichier dans un dossier "btc_addr"
 
si j'ai besoin d'avoir les info du adresse j'ai juste a ouvrir le fichier (transaction effectué, etc).
si j'ai besoin de savoir si une adresse existe, j'ai juste a tester si le fichier existe
 
je ne m'y connais pas trop en BDD, quelque chose m"echappe?
 
Merci.

Reply

Marsh Posté le 20-12-2017 à 08:19:50   

Reply

Marsh Posté le 20-12-2017 à 08:30:50    

Pourquoi tu ne créé pas ton index avant de réaliser les insertions ?

Reply

Marsh Posté le 20-12-2017 à 08:36:54    

toute mes recherche indiquait qu'il fallait creer l'index apres l'insertion sinon il se fragmentait.
 
Du coup dumper la base en fichier texte, creer une base vide avec index et inserer dans la nouvelle base par paquet de 100 000 via python?

Reply

Marsh Posté le 20-12-2017 à 08:57:16    

C'est effectivement plus efficace de créer ton index après, le but de ma remarque était de te proposer une solution pour continuer à avancer dans ton projet.

Reply

Marsh Posté le 20-12-2017 à 09:54:54    

Si le PC complet freeze c'est qu'il est instable, rien à voir avec SQLite.
 
Et SQLite c'est pas idéal pour les bases énormes (comme tu dis toi même) donc utilise un SGBDR plus robuste.


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 20-12-2017 à 10:58:23    

Citation :


C'est effectivement plus efficace de créer ton index après, le but de ma remarque était de te proposer une solution pour continuer à avancer dans ton projet.


 
oui j'entend bien, mais quel est l'impact de creer un index avant d'inserer 430 million de ligne? l'index reste t-il utile?
 

Citation :


Si le PC complet freeze c'est qu'il est instable, rien à voir avec SQLite.  
 
Et SQLite c'est pas idéal pour les bases énormes (comme tu dis toi même) donc utilise un SGBDR plus robuste.


Je vais faire passer un memtest alors.
Passer sous MySql?

Reply

Marsh Posté le 20-12-2017 à 11:08:29    

Essaye une base de données un peu plus costaud : mysql/postgresql

 

efféctivement, il vaux mieux désactiver les index lors de gros insert et les réactiver ensuite. Si tu le laisse actif, l'insertion est beaucoup plus lente

Message cité 1 fois
Message édité par flo850 le 20-12-2017 à 11:08:52

---------------

Reply

Marsh Posté le 20-12-2017 à 11:36:33    

sliders_alpha a écrit :


Citation :


Si le PC complet freeze c'est qu'il est instable, rien à voir avec SQLite.  
 
Et SQLite c'est pas idéal pour les bases énormes (comme tu dis toi même) donc utilise un SGBDR plus robuste.


Je vais faire passer un memtest alors.
Passer sous MySql?


memtest et burnin CPU de ton choix (OCCT, etc).
Concernant le SGBDR MySQL, SQL Server, posgre ou n'importe quoi.
OSEF tant que c'est gratuit et que tu sais t'en servir. SQL Server la version gratos limite la taille de la bdd à 10Go de mémoire.
 


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 21-12-2017 à 10:03:31    

flo850 a écrit :

Essaye une base de données un peu plus costaud : mysql/postgresql  
 
efféctivement, il vaux mieux désactiver les index lors de gros insert et les réactiver ensuite. Si tu le laisse actif, l'insertion est beaucoup plus lente


Sur Mysql, je confirme, le fait de laisser l'index lors de l'insert influe beaucoup sur les perfs.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 30-12-2017 à 14:14:38    

Oui, avec 430 millions il faudra quelques jours :D

Reply

Marsh Posté le 30-12-2017 à 14:14:38   

Reply

Marsh Posté le 31-12-2017 à 15:23:13    

Tu stoques quoi dans ta base ? Tu veux indexer que les adresses ? Si c'est le cas pars plutôt sur autre chose qu'un sgbd par exemple leveldb ou un truc du genre serait peut-être plus adapté ?


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed