处理Android中的大型数据库

时间:2011-01-21 14:27:10

标签: android sqlite

我目前正在开发一款可能会创建一个非常大的数据库的应用。我曾计划在SD卡上安装应用程序以增加一些空间。最近的交易警告我,这可能不是一个好主意。我是否可以采取任何措施来减轻这种行为的危险?还是有更好的选择吗?

3 个答案:

答案 0 :(得分:11)

这是关于这个主题的comprehensive post(我不是作者)。

我认为,总的来说,需要传达的是SQLite只是一种用于访问文件的SQL机制。对于整个APK,目前的市场限制似乎是50mb。安装到内存时,您需要2倍的APK大小。安装到SD卡只需要规定的APK大小。

以下是您将要采取的措施: 1.)由于SQLite只是对文件的抽象,当您选择,插入,更新等时,您将产生SD卡读写成本 2.)我已经看到基于性能提到soft limit of 10000 records。这篇文章有点陈旧,所以它可能会变得更好。

除此之外,你可能不得不设置一些测试来看看哪些是可行的。粗略搜索谷歌迄今没有显示任何基准。

答案 1 :(得分:4)

如前所述,SQLite具有您正在寻找的功能,打包在一个小型库中。它旨在通过SQL API替换具有可靠,可恢复,事务性数据访问的简单文件访问。他们的main page有一个很好的总结。

有数千个使用SQLite的项目。如果您的数据集非常大(超过100-200MB),那么您可能需要考虑使用Berkeley DB作为选项。 Berkeley DB最近引入了对SQL API的支持,它完全兼容SQLite。除了SQLite SQL解析器,查询规划器和执行器提供的功能之外,您还获得了Berkeley DB众所周知的可靠性和可伸缩性。我们有几个客户开心地使用SQLite。当他们意识到他们需要SQLite中没有的额外并发性,可伸缩性和可靠性时,他们将SQLite库替换为BDB库,重新编译他们的应用程序,并在几天内在Berkeley上测试并运行它。

我是Berkeley DB的产品经理之一,所以我有点偏颇。但是,我们实现了BDB SQL API,以便为用户提供两全其美的优势:SQLite的普遍性和易用性以及Berkeley DB的并发性,可靠性和可扩展性。特别是对于更大的数据集,Berkeley DB可以在应用程序性能方面发挥重要作用。

答案 2 :(得分:2)

如上所述,您可以在Android上使用Berkeley DB(而不是Java版)。我描述了交叉编译过程here的步骤,因为它需要稍微调整。