SQLITE - файл с 5 000 000 значений TINYINT? - PullRequest
2 голосов
/ 28 марта 2011

Я хотел бы создать файл SQLITE, который содержит 5 000 000 значений tinyint (от 0 до 256). Согласно моим расчетам, этот файл должен использовать примерно 5 [МБ].

Тем не менее, я получаю файл размером ближе к 50 [МБ].

Вот код, который я использую:

import sqlite3
# Create and populate a database
db = sqlite3.connect('/home/mine/temp.db')
db.execute("CREATE TABLE IF NOT EXISTS test(id INT2)")
for i in range(0, 5000000):
     db.execute("INSERT INTO test(id) VALUES({0})".format(0))
db.commit()
db.close()

Есть идеи, как оптимизировать вещи, чтобы они занимали гораздо меньше места?

Ответы [ 2 ]

6 голосов
/ 28 марта 2011

В базе данных гораздо больше, чем просто место для 5 миллионов крошечных целых. SQLite опубликовал подробности своего формата файлов . Похоже, вам понадобится как минимум 9 байтов на строку.

SQLite использует два различных варианта структура B-Tree:

  • Таблица B-Tree, в которой используется 64-битная целочисленные значения для ключей. В таблице B-Tree, связанная запись базы данных (раздел 2.3.2) хранится вместе с каждая запись. Таблица B-Tree структуры подробно описаны в разделе 2.3.4.
  • Индекс B-Tree, который использует записи базы данных в качестве ключей. Индекс B-Tree структуры подробно описаны в раздел 2.3.3.
2 голосов
/ 09 июня 2011

Рассматривали ли вы использование таблицы столбцов «Значение / частота»?Это сделало бы запросы немного более сложными (например, вам нужно SUM(Value * Freq) / SUM(Freq) вместо AVG(Value)), но вам нужно всего 256 строк вместо 5 миллионов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...