我有如下結構的位置表之後變得緩慢:POSTGIS插入一段時間
CREATE TABLE location
(
id BIGINT,
location GEOMETRY,
CONSTRAINT location_pkey PRIMARY KEY (id, location),
CONSTRAINT enforce_dims_geom CHECK (st_ndims(location) = 2),
CONSTRAINT enforce_geotype_geom CHECK (geometrytype(location) = 'POINT'::TEXT OR location IS NULL),
CONSTRAINT enforce_srid_geom CHECK (st_srid(location) = 4326)
)
WITH (
OIDS=FALSE
);
CREATE INDEX location_geom_gist ON location
USING
GIST (location);
我運行下面的查詢插入數據:
def insert_location_data(msisdn, lat, lon):
if not (lat and lon):
return
query = "INSERT INTO location (id, location) VALUES ('%s', ST_GeomFromText('POINT(%s %s)', 4326))"%(str(id), str(lat), str(lon))
try:
cur = get_cursor()
cur.execute(query)
conn.commit()
except:
tb = traceback.format_exc()
Logger.get_logger().error("Error while inserting location in sql: %s", str(tb))
return False
return True
我運行的代碼塊1000萬次在一個循環中卻有一百萬插入插入速度急劇下降。當我重新啓動腳本時,速度恢復正常,但它又下降了大約一百萬個文檔,並繼續保持相同的趨勢。我無法弄清楚爲什麼? 任何幫助。
使用擴展插入語句。在循環中準備查詢,然後將其發送到PostgreSQL –
這裏有一個關於在postgres上加載批量數據的指南:http://www.postgresql.org/docs/current/interactive/populate.html –
但是爲什麼情況在發生。查詢起初速度很快,但隨着時間的推移,速度正在下降。數據庫大小不是問題,因爲重新啓動腳本會將速度恢復到最大值。 –