资源与 SQLite

2024-02-03

我正在尝试分析对于需要附带相当大量文本(几本书)的应用程序使用 SQLite 与使用资源之间的权衡。我读了这篇关于原始 XML 文件与 SQLite 的文章 https://stackoverflow.com/questions/5213550/raw-resources-versus-sqlite-database and 这是关于 XML 资源与 SQLite 的对比 https://stackoverflow.com/questions/7508859/xml-resources-or-sqlite。然而,这两者似乎都在将 SQLite 与运行时解析 XML 进行比较。我不知道使用 string 和 int 资源数组是否也存在同样的问题。实际上我有很多未知数,我很感激其他人可以提供的任何见解。

资料详情:约40册;每本书三种语言;平均图书长度 25 章;平均章节长度 25 段;总共约 75,000 个段落。文本按段落存储;不需要更细的粒度。对于每种语言,应用程序的文本逻辑视图都是跨越所有书籍的单个段落数组。还有细至段落级别的“目录”(TOC) 数据。所有数据都是严格只读的。我需要支持两种查询类型:1)检索指定语言的段落或段落范围的文本; 2) 给定段落编号,确定书籍、章节以及章节中的段落偏移量。我不需要使用任何 SQLite 的字符串函数。

到目前为止我的分析:

SQLite:离线创建 SQLite 数据库,将其打包为原始资源或资产,并在应用程序首次运行(和/或升级)时将其复制到数据库位置。我为此实现了一个原型数据库,其中有六个表。

  1. 可以使用SQL查询数据库,因此不需要编写任何搜索算法。
  2. 我知道它可以处理这么多数据。
  3. 需要多个 SQL 范围查询来回答类型 2 查询。
  4. 需要两倍的空间:在 .apk 文件中,以及安装到应用程序的数据库区域时再次需要。
  5. Android 的 SQLite 实现需要外部存储(SD 卡),因此如果没有外部存储,应用程序将无法运行。亚马逊的Kindle Fire 应用指南 https://developer.amazon.com/help/faq.html#KindleFire声明应用程序不能需要 SD 卡,因此这样做可能会排除 Kindle Fire 兼容性。 (坏的!)

资源:离线创建一个xml数组资源文件集合,并将其复制到项目的res/values文件夹中。文本将被划分为许多字符串数组:每本书每章一个数组。大约有 3,000 个阵列。索引将被实现为 int 数组。对于每本书,索引数据将跨语言共享。我可能还需要生成一些类型化数组资源来提供生成的资源 ID 的索引。我希望索引数组足够小,可以在应用程序启动时完全加载到内存中。

  1. 类型 1 查询涉及加载正确的字符串数组并访问数组元素。类型 2 查询涉及(已加载的)索引数据的二分搜索。
  2. 不知道Android中的资源系统是否可以处理那么多的资源数组。
  3. 不知道与使用 SQLite 相比性能如何。

我认为混合方法也是可能的:以一种方式存储 TOC 数据,以另一种方式存储文本本身。

再次强调,如果您有任何有助于此分析的想法或见解,我将不胜感激。


一个切点...

亚马逊针对 Kindle Fire 应用程序的指南规定,应用程序不能需要 SD 卡,因此这样做可能会排除 Kindle Fire 兼容性。 (坏的!)

从今天开始的版本确实推荐

您部署一个可以快速下载和安装的较小 APK,然后在首次启动时下载其他资源并将其保存在本地文件系统上。

对于较大的应用程序,而不是将其完全打包。此外,他们禁止的似乎是[强调我的]

复制、记录、下载、存储或任何类型的类似行为视频或音频内容到 Amazon Fire TV 或 Fire TV Stick 设备、任何 SD 存储卡或任何连接的外部存储(如果适用)。

所以现在这个限制似乎已经过时了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

