【发布时间】:2020-10-21 08:31:37
【问题描述】:
我目前正在开发一个有可能创建一个非常大的数据库的应用程序。我曾计划在 SD 卡上安装该应用程序以腾出一些额外的空间。最近这里的交易警告我,这可能不是一个好主意。我可以采取什么措施来减轻这种行动的危险吗?还是有更好的选择?
【问题讨论】:
我目前正在开发一个有可能创建一个非常大的数据库的应用程序。我曾计划在 SD 卡上安装该应用程序以腾出一些额外的空间。最近这里的交易警告我,这可能不是一个好主意。我可以采取什么措施来减轻这种行动的危险吗?还是有更好的选择?
【问题讨论】:
这是关于这个主题的comprehensive post(我不是作者)。
我认为,总的来说,需要说明 SQLite 只是一种用于访问文件的 SQL 机制。整个 APK 的当前市场限制似乎是 50mb。安装到内存时,您需要 2 倍的 APK 大小。安装到 sdcard 只需要指定的 APK 大小。
以下是您将要解决的问题: 1.) 由于 SQLite 只是对文件的抽象,因此当您进行选择、插入、更新等操作时,您将产生 sdcard 读写成本 2.) 我已经看到提到基于性能的soft limit of 10000 records。这篇文章有点老了,所以它可能会变得更好。
除此之外,您可能需要设置一些测试以查看可行的方法。到目前为止,谷歌的粗略搜索没有显示任何基准。
【讨论】:
如前所述,SQLite 具有您正在寻找的功能,封装在一个小型库中。它旨在通过 SQL API 将简单的文件访问替换为可靠、可恢复的事务性数据访问。他们的main page 有一个很好的总结。
实际上有数以千计的项目在使用 SQLite。如果您的数据集将非常大(超过 100-200MB),那么您可能需要考虑使用 Berkeley DB 作为选项。 Berkeley DB 最近引入了对SQL API 的支持,它完全兼容 SQLite。除了 SQLite SQL 解析器、查询计划器和执行器提供的功能之外,您还可以获得 Berkeley DB 众所周知的可靠性和可扩展性。我们有几个客户很高兴地开始使用 SQLite。当他们意识到他们需要 SQLite 中没有的额外并发性、可扩展性和可靠性时,他们用 BDB 库替换了 SQLite 库,重新编译了他们的应用程序,并在几天之内在伯克利进行了测试和运行。
我是 Berkeley DB 的产品经理之一,所以我有点偏见。 :-) 但是,我们实现了 BDB SQL API,以便我们可以为用户提供两全其美的体验:SQLite 的普遍性和易用性与 Berkeley DB 的并发性、可靠性和可扩展性相结合。尤其是对于较大的数据集,Berkeley DB 可以在应用程序性能方面发挥重要作用。
【讨论】:
如上所述,您可以在 Android 上使用 Berkeley DB(不是 Java 版)。我描述了交叉编译过程的步骤here,因为它需要进行细微的调整。
【讨论】: