Существование записей в базе данных зависит от времени - PullRequest
0 голосов
/ 12 января 2011

У меня здесь такая ситуация.

  • Система аукционов, в которой перечислены «активные» ордера (их крайний срок еще не наступил)
  • ордеров много, поэтому лучше иметь поле «активным»"вместо того, чтобы перечислять их на основе запросов времени

Я не эксперт по базам данных, просто пользователь.Как лучше всего реализовать этот сценарий?

  • Нужно ли вручную проверять поле "deadLine" и периодически менять статус "активный"?
  • Может ли Mysql автоматически изменять поле?
  • Насколько требовательны запросы типа "заказы выбора, когда" крайний срок "прошел"
  • Лучше ли использовать логический критерийили метка времени для поиска?это как 0,05% активных, 9,95% пассивных записей

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

Ответы [ 2 ]

1 голос
/ 12 января 2011

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

Если вы решили, что вам нужно вести отдельный список активных аукционов, подумайте о том, чтобы сделать это не со специальным столбцом (и в значительной степени потерянным индексом), а создать таблицу active_auctions, которая содержит только столбцы первичного ключа аукционы. Добавьте строку в эту таблицу для каждого аукциона, который станет активным, и удалите его, когда он станет неактивным. СОЕДИНИТЕ эту таблицу к основному аукционному столу, чтобы получить список текущих активных аукционов.

1 голос
/ 12 января 2011

Я думаю, что ваш второй пункт является сомнительным:

Есть много заказов, поэтому лучше иметь поле "активный", а не перечислять их на основе запросов времени.

Вероятно, лучше иметь время окончания для «заказа», а затем запрашивать активные заказы, ища текущее время до времени окончания.Активное поле даст вам паршивую избирательность, если вы индексируете его (индекс растрового изображения может быть лучше).Кроме того, вам нужно обновить строки, чтобы изменить их с активных на неактивные - и вы могли бы делать что-то с активными заказами после их крайнего срока, потому что активный флаг не изменился вовремя.

  1. Да, выпришлось бы запрашивать активные флаги, которые должны быть неактивны - используя драгоценную полосу пропускания запросов к СУБД.
  2. Нет, поле не может быть изменено автоматически.
  3. Необходимое ОБНОВЛЕНИЕ хуже, чем просто выбор.
  4. Да, вам нужно что-то вроде конечной отметки времени.

Перемещение старых заказов на вторичное хранилище (что-то кроме основной таблицы, не обязательно вне СУБД, не говоря уже о ленте)вполне вероятно, хорошая идея.Это также не критично ко времени;Вы можете сделать это в любое время после того, как заказ перестал быть интересным.

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