资源与 SQLite 的相关文章

  • Android - 带图像的按钮 - 禁用按钮时图像变暗

    在 Android 中 我有一个包含图像和文本的按钮 禁用该按钮时 文本会自动变灰 但图像保持不变 当按钮被禁用时是否可以使图像变暗而不需要两个单独的图像 在您的代码中 您还可以使用彩色滤光片 http developer android
  • 相对重力

    我最近开始使用jMonkey引擎 这非常好 但我在尝试实现相对重力时陷入了困境 我想让行星彼此围绕轨道运行 不一定是完美的圆形轨道 取决于速度 所以每个对象都应该影响其他对象 我现在拥有的 关闭全球重力 bulletAppState get
  • java springrabbit - 优雅地拒绝消息

    我有以下侦听器方法 Override public void onMessage Message message Channel channel try do something bad catch Exception e try long
  • 将 glReadPixels 替换为 EGL_KHR_image_base 以加快像素复制速度

    我试图在 Android 本机进程中使用 EGL KHR image base 来替换 glReadPixels 因为它很慢 1280x800 RGBA 为 220ms 这是我到目前为止所拥有的 但我的它产生一个空缓冲区 只有零 uint8
  • RecyclerView onClick notificationItemRemoved 不会触发 onBindView

    I use notifyItemRemoved 方法我想更改其他剩余项目 但该方法没有触发onBindView 方法 除了使用notifyDataSetChanged 我想要附带的动画notifyItemRemoved method 如果您
  • 用二进制数、常规数字和格雷编码填充矩阵

    我有一个包含 1 s 或 0 s 的矩阵 用于创建二进制数 其宽度为n 对于 n 2 和 n 3 它看起来像 00 000 01 001 10 010 11 011 100 101 110 111 等等 现在我正在使用以下代码来生成它 in
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • Android 上的 Facebook 社交插件

    我想集成 Facebook 的评论社交插件 https developers facebook com docs reference plugins comments https developers facebook com docs r
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • 如何让 Camel FTP 按需只获取一次

    我对骆驼还很陌生 我一直在尝试让 Camel 根据需要仅通过 FTP 获取单个文件一次 我无法让它发挥作用 这是我尝试过的 让我知道什么是最好的方法以及我的代码有什么问题 1 读取文件后发送一条空消息当收到空消息时 停止路由 from di
  • ListPreferences 的异常

    这是我的第一个 Android 应用程序 在尝试使用 ListPreference 时遇到了异常 应用程序与首选项一起加载 但是当我触摸 ListPreference 条目时 应用程序 意外停止 设置 java public class S
  • Java泛型类型参数中的问号是什么意思? [复制]

    这个问题在这里已经有答案了 这是取自斯坦福解析器附带的一些示例的一小段代码 我已经用 Java 进行了大约 4 年的开发 但从未对这种风格的代码应该表示什么有非常深入的理解 List
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 如何在flutter app android中添加Startapp广告?

    我想用其他广告更改 AdMob 广告 一些个人问题 如何在flutter app android中添加Startapp广告 有什么方法可以将启动广告添加到我的 flutter 应用程序 android 中 StartApp 现已更名为 St
  • Android 中应用程序在后台运行时如何显示闪屏?

    我的应用程序有一个启动屏幕 无法避免它 因为这是出于品牌原因 我想屏蔽用户界面并在后台显示启动屏幕 就像银行应用程序那样 我应该覆盖 MainActivity 中视图的 onPause 和 onResume 吗 显现
  • 如何使用Android Studio录制Android屏幕?

    我已经在 Mac 上的 Applications 文件夹中安装了 Android Studio 我认为 sdk 位于包内容中 但现在我想使用 AShot jar 录制屏幕以获取应用程序的演示视频 我必须放弃SDK的路径 当我给出我认为正确的
  • 使用 SimpleDateFormat、Java 进行错误的日期解析

    我需要使用日期模式 yyyy MM dd 解析输入字符串中的日期 如果日期采用任何其他格式 则抛出错误 这是我解析日期的代码 private void validateDate throws MyException Date parsedD
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 如何将字符串解析为map

    有一个像A B C D E F这样的字符串 如何将其解析为map 我会使用拆分 String text A B C D E F Map
  • SQLite 导入选项卡文件:.import 是每行执行一次插入还是将它们与事务分组?

    我正在从选项卡文件导入数百万行 而 SQLite import mode 选项卡非常慢 我有三个索引 所以缓慢可能来自索引 但首先我想检查 import 是否添加将大量 所有行分组到单个提交中的行 我无法找到 import 如何工作的文档

随机推荐