Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 优化对只读sqlite数据库的快速访问?_Android_Database_Performance_Sqlite - Fatal编程技术网

Android 优化对只读sqlite数据库的快速访问?

Android 优化对只读sqlite数据库的快速访问?,android,database,performance,sqlite,Android,Database,Performance,Sqlite,我有一个巨大的数据库,我希望我的应用程序尽快使用它。我使用的是安卓系统,所以资源更加有限。我知道在sqlite数据库中存储大量数据不是一个好主意,但我需要这个 每个数据库只包含一个表,我使用它是只读的 你能给我什么建议来尽可能优化数据库。我已经读过这篇文章了,除了PRAGMA命令,我还能用什么呢 可能有一些特殊的表类型被限制为只读查询,但主要比普通表类型更快?巨大是相对的。但最终一台设备会受到存储和内存的限制。因此,假设巨型设备超出了设备的典型约束,您有几个选择 第一种选择是将您的巨大数据集存储

我有一个巨大的数据库,我希望我的应用程序尽快使用它。我使用的是安卓系统,所以资源更加有限。我知道在sqlite数据库中存储大量数据不是一个好主意,但我需要这个

每个数据库只包含一个表,我使用它是只读的

你能给我什么建议来尽可能优化数据库。我已经读过这篇文章了,除了PRAGMA命令,我还能用什么呢


可能有一些特殊的表类型被限制为只读查询,但主要比普通表类型更快?

巨大是相对的。但最终一台设备会受到存储和内存的限制。因此,假设巨型设备超出了设备的典型约束,您有几个选择

第一种选择是将您的巨大数据集存储在云中,连接的设备可以通过提供云服务(比如coud提供的restfulapi)将数据提供给设备,从而为数据提供视图。如果设备和应用程序依赖于始终保持连接,则除非您希望缓存数据,否则您不需要那么多本地存储

另一种方法是偶尔连接的设备(有时离线),您可以将最相关的数据片段向下拉到设备上。在这种模式下,你可以离线工作,推/拉回到云端。在这个模型中,sqlite是保存相关数据片段的存储机制

根据评论进行编辑:

关于优化设备上的内容,请参见此处的优化常见问题:

(按有效性的大致顺序)

  • 使用内存中的数据库
  • 使用开始事务和结束事务
  • 使用索引使用PRAGMA缓存大小
  • 使用PRAGMA synchronous=OFF
  • 压缩数据库
  • 更换内存分配库
  • 使用PRAGMA count_changes=OFF

  • 只要你的数据库安装在设备上,就没有问题;你只会有更少的空间用于其他应用程序

    没有特殊的桌子类型。但是,如果您有只使用表列的子集的查询,如果您还有足够的空间,请考虑添加一个或多个。 只读允许在部署数据库之前在桌面上对其进行优化:

    • 设置页面大小等
    • 创建有用的索引

    在你的应用程序中,你可以尝试增加内存,但如果你的工作集大于可用内存,那无论如何都不会有帮助。在任何情况下,从闪存随机读取都很快,所以这不会有太大问题。

    也许我是在说明显而易见的问题,但您可能应该使用
    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可以处理相当大的数据库:。