2012-11-24 28 views
3

好吧,所以我正在一个项目中,数据库将在一个表中保存大约20000个元素。例如:我有一家商店出售20000种产品,我想每天更新它们。每天只会更新约100-200。更新巨大的SQLite数据库每日

我正在考虑做整个数据库本地,所以它会更快。我想知道这是否是解决问题的好方法,还是应该使用其他方式来保存并显示数据?我担心更新文件对于每日下载/更新来说太大了。

是否有可能更新数据库,因为每次更新数据库时,它都会从0生成数据库?

打扰我的语法。 Jan

+1

您调查了内容提供商吗?一旦习惯了应用程序中的游标处理,这非常有用。它还使您能够围绕uris构建您的应用程序(例如,通过它的id来打开项目,如content:// product/id)。它也适用于游标加载器,并自动刷新数据库更改的数据适配器。 –

+1

20k元素仍然可以,但是如果你有每个图片等,数据量变得非常大。我不知道在想要使用商店的每台设备上本地存储所有的内容是否有意义。你需要一个在线连接来购买东西,这样你才能实现更好的方式来浏览在线商店。更新数据的方式要简单得多,用户只需要检查单个项目就不需要更新完整的商店。 – zapl

回答

2

您不需要更新数据库。您需要更新数据库内容。让我们的应用程序存储任何类型的标识符(比如说int)。每天发布更新到您的数据库内容 - 只与前一天的内容有所不同。然后,您的应用程序应该检查服务器上当前的数据库ID,然后获取并应用数据库包含的id和最近版本之间的所有差异。或者根据请求建立一个更新文件,以了解客户的内容修订版本以及最近的内容。如果用户每天使用你的应用程序,那么它不会有什么大不了的。

有可能更新数据库,因为每次更新数据库时,它都是从0开始构建的?

那么你很可能会做这个有点不对。您需要能够逐步构建(或者至少您应始终能够为数据库中的相同产品分配相同的ID)。

或者如果最终的数据库转储很小(即5MB-50MB-500MB--您将其命名)。只需让您的应用程序获取整个数据库文件并替换旧内容,而不会浪费时间和精力进行增量更新,因为处理这些数据可能比更换整个数据库花费更多的时间/金钱。

+0

非常感谢,我想知道的另一件事是否有可能在没有用户知识的情况下进行更新。那么让我们假设每天下午7点的应用程序会检查是否有新版本以及是否会更新它? – Janck

+2

是的,没问题。您可以使用AlarmManager在特定时间设置事件,并且一旦AM唤醒您的应用程序,您就会产生AsyncTask或IntentService来完成这项工作 –