我在Android应用中运行了一个SQLite数据库,可以在一个月内传输用户数据。
首次运行应用程序时,尚未下载任何数据,存储对于INSERTS来说是一件小事。
然而,当用户重新下载数月的数据时(从主数据库获取任何潜在的更新(我想推小,一个记录更新,但这是2.0功能))我需要找到一个有效的存储记录的方法。
目前,我使用暴力破解并简单地删除正在刷新的月份的所有记录,然后是INSERTS。我不想拥有一大堆逻辑和数据库访问,或存储元数据,以跟踪哪些记录是新的,哪些是现有的,然后相应地执行INSERTS和UPDATES。
我的老板说DELETE可能是一项昂贵的操作,这是真的吗?我应该用一些逻辑来确定应该更新哪些记录以及应该插入哪些记录,而不是DELETING然后插入?此策略还需要确定哪些记录在主数据库端被删除(我选择退出的另一个原因)。
如果有一个完全更好/更有效的方法来做到这一点,我没有提及,请告诉我。感谢。
答案 0 :(得分:1)
我的老板说DELETE可能是一项昂贵的操作,这是真的吗?
这取决于"昂贵"的定义。对于相同的受影响记录,我不知道DELETE
比UPDATE
要贵得多(事实上,它可能更便宜)。
我应该用一些逻辑来确定应该更新哪些记录以及应该插入哪些记录,而不是DELETING然后插入?
我们没有好的方法来回答这个问题,因为它在很大程度上取决于您的环境,例如您的数据库架构。
确保将这些操作包装在事务中,因为这会对批量操作的速度产生重大影响。
除此之外,您需要运行自己的一些性能基准测试,以确定DELETE
+ INSERT
超过UPDATE
的费用是多少,因此是否值得发展令人头痛或不试图转向以UPDATE
为中心的战略。