Каков наилучший способ объединения данных из эластичного поиска и MySQL для разбивки на страницы? - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю над приложением, имеющим пользователей данных в упругом поиске и пользователей автомобилей данных в MySQL.

Требование: представление разбиения на страницы для пользователей автомобилейконкретный штат, как показано ниже

Просмотр

Штат : Нью-Йорк

Идентификатор пользователя 1 |UserCar ID 1

Идентификатор пользователя 1 |UserCar ID 2

Идентификатор пользователя 3 |UserCar ID 10

Идентификатор пользователя 4 |Идентификатор UserCar 15

У одного пользователя может быть любое количество автомобилей.

Я подумал о следующих двух подходах.

1) Извлечь всех пользователей из данного состояния изЭластичный поиск, затем извлечение всех автомобилей этих пользователей из MySQL, а затем на основе номера страницы отправьте разделенные данные.

2) Извлечение пользователя по пользователю из упругого поиска, а затем извлечение этих пользовательских автомобилей из MySQL ипродолжайте до тех пор, пока не достигнете количества записей на этой странице.

Я думаю, что оба вышеупомянутых метода неэффективны.Каков наилучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Если вы хотите создать в браузере таблицу пользовательских машин, то оставьте данные этих автомобилей в левом соединении с реляционной таблицей пользовательских машин из MYSQL, используя limit & offset.здесь я предполагаю, что вы используете данные на стороне сервера.

Затем получите данные конкретных пользователей из ES, потому что получение данных из ES быстрее.затем, со стороны клиента, вам нужно добавить или обновить столбец таблицы, используя JS.

Запрос ES должен выглядеть следующим образом:

GET /users/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "terms" : { 
                    "id" : [1, 2, 3]
                }
            }
        }
    }
}
0 голосов
/ 24 февраля 2019

Я бы получил страницу пользователей от ES (только одну обязательную страницу), а затем обогатил ее необходимой информацией об автомобилях из DB, просто соответствующими автомобилями.

Чтобы ускорить второй этап обогащения автомобилей, я рекомендую иметь кеш - будь то полная БД в памяти или просто LRU.

Итак, один выбор из ES нужной страницы и обогащение в памяти соответствующих автомобилей.Это должно быть эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...