通过Python使用Sqlite函数InitSpatialMetaData()创建Spatialite数据库时的性能问题
我正在用Python创建一个动态数据库。上面的代码运行得很好,但当我在查询中使用InitSpatialMetadata()这个函数时,数据库创建得非常慢。
文件开始时是0kb,然后每秒大约增加2-5kb,直到完全创建好。整个过程大约需要2-3分钟,最终的文件大小是3mb。有人遇到过这个问题吗?
import sqlite3
db = sqlite3.connect('C:/test.sqlite')
cursor = db.cursor()
cursor.execute("SELECT InitSpatialMetadata()")
4 个回答
0
我发现当在Windows上使用pyspatialite代替基本的sqlite3模块时,这个问题就不再存在了。你可以在这里找到pyspatialite的相关信息:https://github.com/lokkju/pyspatialite
2
你可以设置一些指令来让这个过程更快:
在执行“SELECT InitSpatialMetadata()”之前,先执行:
“PRAGMA synchronous = OFF”和“PRAGMA journal_mode = MEMORY”
然后再把设置改回来:
“PRAGMA synchronous = FULL”和“PRAGMA journal_mode = DELETE”
这样做对我有效。
3
它是在基础数据中构建空间元数据,3MB是一个标准大小。
为了加快请求的速度,可以使用开始/提交事务的方式,这样可以在静默模式下进行:
cursor.execute("BEGIN ;")
cursor.execute("SELECT InitSpatialMetadata()")
cursor.execute("COMMIT ;")
9
这是一个老问题,不过根据gdal-dev上的这个讨论,而且还要看你使用的库的版本,
InitSpatialMetadata(1) // Note the parameter
可能会运行得更快。我自己就是这样。