У меня логичный вопрос (логично правильное слово?) К общему кешированию ответов базы данных в среде API отдыха. Я использую для этого elasticsearch. Кэширование (сохранение и получение записей) не проблема. Также можно запросить c сущностей по идентификатору. Моя проблема в области ответов списка. Вот проблема:
Схема базы данных для лучшего понимания:
| ID | firstname | lastname |
-----------------------------
| 1 | John1 | Dow1 |
| 2 | John2 | Dow2 |
| 3 | John3 | Dow3 |
| 4 | John4 | Dow4 |
У вас есть 4 записи в базе данных и запрос 2 (последние две, смещение 2 с пределом 2. Здесь будет быть ID 3 и 4) из них (разбивка на страницы). Эти две сущности сохраняются в elasti c для быстрого второго запроса. В следующий раз вы запрашиваете список и выбираете первую страницу (смещение 0, предел 2. Здесь ID 1 и 2). Теперь elasti c проверяет, есть ли что-то в кеше, находит первые две выбранные записи (ID 3 и 4) и возвращает их. Но это неправильные записи, потому что мы запросили первую страницу, которая должна иметь ID 1 и 2.
Мое решение на данный момент состоит в том, чтобы выполнить запрос подсчета (база данных совпадений), чтобы проверить, сколько записей должно быть там ( в этом примере всего 4 записи), и если у elasti c меньше, я запрашиваю базу данных и обновляю кеш. Правильный порядок обеспечивается порядком по пункту и работает, если есть все записи. Но это всегда связано с обращением к базе данных и (немного) разрушает преимущества кеша.
Это общая проблема с результатами кеширования списков или есть какое-то решение, которое я мог бы использовать для этого? Может быть, мое решение хорошее (но я так не думаю :)). Я должен сказать, что этот сервис не используется миллионами пользователей ... он нацелен на базу пользователей в несколько тысяч. Может быть, всегда обращаться к базе данных в этом случае нормально?
Заранее спасибо за вашу помощь! Извините за возможные орфографические ошибки ... Я даже проверял орфографию :)