Поддержание порядка ранжирования в постоянно обновляемой базе данных

Предположим, что таблица базы данных содержит информацию о поисковом запросе в каждой строке. В таблице есть целочисленный столбец "ранг" для указания порядка, в котором поисковые термины должны быть представлены на веб-сайте.

Как мне лучше всего реализовать и поддерживать этот порядок рангов?

Проблема, которую я хочу избежать, состоит в том, чтобы иметь термин с номерами 1,2,3,4,..,100, и когда, например, ранг 50 внезапно становится интересным, он получает свой новый ранг, равный 1, и тогда все термины между ними должны иметь свои Номер сортировки увеличен на единицу.

Конечно, установка начальных номеров сортировки на 100, 200, 300, 400 и т. Д. Оставляет некоторое пространство для перемещения, но в какой-то момент он сломается.

Другим подходом может быть интервал между рядами с некоторым фиксированным смещением, но он также может в некоторых случаях прерваться в реальном сценарии.

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

1 ответ

Как насчет этой идеи. Как очередь.

Создать дополнительную таблицу Task(id, new_rank, ...), Создать триггер для основной таблицы на вставке.

Когда новая строка будет вставлена ​​в основную таблицу, выполните:

  1. Запретить вставку новой строки в таблицу man;
  2. Вставить новую строку в Task Таблица.

Например, каждый час запускайте хранимую процедуру, которая:

  1. Выбрать все новые строки из Task таблица в курсоре;
  2. В цикле:

    2.1. Запустить увеличение (подготовка) ранга в основной таблице (чтобы можно было вставить новое значение ранга строки);

    2.2. Вставьте новую строку в таблицу man;

    2,3. Удалить строку из Task,

Может быть, вам нужно сделать 2,1-2,3 пунктов в транзакции.

Другие вопросы по тегам