Как я могу оптимизировать dijsktra путь поиска запроса на скорость - PullRequest
1 голос
/ 14 января 2020

Через postgresql, postgis, pgrouting и nodejs Я работаю над проектом, который в основном находит путь между магазинами.

В моей базе данных три таблицы

1 .CREATE TABLE publi c. "Edge" (id int, имя varchar (100), шоссе varchar (100), односторонний varchar (100), поверхностный varchar (100), the_geom geometry, source int, target int);

2 .CREATE TABLE publi c. "dge_noded "(id bigint, old_id int, sub_id int, исходный bigint, целевой bigint, геометрия the_geom, имя varchar (100), тип varchar (100), расстояние с двойной точностью);

3 .CREATE TABLE publi c. "dge_noded_vertices_pgr "(идентификатор bigint, cnt int , chk int, ein int, eout int, геометрия the_geom); -

И запрос, по которому я нахожу путь

client.query ("WITH dijkstra AS (SELECT * FROM pgr_dijkstra ('SELECT id, source, target, расстояние AS стоимость FROM dge_noded.the_geom)) END AS route_geom_x, CASE WHEN edge = id) ORDER BY seq ", (err, res) => {})

Этот запрос работает для меня, но занимает слишком много времени, например, если я хочу найти путь между 30 магазинами, то это занимает почти 25-30 сек c, что слишком много.

После поиска этой проблемы я нашел эту ссылку https://gis.stackexchange.com/questions/16886/how-can-i-optimize-pgrouting-for-speed/16888 В этой ссылке Делавенис говорит, что использует st_buffer так что это не все пути, а только «близлежащие» пути:

Поэтому я попытался применить st_buffer в приведенном выше запросе, но безуспешно. Если у кого-то есть идеи, пожалуйста, помогите мне с этой проблемой.

Если этот подход неверен, пожалуйста, также скажите мне правильный путь.

...