Надежный кэш для потоков событий с настроенным сроком действия в Java - PullRequest
0 голосов
/ 17 января 2019

Я хочу реализовать легкую структуру кэширования данных в Java, в коде. Я прежде всего думал о реализации чего-то с нуля с помощью HashMap, но думал, что могут быть доступные решения.

Кэш будет находиться между приложением и уровнем базы данных, и я, вероятно, буду обновлять его каждые 5 минуты. Все данные представлены в формате JSON и содержат серию событий с timestamp. Правило истечения срока действия состоит в том, что я хочу, чтобы в кеш включались только события, чьи timestamp находятся в пределах, скажем, [-10min, +10min] от текущего времени вставки, а не от времени вставки (я мог бы вставить несколько данных одновременно в кеш, однако их временную метку может быть другим). Таким образом, в основном каждый раз, когда я собираю некоторые данные из базы данных, мне нужно будет выполнить некоторую обработку JSON и вставить / обновить кэш. Это может быть до нескольких тысяч файлов JSON, поэтому мой масштаб не очень велик.

Как лучше всего реализовать этот кеш? Какую структуру данных вы бы порекомендовали использовать?

UPDATE: Несколько вещей, на которые стоит обратить внимание:

  • Структура данных: События данных, которые я извлекал из базы данных, сортируются во времени (сотни потоков синхронизированных событий на каждый вызов). Так что мой кеш будет фактически временным окном событий. Он сохраняет события [-10min, +10min] текущего времени при вставке (каждые 5 минут).

  • Вставка: Поскольку события данных, которые я извлек из базы данных, отсортированы по времени. Поэтому я не уверен, стоит ли мне стирать весь кеш и вставлять новые потоки событий, или передавать события в кеш, и он позаботится об обновлении себя с учетом временных отметок.

  • Извлечение: Чтобы выполнить поиск, теперь мне нужно извлечь серию событий, попадающих в интервал [start_time, end_time], который является подмножеством данных моего кэша (поэтому эти значения меньше, чем 10 minutes). Поэтому учитывайте это, предлагая правильную структуру данных.

...