【问题标题】:Performance problems using Sqlite function InitSpatialMetaData() to create a Spatialite database through Python使用Sqlite函数InitSpatialMetaData()通过Python创建Spatialite数据库的性能问题
【发布时间】:2014-06-04 21:10:35
【问题描述】:

我正在通过 创建一个动态数据库。上面的代码工作正常,但是当我在查询中使用函数 InitSpatialMetadata() 时,数据库的创建速度非常慢。
该文件以 0kb 开头,每秒增加 2-5kb,直到完全创建。所有过程大约需要 2-3 分钟才能完成,最终文件有 3mb。 有人遇到过这个问题吗?

import sqlite3
db = sqlite3.connect('C:/test.sqlite')
cursor = db.cursor()
cursor.execute("SELECT InitSpatialMetadata()")

【问题讨论】:

    标签: python python sqlite gis spatialite


    【解决方案1】:

    这是一个老问题,但根据 this thread on gdal-dev,并且取决于您的库版本,

    InitSpatialMetadata(1) // Note the parameter
    

    可能会跑得更快。它对我有用。

    【讨论】:

      【解决方案2】:

      它将空间元数据构建到基础中,3mb 是标准大小。

      要加快请求速度,只需使用开始/提交事务以静默模式进行:

      cursor.execute("BEGIN ;")
      cursor.execute("SELECT InitSpatialMetadata()")
      cursor.execute("COMMIT ;")
      

      【讨论】:

        【解决方案3】:

        你可以设置一些 pragma 来加快这个过程:

        在执行“SELECT InitSpatialMetadata()”之前,执行:

        “PRAGMA 同步 = OFF”和 "PRAGMA journal_mode = MEMORY'

        然后回到设置:

        “PRAGMA 同步 = FULL”和 "PRAGMA journal_mode = DELETE'

        这对我有用

        【讨论】:

          【解决方案4】:

          我发现当使用 pyspatialite 代替基本 sqlite3 模块(至少在 Windows 上)时,这不再是问题 - https://github.com/lokkju/pyspatialite

          【讨论】:

            猜你喜欢
            • 2014-08-25
            • 2015-07-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多