Конвертация координат в адреса и наоборот, кэширование запросов
Разбирает очередь Кафки и декодирует координаты устройств в адреса с помощью алгоритма поиска
- Во время поиска адресов алгоритм поиска сохраняет их в таблицу geocode_cache
- Адреса пишутся:
- в базу x-company-devices таблицу data_processed и обновляются поля:
- update_dt - дата последней модификации таблицы, то есть текущее время сервера
- cледующие поля обновляются только если address_dt из БД старее, чем device_dt из задачи:
- address - json строка (создать поле). Результат запроса нужен для нескольких языков
- address_dt - это device_dt последнего события, для которого произошло успешное обновление адреса (создать поле)
- в файловую базу данных xxdb - написать клиент go-xxdb на golang
- в базу x-company-devices таблицу data_processed и обновляются поля:
- Данные отправляются в модуль автоматизации
Пример поля address таблицы data_processed:
{
"en":"Петрохерсонецкий сельсовет, Grachyovsky District, Orenburg Oblast, Volga Federal District, Russia",
"ru":"Петрохерсонецкий сельсовет, Грачёвский район, Оренбургская область, Приволжский ФО, Россия",
"local":"Петрохерсонецкий сельсовет, Грачёвский район, Оренбургская область, Приволжский федеральный округ, Россия"
}
Данный сервис служит для кэширования результатов запросов, которые идут от decoder и от клиентов по gRPC. Результаты запросов кэшируются в таблицу geocode_cache и при повторном обращении берутся из нее же. При запросе применяется алгоритм поиска
Типы запросов:
- По координате получить адрес
- По адресу получить координату (с помощью хэширования адресса)
В обоих случаях, если в запросе указан источник Source (Cache, Nominatim, Yandex, Google), то нужно искать только по этому источнику.
Ищем по списку пока не найдем, а если найдем, то пишем в geocode_cache только для Яндекс и Google.
- Таблица geocode_cache. Если найдено, но дата записи старая - ищу дальше по списку.
- локальный Nominatim
- Яндекс
- 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 нужно для отличия запросов на кодирование от декодирования координат, чтобы один не затирал другой
Установить protoc и затем выполнить make, бинарники будут помещены в папку build
Файл config/config.yaml содержит конфигурационные параметры: подключения к базам данных, входные точки сервиса и т.д.
./build/decoder и ./build/cache принимают булевый параметр "-log", при котором логи пишутся в одноименные файлы в домашней дирректории, каждая строка файла есть json строка, что удобно для автоматического парсинга логов