【问题标题】:Dealing with a large database in Android在 Android 中处理大型数据库
【发布时间】:2020-10-21 08:31:37
【问题描述】:

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

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

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

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

    以下是您将要解决的问题: 1.) 由于 SQLite 只是对文件的抽象,因此当您进行选择、插入、更新等操作时,您将产生 sdcard 读写成本 2.) 我已经看到提到基于性能的soft limit of 10000 records。这篇文章有点老了,所以它可能会变得更好。

    除此之外,您可能需要设置一些测试以查看可行的方法。到目前为止,谷歌的粗略搜索没有显示任何基准。

    【讨论】:

    • 不错的答案。 +1。我怀疑如果sqlite文件在android中是外部的,那么限制是什么?它和桌面一样还是有任何限制..?
    【解决方案2】:

    如前所述,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 可以在应用程序性能方面发挥重要作用。

    【讨论】:

    • Berkeley DB 是否适用于所有 Android 手机?将 Android 应用从 SQLite 切换到 BDB 有那么容易吗?
    • 伯克利数据库可以从这里下载:bit.ly/gNWr1C。 BDB 和 BDB Java 版都在 Android 上运行。如果你想使用 SQL API,那么你应该下载 BDB(不是 BDB JE)。这两种产品都经过测试并支持 Android,我们有客户在 Android 上运行基于 BDB 的应用程序。您将需要构建 Berkeley DB 并将您的应用程序指向 BDB 库。你必须小心你正在使用哪个库,但是一旦设置好它就应该运行。如果您有任何问题,请将其发布到 OTN 论坛 (bit.ly/g5Fkbz),让我们知道。
    【解决方案3】:

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

    【讨论】:

    • 链接已失效。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2020-04-26
    • 2017-09-24
    • 2019-12-27
    • 2011-07-28
    相关资源
    最近更新 更多