如何缩小数据库的大小



我有一个文件夹,里面有150多个txt文件。

组合数据

结果文件的大小为320 MB。我创建了一个数据库并插入组合数据:

with open("resall.TXT", "r") as f:
result = f.readlines()
result = [x.split(",") for x in result]
import sqlite3 as sq3
con = sq3.connect("popular.db")
con.execute(
"""
CREATE TABLE IF NOT EXISTS popname  (
id INTEGER PRIMARY KEY,
state TEXT,
sex TEXT,
year TEXT,
forename TEXT,
count INTEGER
);
"""
)
for i, (state, sex, year, forename, count) in enumerate(result):
con.execute(
"""
INSERT INTO popname VALUES (?, ?, ?, ?, ?, ?);
""",
(i, state, sex, year, forename, count.strip()),
)
con.commit()

我无法创建数据库,因为它太大了。如何缩小数据库的大小?

问题不是SQLite,而是导入脚本。SQLite可以轻松处理那么多数据,320 MB并没有那么大。

第一个问题是,您正在将所有320 MB的内存都拖入内存。相反,在行上迭代。

with open("resall.TXT", "r") as f:
for line in f:
rows = line.split(",")
// then insert

当您进行插入时,每次插入后提交都会使速度显著减慢。每次提交都会强制SQLite写入速度较慢的磁盘

相反,每隔1000行左右提交一次

for i, (state, sex, year, forename, count) in enumerate(rows):
con.execute(
"""
INSERT INTO popname VALUES (?, ?, ?, ?, ?, ?);
""",
(i, state, sex, year, forename, count.strip()),
)
if i % 1000 == 0:
con.commit()

然而,有一种更快的方法可以做到这一点。使用SQLite自己的内置导入程序。

  1. 在文件中添加标题行,确保它们与列名匹配
  2. 在SQLite外壳中打开数据库
  3. 创建您的表
  4. 将CSV文件导入表:.import /path/to/your/file.csv popname --csv

最新更新