Поддержание порядка ранжирования в постоянно обновляемой базе данных
Предположим, что таблица базы данных содержит информацию о поисковом запросе в каждой строке. В таблице есть целочисленный столбец "ранг" для указания порядка, в котором поисковые термины должны быть представлены на веб-сайте.
Как мне лучше всего реализовать и поддерживать этот порядок рангов?
Проблема, которую я хочу избежать, состоит в том, чтобы иметь термин с номерами 1,2,3,4,..,100, и когда, например, ранг 50 внезапно становится интересным, он получает свой новый ранг, равный 1, и тогда все термины между ними должны иметь свои Номер сортировки увеличен на единицу.
Конечно, установка начальных номеров сортировки на 100, 200, 300, 400 и т. Д. Оставляет некоторое пространство для перемещения, но в какой-то момент он сломается.
Другим подходом может быть интервал между рядами с некоторым фиксированным смещением, но он также может в некоторых случаях прерваться в реальном сценарии.
так есть ли другой подход к решению этой проблемы.... (это может иметь отношение к тому, как поисковые системы поддерживают ранжирование и изменение порядка, но я не могу найти удачу)
1 ответ
Как насчет этой идеи. Как очередь.
Создать дополнительную таблицу Task(id, new_rank, ...)
, Создать триггер для основной таблицы на вставке.
Когда новая строка будет вставлена в основную таблицу, выполните:
- Запретить вставку новой строки в таблицу man;
- Вставить новую строку в
Task
Таблица.
Например, каждый час запускайте хранимую процедуру, которая:
- Выбрать все новые строки из
Task
таблица в курсоре; В цикле:
2.1. Запустить увеличение (подготовка) ранга в основной таблице (чтобы можно было вставить новое значение ранга строки);
2.2. Вставьте новую строку в таблицу man;
2,3. Удалить строку из
Task
,
Может быть, вам нужно сделать 2,1-2,3 пунктов в транзакции.