From f07d620ee8f70a91f6375fa376266242995e75dd Mon Sep 17 00:00:00 2001 From: markigail Date: Mon, 9 May 2016 15:07:58 +0200 Subject: [PATCH] Change load-data in setup.php. --- nominatim/index.c | 25 +++++++++------ utils/setup.php | 78 ++++++++++++++--------------------------------- 2 files changed, 38 insertions(+), 65 deletions(-) diff --git a/nominatim/index.c b/nominatim/index.c index 02392cd3..90a3abea 100644 --- a/nominatim/index.c +++ b/nominatim/index.c @@ -140,13 +140,7 @@ struct index_thread_data * thread_data, const char *structuredoutputfile) // Get all the place_id's for this sector paramRank = PGint32(rank); - paramValues[0] = (char *)¶mRank; - paramLengths[0] = sizeof(paramRank); - paramFormats[0] = 1; paramSector = PGint32(sector); - paramValues[1] = (char *)¶mSector; - paramLengths[1] = sizeof(paramSector); - paramFormats[1] = 1; if (rankTotalTuples-rankCountTuples < num_threads*1000) { // no sectors @@ -156,18 +150,29 @@ struct index_thread_data * thread_data, const char *structuredoutputfile) } else { - iResult = PQsendQueryPrepared(conn, "index_nosector_places", 2, paramValues, paramLengths, paramFormats, 1); + paramValues[0] = (char *)¶mRank; + paramLengths[0] = sizeof(paramRank); + paramFormats[0] = 1; + iResult = PQsendQueryPrepared(conn, "index_nosector_places", 1, paramValues, paramLengths, paramFormats, 1); } } else { if (interpolation) { - iResult = PQsendQueryPrepared(conn, "index_sector_places_osmline", 2, paramValues, paramLengths, paramFormats, 1); - + iResult = PQsendQueryPrepared(conn, "index_sector_places_osmline", 1, paramValues, paramLengths, paramFormats, 1); + paramValues[0] = (char *)¶mSector; + paramLengths[0] = sizeof(paramSector); + paramFormats[0] = 1; } else { + paramValues[0] = (char *)¶mRank; + paramLengths[0] = sizeof(paramRank); + paramFormats[0] = 1; + paramValues[1] = (char *)¶mSector; + paramLengths[1] = sizeof(paramSector); + paramFormats[1] = 1; iResult = PQsendQueryPrepared(conn, "index_sector_places", 2, paramValues, paramLengths, paramFormats, 1); } } @@ -335,7 +340,7 @@ void nominatim_index(int rank_min, int rank_max, int num_threads, const char *co pg_prepare_params[0] = PG_OID_INT4; res = PQprepare(conn, "index_sector_places_osmline", - "select place_id from location_property_osmline where geometry_sector = $2 and indexed_status > 0", + "select place_id from location_property_osmline where geometry_sector = $1 and indexed_status > 0", 1, pg_prepare_params); if (PQresultStatus(res) != PGRES_COMMAND_OK) { diff --git a/utils/setup.php b/utils/setup.php index a7daa1fc..166dfee9 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -396,69 +396,37 @@ echo "Load Data\n"; $aDBInstances = array(); - $aQueriesPlacex = array(); - $aQueriesOsmline = array(); - // the query is divided into parcels, so that the work between the processes, i.e. the DBInstances, will be evenly distributed - $iNumberOfParcels = 100; - for($i = 0; $i < $iNumberOfParcels; $i++) - { - $sSQL = 'insert into placex (osm_type, osm_id, class, type, name, admin_level, '; - $sSQL .= 'housenumber, street, addr_place, isin, postcode, country_code, extratags, '; - $sSQL .= 'geometry) select * from place where osm_id % '.$iNumberOfParcels.' = '.$i.' and not '; - $sSQL .= '(class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\');'; - array_push($aQueriesPlacex, $sSQL); - $sSQL = 'select insert_osmline (osm_id, housenumber, street, addr_place, postcode, country_code, '; - $sSQL .= 'geometry) from place where osm_id % '.$iNumberOfParcels.' = '.$i.' and '; - $sSQL .= 'class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\''; - array_push($aQueriesOsmline, $sSQL); - } - for($i = 0; $i < $iInstances; $i++) { $aDBInstances[$i] =& getDB(true); - } - // now execute the query blocks, in the first round for placex, then for osmline, - // because insert_osmline depends on the placex table - echo 'Inserting from place to placex.'; - $aQueries = $aQueriesPlacex; - for($j = 0; $j < 2; $j++) - { - $bAnyBusy = true; - while($bAnyBusy) + if( $i < $iInstances-1 ) { - $bAnyBusy = false; - - for($i = 0; $i < $iInstances; $i++) - { - if (pg_connection_busy($aDBInstances[$i]->connection)) - { - $bAnyBusy = true; - } - else if (count($aQueries) > 0) - { - $query = array_pop($aQueries); - if (!pg_send_query($aDBInstances[$i]->connection, $query)) - { - fail(pg_last_error($oDB->connection)); - } - else - { - pg_get_result($aDBInstances[$i]->connection); - $bAnyBusy = true; - } - } - } - sleep(1); - echo '.'; + $sSQL = 'insert into placex (osm_type, osm_id, class, type, name, admin_level, '; + $sSQL .= 'housenumber, street, addr_place, isin, postcode, country_code, extratags, '; + $sSQL .= 'geometry) select * from place where osm_id % '.$iInstances-1.' = '.$i; } - echo "\n"; - if ($j == 0) //for the second round with osmline + else + { + // last thread for interpolation lines + $sSQL = 'select insert_osmline (osm_id, housenumber, street, addr_place, postcode, country_code, '; + $sSQL .= 'geometry) from place where '; + $sSQL .= 'class=\'place\' and type=\'houses\' and osm_type=\'W\' and ST_GeometryType(geometry) = \'ST_LineString\''; + } + if ($aCMDResult['verbose']) echo "$sSQL\n"; + if (!pg_send_query($aDBInstances[$i]->connection, $sSQL)) fail(pg_last_error($oDB->connection)); + } + $bAnyBusy = true; + while($bAnyBusy) + { + $bAnyBusy = false; + for($i = 0; $i < $iInstances; $i++) { - echo 'Inserting from place to osmline.'; - $aQueries = $aQueriesOsmline; + if (pg_connection_busy($aDBInstances[$i]->connection)) $bAnyBusy = true; } + sleep(1); + echo '.'; } - + echo "\n"; echo "Reanalysing database...\n"; pgsqlRunScript('ANALYSE'); } -- 2.39.5