Android 优化对只读sqlite数据库的快速访问?
我有一个巨大的数据库,我希望我的应用程序尽快使用它。我使用的是安卓系统,所以资源更加有限。我知道在sqlite数据库中存储大量数据不是一个好主意,但我需要这个 每个数据库只包含一个表,我使用它是只读的 你能给我什么建议来尽可能优化数据库。我已经读过这篇文章了,除了PRAGMA命令,我还能用什么呢Android 优化对只读sqlite数据库的快速访问?,android,database,performance,sqlite,Android,Database,Performance,Sqlite,我有一个巨大的数据库,我希望我的应用程序尽快使用它。我使用的是安卓系统,所以资源更加有限。我知道在sqlite数据库中存储大量数据不是一个好主意,但我需要这个 每个数据库只包含一个表,我使用它是只读的 你能给我什么建议来尽可能优化数据库。我已经读过这篇文章了,除了PRAGMA命令,我还能用什么呢 可能有一些特殊的表类型被限制为只读查询,但主要比普通表类型更快?巨大是相对的。但最终一台设备会受到存储和内存的限制。因此,假设巨型设备超出了设备的典型约束,您有几个选择 第一种选择是将您的巨大数据集存储
可能有一些特殊的表类型被限制为只读查询,但主要比普通表类型更快?巨大是相对的。但最终一台设备会受到存储和内存的限制。因此,假设巨型设备超出了设备的典型约束,您有几个选择 第一种选择是将您的巨大数据集存储在云中,连接的设备可以通过提供云服务(比如coud提供的restfulapi)将数据提供给设备,从而为数据提供视图。如果设备和应用程序依赖于始终保持连接,则除非您希望缓存数据,否则您不需要那么多本地存储 另一种方法是偶尔连接的设备(有时离线),您可以将最相关的数据片段向下拉到设备上。在这种模式下,你可以离线工作,推/拉回到云端。在这个模型中,sqlite是保存相关数据片段的存储机制 根据评论进行编辑: 关于优化设备上的内容,请参见此处的优化常见问题: (按有效性的大致顺序)
只要你的数据库安装在设备上,就没有问题;你只会有更少的空间用于其他应用程序 没有特殊的桌子类型。但是,如果您有只使用表列的子集的查询,如果您还有足够的空间,请考虑添加一个或多个。 只读允许在部署数据库之前在桌面上对其进行优化:
- 设置页面大小等李>
- 创建有用的索引李>
在你的应用程序中,你可以尝试增加内存,但如果你的工作集大于可用内存,那无论如何都不会有帮助。在任何情况下,从闪存随机读取都很快,所以这不会有太大问题。也许我是在说明显而易见的问题,但您可能应该使用
SQLITE\u open\u READONLY
标志打开它:我认为SQLITE将利用这一事实并优化引擎的行为
请注意,所有正常的SQL(ite)优化提示仍然适用(例如,清空以完成数据库、在创建数据库时设置正确的页面大小、正确的索引等)
此外,如果您的应用程序中有多个线程访问数据库,您可能还想尝试使用
SQLITE\u OPEN\u NOMUTEX
和SQLITE\u OPEN\u SHAREDCACHE
标志(尽管它们需要sqlite3\u OPEN\u v2)此外,您还需要关闭日志记录,因为数据不会更改
PRAGMA journal_mode=OFF云不可接受。第一个原因是应用程序应该在任何地方都可以工作,无论是否连接互联网。第二个原因——应用程序以实时模式处理大量数据,因此会减慢进度。实际上我并不担心数据库的存储,我担心的是查询的快速性谢谢你的回复。我不担心设备上数据库的大小。大小不是问题。我担心查询时间。我希望尽快将结果发送给用户,因此我正在寻找一些技巧来帮助查询时间链接断开了,但我在waybackmachine上找到了它:当你说“在sqlite数据库中存储大量数据不是一个好主意”时,你指的是什么?这是安卓特有的限制吗?SQLite可以处理相当大的数据库:。