当前位置: 首页 > 面试题库 >

python和sqlite3的插入性能

拓拔高畅
2023-03-14
问题内容

我正在向SQLite3数据库中进行大批量插入,并且试图了解我应该期望的性能与实际看到的性能之间的关系。

我的桌子看起来像这样:

cursor.execute(
            "CREATE TABLE tweets(
             tweet_hash TEXT PRIMARY KEY ON CONFLICT REPLACE,
             tweet_id INTEGER,
             tweet_text TEXT)"
        )

和我的插入看起来像这样:

cursor.executemany("INSERT INTO tweets VALUES (?, ?, ?)", to_write)

to_write元组列表在哪里。

目前,50 000在一台2008年的Macbook上运行,在数据库中大约有1200万行的情况下,插入行花了我大约16分钟的时间。

这听起来合理吗,还是发生了什么大事?


问题答案:

据我了解,性能不佳的主要原因是浪费时间来执行许多SQLite事务。该怎么办?

删除索引,然后

PRAGMA synchronous = OFF (or NORMAL)

插入N行的块(定义N,尝试N = 5000开始)。在插入块之前

BEGIN TRANSACTION

插入后做

COMMIT

另请参见http://www.sqlite.org/faq.html#q19



 类似资料:
  • 问题内容: 我正在尝试编写脚本来导入数据库文件。我编写了脚本来导出文件,如下所示: 现在,我希望能够导入该数据库。我试过了 : 但是我不允许执行多个语句。有没有办法让它直接运行SQL脚本? 问题答案: 文件资料。

  • 问题内容: 我有一个使用“线程”模块的Python程序。每秒一次,我的程序启动一个新线程,该线程从Web上获取一些数据,并将这些数据存储到我的硬盘中。我想使用sqlite3来存储这些结果,但是我无法使其正常工作。问题似乎与以下几行有关: 如果将这行代码放入每个线程中,则会收到OperationalError通知我数据库文件已锁定。我猜这意味着另一个线程通过sqlite3连接打开了mydatabas

  • 我必须为每个客户端每秒存储大约250个数值,即每小时大约90万个数字。它可能不会是全天的记录(可能每天5-10个小时),但我会根据客户端ID和读取日期对数据进行分区。最大行长约为22-23M,这仍然是可管理的。无论如何,我的方案看起来像这样: 密钥空间的复制因子为2,仅用于测试,告密者为和。我知道复制因子3更符合生产标准。 接下来,我在公司服务器上创建了一个小型集群,三台裸机虚拟化机器,具有2个C

  • 问题内容: 我最近开始学习Python和SQL,并有一个问题。 将Python与SQLite3结合使用,我编写了以下代码: 我注意到我可以使用for循环而不是executemany来做同样的事情: 我只是想知道哪个更有效,更经常使用? 问题答案: 批处理插入会更有效,并且随着记录数量的增加,性能差异通常会很大。执行insert语句会产生大量开销,如果您一次插入一行,则会一遍又一遍地产生该开销。 只

  • 问题内容: 我有一个包含3行的列表,每行分别代表一个表行: 如何将此列表插入表中? 我的表结构是: 还是我应该使用列表以外的其他东西? 这是实际的代码部分: 分别插入三个字段是可行的,但是使用单行 要么 才不是。 问题答案:

  • 我对这两种算法的时间复杂度感到困惑。 usingTreeMap算法的时间复杂度正确吗?我知道在treemap中插入时间是log(n ),但是如果我们遍历一个包含10个元素的数组,它会变成nlog(n)吗?