database - une - transfert gros fichier free




Quelles sont les caractéristiques de performance de sqlite avec de très gros fichiers de base de données? (6)

Je sais que sqlite ne fonctionne pas bien avec des fichiers de base de données extrêmement volumineux même lorsqu'ils sont supportés (il y avait un commentaire sur le site Web sqlite indiquant que si vous avez besoin de fichiers de plus de 1 Go, vous pouvez utiliser un rdbms d'entreprise. ne le trouve plus, pourrait être lié à une ancienne version de sqlite).

Cependant, à mes fins, j'aimerais avoir une idée de la gravité de la situation avant d'envisager d'autres solutions.

Je parle de fichiers de données sqlite dans la gamme de plusieurs gigaoctets, à partir de 2 Go. Quelqu'un a-t-il une expérience avec ceci? Des astuces / idées?


Il y avait une déclaration dans la documentation SQLite que la limite de taille pratique d'un fichier de base de données était de quelques dizaines de Go: s. Cela était principalement dû à la nécessité pour SQLite "d'allouer une bitmap de pages sales" chaque fois que vous avez commencé une transaction. Ainsi, 256 octets de RAM étaient nécessaires pour chaque Mo dans la base de données. L'insertion dans un fichier DB de 50 Go nécessiterait un poids lourd (2 ^ 8) * (2 ^ 10) = 2 ^ 18 = 256 Mo de RAM.

Mais à partir des versions récentes de SQLite, ce n'est plus nécessaire. Lire la suite here .


J'ai créé des bases de données SQLite d'une taille maximale de 3,5 Go sans problèmes de performances perceptibles. Si je me souviens bien, je pense que SQLite2 aurait pu avoir des limites inférieures, mais je ne pense pas que SQLite3 ait de tels problèmes.

Selon la page Limites SQLite , la taille maximale de chaque page de base de données est de 32 Ko. Et le nombre maximal de pages dans une base de données est 1024 ^ 3. Donc, par mes calculs, la taille maximale est de 32 téraoctets. Je pense que vous atteindrez les limites de votre système de fichiers avant de cliquer sur SQLite!


J'ai rencontré des problèmes avec de grands fichiers sqlite lors de l'utilisation de la commande vacuum.

Je n'ai pas encore essayé la fonction auto_vacuum. Si vous prévoyez de mettre à jour et de supprimer des données souvent, cela vaut la peine d'être consulté.


J'ai une base de données SQLite de 7 Go. Pour effectuer une requête particulière avec une jointure interne prend 2.6s Afin d'accélérer cela, j'ai essayé d'ajouter des index. En fonction de l'index (s) que j'ai ajouté, parfois la requête est descendue à 0,1s et parfois elle va jusqu'à 7s. Je pense que le problème dans mon cas était que si une colonne est fortement dupliquée alors l'ajout d'un index dégrade la performance :(


Nous utilisons DBS de 50 Go + sur notre plateforme. Aucune plainte fonctionne très bien. Assurez-vous de bien faire les choses! Utilisez-vous des instructions prédéfinies? * SQLITE 3.7.3

  1. Transactions
  2. Déclarations pré-faites
  3. Appliquez ces paramètres (juste après avoir créé la base de données)

    PRAGMA main.page_size = 4096;
    PRAGMA main.cache_size=10000;
    PRAGMA main.locking_mode=EXCLUSIVE;
    PRAGMA main.synchronous=NORMAL;
    PRAGMA main.journal_mode=WAL;
    PRAGMA main.cache_size=5000;
    

J'espère que cela aidera les autres, fonctionne bien ici


Outre la recommandation habituelle:

  1. Drop index pour l'insertion en vrac.
  2. Insertions par lots / mises à jour dans les grandes transactions.
  3. Réglez votre cache tampon / désactiver journal / w PRAGMAs.
  4. Utilisez une machine 64 bits (pour pouvoir utiliser beaucoup de cache ™).
  5. [ajouté en juillet 2014] Utilisez l'expression de table commune (CTE) au lieu d'exécuter plusieurs requêtes SQL! Nécessite la version SQLite 3.8.3.

J'ai appris ce qui suit de mon expérience avec SQLite3:

  1. Pour une vitesse d'insertion maximale, n'utilisez pas de schéma avec une contrainte de colonne. ( Modifier la table plus tard si nécessaire Vous ne pouvez pas ajouter de contraintes avec ALTER TABLE).
  2. Optimisez votre schéma pour stocker ce dont vous avez besoin. Parfois, cela signifie briser des tables et / ou même compresser / transformer vos données avant de les insérer dans la base de données. Un bon exemple est de stocker des adresses IP en tant que entiers (longs).
  3. Un tableau par fichier db - pour minimiser les conflits de verrous. (Utilisez ATTACH DATABASE si vous voulez avoir un seul objet de connexion.
  4. SQLite peut stocker différents types de données dans la même colonne (typage dynamique), utilisez-le à votre avantage.

Question / commentaire bienvenue. ;-)





sqlite