2009-10-10 8 views
21

Donnez une simple table sqlite3 (create table data (key PRIMARY KEY,value)) avec une taille de clé de 256 octets et une valeur de 4096 octets, quelle est la limite (en ignorant les limites d'espace disque) sur le nombre maximal de lignes dans cette table sqlite3 table? Sont leurs limites associées à OS (win32, Linux ou Mac)Nombre maximal de lignes dans une table sqlite

Répondre

2

essentiellement aucune limite réelle

voient http://www.sqlite.org/limits.html pour plus de détails

+2

Les limites pratiques pour les lignes [ont été mises à jour] (http://stackoverflow.com/a/9456705/462302) pour être mieux définies. Même quand ils n'étaient pas bien définis, il y avait toujours de vraies limites même si "SQLite a été conçu à l'origine avec une politique d'éviter les limites arbitraires ... Malheureusement, la politique de non-limites a été montrée pour créer des problèmes. n'étaient pas bien définis, ils n'étaient pas testés, et des bugs (y compris d'éventuels exploits de sécurité) ont souvent été trouvés en poussant SQLite à l'extrême. " – aculich

4

La réponse que vous voulez is right here. Chaque système d'exploitation que vous avez mentionné prend en charge plusieurs types de système de fichiers. Les limites réelles seront par système de fichiers, pas par OS. Il est difficile de résumer la matrice de contraintes sur SO, mais alors que certains systèmes de fichiers imposent des limites sur la taille des fichiers, tous les principaux noyaux d'OS supportent aujourd'hui un système de fichiers avec des fichiers extrêmement volumineux.

La taille de page maximale d'un sqlite3 db est assez grande, 2^32768, bien que cela nécessite une certaine configuration. Je suppose qu'un index doit spécifier un numéro de page mais le résultat est susceptible d'être une limite de système d'exploitation ou d'environnement est atteinte en premier.

0

Pas de limites, mais au fond, après un certain point la base de données SQLite deviendra inutile. PostgreSQL est la meilleure base de données gratuite BY FAR pour les bases de données énormes. Dans mon cas, il s'agit d'environ 1 million de lignes sur mon ordinateur Linux Dual Core Dual Processor 64 bits avec 8 Go de RAM et de disques durs Raptor. PostgreSQL est imbattable, même avec une base de données MySQL ajustée. (Publié en 2011).

+8

1 million de lignes n'est * pas * une table énorme, grande peut-être, mais pas énorme. – Ryaner

22

À partir de janvier 2017 le sqlite3 limits page définit les limites pratiques à cette question en fonction de la taille maximale de la base de données est de 140 téraoctets:

Nombre maximum de lignes dans un tableau

Le le nombre maximum théorique de lignes dans un tableau est de 2^64 (18446744073709551616 ou environ 1,8e + 19). Cette limite est inaccessible car la taille maximale de la base de données de 140 téraoctets sera atteinte en premier. Une base de données de 140 téraoctets ne peut contenir plus d'environ 1e + 13 lignes, et seulement s'il n'y a pas d'index et si chaque ligne contient très peu de données.

Donc, avec une taille de base de données maximum de 140 téraoctets vous auriez la chance d'avoir ~ 1 billion de lignes car si vous aviez fait une table utile avec les données qu'il contient le nombre de lignes serait limitée par la taille de la Les données. Vous pourriez probablement avoir jusqu'à 10s de milliards de lignes dans une base de données de 140 To.

+1

Était en train de lire la documentation ... 1.4e + 14 octets (140 téraoctets), mais la limite de taille réelle est les limites de taille de fichier du système d'exploitation sous-jacent, ce qui est beaucoup plus faible. – BonanzaDriver

+1

@aculich, Ceci est une réponse théorique qui n'a pas d'utilité ** en pratique **. Pour une réponse pratique que les programmeurs pratiques écrivant des applications pratiques voudraient pratiquement savoir dans la pratique, s'il vous plaît lire http://stackoverflow.com/q/784173/632951 – Pacerier

9

J'ai une base de données SQLite de 3,3 Go de taille avec 25 millions de rangées de journaux numériques stockés et de faire des calculs sur eux, cela fonctionne vite et bien.

5

J'ai une base de données SQLite de 7,5 Go qui stocke 10,5 millions de lignes. L'interrogation est rapide tant que vous avez des index corrects. Pour que les insertions s'exécutent rapidement, vous devez utiliser des transactions. En outre, j'ai trouvé qu'il est préférable de créer les index après toutes les lignes ont été insérées. Sinon, la vitesse d'insertion est assez lente.

Questions connexes