Интеграция динамической подачи в базу данных результатов с разбивкой на страницы - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть два основных источника данных, с которыми мне нужно сделать mashup в php.Первый - это база данных SQL, а другой - фид.Оба источника содержат похожие элементы, которые необходимо отсортировать по «имени» или «весу».В каждом из источников более 1 тыс. Предметов.Просто сохранить канал в БД не вариант, так как канал меняется слишком часто.

Чего я хочу добиться, так это точного разбиения по страницам.Например: если я отображаю на второй странице результаты, содержащие 50 элементов, отсортированных по «имени», я не читаю все данные из фида и базы данных, а только необходимые элементы из обоих источников.

В настоящее время я предполагаю, что это требуетданные базы данных являются фундаментальными данными и каким-то образом объединяют данные фида в них, но: 1) я могу ошибаться, 2) я не могу понять, как бы я ни старался.

Любые предложения о том, как этого добиться?

PS Результаты не должны быть полностью точными.Они только должны казаться такими.

1 Ответ

1 голос
/ 26 декабря 2011

Время от времени учитывайте результаты кэширования.Затем вы можете определить приблизительное положение нужных вам элементов.

Для вашего примера пользователя, запрашивающего вторую страницу, используя ваш кеш, вы полагаете, что (на момент кеширования) точные результаты будут элементами # 20-50 из базы данных.и предметы № 30-50 из корма.Поскольку фид часто меняется, вы не можете просто читать одни и те же элементы и показывать их пользователю.Вместо этого вы можете прочитать дополнительные элементы, например, 10 с обеих сторон.Для выше, это были бы пункты # 10-60 из базы данных и # 20-60 из подачи.Используя дополнительные элементы и находя совпадения с кешем, вы сможете получить более точные результаты, чем при запросе одинаковых # 20-50 и # 30-50.

Таким образом, результаты не будут полностью точными, как вы позволите в "PS".Но чем чаще пользователи делают запросы, тем точнее будет ответ, поскольку каждый запрос будет немного обновлять кэш.Вам также потребуется реализовать отслеживание истечения срока действия кэша, если некоторые страницы не запрашивались пользователями в течение длительного времени и, следовательно, полностью устарели.

Возможной реализацией вышеперечисленного будет дополнительная таблица со строкой для каждогокомбинация "страница" - "тип сортировки".В вашем примере для 50 элементов на странице и всего 2000 элементов будет 40 строк для «сортировки по имени» и 40 строк для «сортировки по весу».Каждая строка содержит информацию о том, какие элементы из обоих источников были взяты в последний раз, когда была получена доступ к конкретной странице, и отметка времени последнего обновления этой информации.

PS Вы не публикуете какие-либо подробности, из-за которых трудно их опубликоватьболее конкретный ответ, но я надеюсь, что то, что я написал, поможет!

...