Примитивная аналитическая база данных с REST-API. Реализация запроса /pages основано на предварительном подсчёте всех уникальных значений pages в файле и сохранении списка страниц в отдельный файл unique_pages.csv
Реализация запроса /similarity?page1={page1}&page2={page2}&from={timestamp1}&to={timestamp2} Считает приблизительное значение Jaccard Similarity. Погрешность зависит от выбора параметра timeIntervalInSeconds при создании preprocessingService.
При выборе значения timeIntervalInSeconds = 1 решение будет выдавать точное значение индекса.
Решение основано на нескольких факторах.
- Для поиска подходящего под запрос диапазона используется бинарный поиск по заранее сформированному файлу со всеми уникальными значениями timestamp
- Далее, зная необходимый диапазон формируется два множества уникальных uid для страниц page1 и page2. Для этого используется заранее сформированный на предобработке файл с множествами для каждого отдельного page и полуинтервала времени
- Создаётся пересечение этих двух множеств и подсчитывается длина всех множеств
- Считается коэффициент Жакара
Для запуска можно использовать IDE IntelliJ IDEA