Проблема с производительностью при получении ближайшего местоположения в приложении реального времени

В настоящее время я работаю над таким проектом, как Uber. Это означает, что есть два приложения: одно для водителя и одно для клиента.

Проблема в том, что драйвер должен обновлять свое местоположение за 2 секунды. И клиент тянет всех ближайших водителей за 2 секунды в режиме реального времени. Это вызывает плохую производительность в запросе базы данных. Я использую расширение cube & earthdistance в PostgreSQL для расчета ближайшего.

Может кто-нибудь показать мне, как лучше решить эту проблему? Большое спасибо!

1 ответ

Вы можете использовать https://deepstream.io/ для передачи данных в реальном времени, например, с Android

public void onLocationChanged(Location location) {
  // get the record
  Record record = client.record.getRecord( "driver/14" );
  // any kind of data path works
  record.set( "position.x", location.getLongitude() );
  //as well as any kind of serializable datatype
  record.set( "position.y", location.getLatitude() );
}

в JavaScript

// get the record
var driver = client.record.getRecord( 'driver/14' );

// subscribe to any changes within position
driver.subscribe( 'position', function( position ){
  updateMarker( position.x, position.y );
});

В сочетании, например, с гео-пространственными запросами RethinkDB, которые можно интегрировать с этим в глубоком потоке, это может быть масштабируемым решением.

Вот пример репо, демонстрирующий это

Другие вопросы по тегам