【发布时间】:2014-01-02 14:52:34
【问题描述】:
我在一个 Android 应用程序中运行了一个 SQLite 数据库,它在一个月内分批传输用户数据。
应用程序首次运行时,尚未下载任何数据,使用 INSERTS 进行存储是一件小事。
但是,当用户重新下载一个月的数据时(从主数据库获取任何潜在的更新(我想推送小的、一条记录更新,但这是 2.0 的功能))我需要找到一个高效的存储记录的方式。
目前,我使用蛮力并简单地删除正在刷新的月份的所有记录,然后是 INSERTS。我不想拥有一大堆逻辑和数据库访问,或存储元数据,以跟踪哪些记录是新的,哪些是现有的,然后相应地执行插入和更新。
我的老板说 DELETE 可能是一项昂贵的操作,这是真的吗?我是否应该输入一些逻辑来确定应该更新哪些记录以及应该插入哪些记录,而不是 DELETING 然后 INSERTING ?此策略还需要确定在主数据库端也删除了哪些记录(我选择退出的另一个原因)。
如果有一种完全更好/有效的方法可以做到这一点,我还没有提到,请告诉我。谢谢。
【问题讨论】:
-
Delete+Insert 是两个数据库操作,而不是一个更新操作。如果涉及索引,成本可能会更高。问题是,您使用了多少数据?我会先用删除+插入进行音量测试。如果性能是可以接受的,您可能会争辩说,采用更复杂的策略是不值得的......
-
大约 1 MB,对于较小的城市来说,大约要少一些,而对于较大的城市来说可能要大得多。我们会,因为大多数操作都是更新,还有另一个原因要添加逻辑,虽然我真的不想这样做,因为时间是一个主要因素。
标签: android sql sqlite bulkinsert