Skip to content

kkonevets/geocode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Geocoding

Конвертация координат в адреса и наоборот, кэширование запросов

Прием данных - decoder

Разбирает очередь Кафки и декодирует координаты устройств в адреса с помощью алгоритма поиска

Сохранение данных - decoder

  1. Во время поиска адресов алгоритм поиска сохраняет их в таблицу geocode_cache
  2. Адреса пишутся:
    1. в базу x-company-devices таблицу data_processed и обновляются поля:
      • update_dt - дата последней модификации таблицы, то есть текущее время сервера
      • cледующие поля обновляются только если address_dt из БД старее, чем device_dt из задачи:
        • address - json строка (создать поле). Результат запроса нужен для нескольких языков
        • address_dt - это device_dt последнего события, для которого произошло успешное обновление адреса (создать поле)
    2. в файловую базу данных xxdb - написать клиент go-xxdb на golang
  3. Данные отправляются в модуль автоматизации

Пример поля address таблицы data_processed:

{
"en":"Петрохерсонецкий сельсовет, Grachyovsky District, Orenburg Oblast, Volga Federal District, Russia",
"ru":"Петрохерсонецкий сельсовет, Грачёвский район, Оренбургская область, Приволжский ФО, Россия",
"local":"Петрохерсонецкий сельсовет, Грачёвский район, Оренбургская область, Приволжский федеральный округ, Россия"
}

Cache service (gRPC и http)

Данный сервис служит для кэширования результатов запросов, которые идут от decoder и от клиентов по gRPC. Результаты запросов кэшируются в таблицу geocode_cache и при повторном обращении берутся из нее же. При запросе применяется алгоритм поиска

Типы запросов:

  • По координате получить адрес
  • По адресу получить координату (с помощью хэширования адресса)

В обоих случаях, если в запросе указан источник Source (Cache, Nominatim, Yandex, Google), то нужно искать только по этому источнику.

Search algorithm

Ищем по списку пока не найдем, а если найдем, то пишем в geocode_cache только для Яндекс и Google.

  1. Таблица geocode_cache. Если найдено, но дата записи старая - ищу дальше по списку.
  2. локальный Nominatim
  3. Яндекс
  4. Google
  5. default: Если по всему списку не найдено, то пишем NULL в geocode_cache, считаем что он действует 24 часа, а потом по новому ищем по списку.

Сохранять в InfluxDB статистику по успешности запросов по всем источникам

Таблица geocode_cache:

id updated source address address_hash lat lon lang encode
3 2021-02-22 19:46:41.370155+03 yandex Россия, Москва, Совeтская ул 4 3145177133033400300 547304 559946 ru-RU false

поле encode нужно для отличия запросов на кодирование от декодирования координат, чтобы один не затирал другой

Build

Установить protoc и затем выполнить make, бинарники будут помещены в папку build

Configure

Файл config/config.yaml содержит конфигурационные параметры: подключения к базам данных, входные точки сервиса и т.д.

Logging

./build/decoder и ./build/cache принимают булевый параметр "-log", при котором логи пишутся в одноименные файлы в домашней дирректории, каждая строка файла есть json строка, что удобно для автоматического парсинга логов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published