我在.NET 4.5中使用C#。我正在制作一个收集特定数据的刮刀。每次刮取值时,我都需要确保它尚未添加到SQLite数据库中。
为了做到这一点,每次抓取一个值来查询db以检查它是否包含该值时,我都会调用,如果没有,我再次调用将值插入db。
由于我每秒都在刮取多个值,因此对数据库的持续调用会产生非常大量的IO。
我的问题是,有没有更好的方法呢?也许我可以将刮掉的值排队,然后立即运行批量查询?这可能吗?
答案 0 :(得分:1)
我看到三种方法:
INSERT OR IGNORE
,如果条目已存在,将拒绝该条目(基于主键和唯一字段)。或者简单地INSERT
(或其等价物(INSERT or ABORT
)将返回SQLITE_CONSTRAINT
,如果您想要计算失败的插入数,则必须捕获和管理的值。BEGIN;
),进行插入(您也可以在这里使用INSERT OR IGNORE
),提交事务(COMMIT;
)