批量数据库操作策略

时间:2014-01-02 14:52:35

标签: android sql sqlite bulkinsert

我在Android应用中运行了一个SQLite数据库,可以在一个月内传输用户数据。

首次运行应用程序时,尚未下载任何数据,存储对于INSERTS来说是一件小事。

然而,当用户重新下载数月的数据时(从主数据库获取任何潜在的更新(我想推小,一个记录更新,但这是2.0功能))我需要找到一个有效的存储记录的方法。

目前,我使用暴力破解并简单地删除正在刷新的月份的所有记录,然后是INSERTS。我不想拥有一大堆逻辑和数据库访问,或存储元数据,以跟踪哪些记录是新的,哪些是现有的,然后相应地执行INSERTS和UPDATES。

我的老板说DELETE可能是一项昂贵的操作,这是真的吗?我应该用一些逻辑来确定应该更新哪些记录以及应该插入哪些记录,而不是DELETING然后插入?此策略还需要确定哪些记录在主数据库端被删除(我选择退出的另一个原因)。

如果有一个完全更好/更有效的方法来做到这一点,我没有提及,请告诉我。感谢。

1 个答案:

答案 0 :(得分:1)

  

我的老板说DELETE可能是一项昂贵的操作,这是真的吗?

这取决于"昂贵"的定义。对于相同的受影响记录,我不知道DELETEUPDATE要贵得多(事实上,它可能更便宜)。

  

我应该用一些逻辑来确定应该更新哪些记录以及应该插入哪些记录,而不是DELETING然后插入?

我们没有好的方法来回答这个问题,因为它在很大程度上取决于您的环境,例如您的数据库架构。

确保将这些操作包装在事务中,因为这会对批量操作的速度产生重大影响。

除此之外,您需要运行自己的一些性能基准测试,以确定DELETE + INSERT超过UPDATE的费用是多少,因此是否值得发展令人头痛或不试图转向以UPDATE为中心的战略。