Как записать время вставки в базу данных MySQL - PullRequest
0 голосов
/ 11 июля 2011

Я хочу удалить строку таблицы из моей таблицы new_data, как только этой строке будет 45 минут, а затем ввести ее в другую таблицу с именем old_data.

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

Есть ли другой способ сделать это?если нет, то как я могу настроить таблицу для записи insert_time?

правка добавлена ​​

Как мне написать это утверждение, чтобы получить правильные данные в таблицу old_data

SELECT * FROM new_spots WHERE (NOW()-created_at)>45mins

, а затем вставить вышеприведенное втаблица old_data

Ответы [ 4 ]

1 голос
/ 11 июля 2011

вы запрашиваете какую-то особенность auto expiration, она не встроена в mysql. Memcached предоставляет эту функцию.Так что, возможно, будет проще достичь своей цели следующим образом:

при вставке данных в вашу систему вы:

  1. вставляете свои данные в memcached с истечением 45 минут - послеЧерез 45 минут данные автоматически исчезают из memcached.
  2. вставьте данные в таблицу old_data со столбцом created_at - в случае, если вам нужно перестроить свою memcached, когда ваша memcached придется перезапускать или по другим причинам.

Так что каждый раз, когда вам просто нужно получить новые данные из memcached - как побочный эффект, это быстрее, чем получить данные из mysql:).

1 голос
/ 11 июля 2011

вы можете указать значение столбца времени при вставке:

INSERT INTO x (created_at) VALUES (NOW());

дополнительно вы можете настроить VIEW, чтобы показывать вам только последние записи.

0 голосов
/ 11 июля 2011

@ keymone показал вам, как захватить время вставки.Затем периодически (каждая минута кажется чрезмерной - каждые 5 минут или 15 минут?) Просматривайте список, соответствующий критериям, и для каждой записи вставляйте его во вторую таблицу и удаляйте из первой таблицы.

0 голосов
/ 11 июля 2011

Я не думаю, что есть автоматический способ сделать это. Вот несколько альтернативных идей.

Используйте CRON

У меня похожий сценарий, когда нам нужно объединить данные из одной таблицы в другую. Достаточно простого инструмента командной строки, работающего через CRON. Мы получаем несколько сообщений в секунду на наш веб-сервер, и каждое из них приводит к вставке базы данных. Таким образом, объемы невелики, но они достаточно похожи на ваш сценарий

Мы используем функцию NOW () для записи времени вставки, и после того, как записи устаревают 1 час, мы обрабатываем их. Это не совсем час, но это достаточно хорошо. Вы можете увидеть поле create_on ниже.

CREATE TABLE glossaries (
    id int(11) NOT NULL auto_increment,

    # Our stuff ...

    created_on datetime default NULL,
    KEY owner_id (owner_id),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Использовать CRON и триггер

В качестве альтернативы вы можете использовать триггер базы данных , чтобы начать обработку. Вам все еще нужно что-то запланированное, чтобы вызвать срабатывание триггера, но вы получите максимальную производительность /

Chris

...