Автоматически создать таблицу на сервере MySQL на основе даты? - PullRequest
0 голосов
/ 04 января 2010

Есть ли эквивалент cron для MySQL?

У меня есть PHP-скрипт, который запрашивает таблицу на основе месяца и года, например:

SELECT * FROM data_2010_1

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

Мне было интересно, смогу ли япросто установите что-то на самом сервере MySQL, который будет создавать таблицу (на основе таблицы по умолчанию) в полночь первого числа месяца.


Обновление

На основев комментариях, которые я получил, я думаю, что это не лучший способ достичь моей цели.Итак, вот еще два вопроса:

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

  2. Каковы потенциальные проблемы с моим доморощенным методом, который я изначально придумал?

Ответы [ 6 ]

3 голосов
/ 04 января 2010

Если у меня есть таблица с тысячами строк, добавляемых ежемесячно, это потенциально затягивает ресурсы?


Это то же самое количество строк, если вы проводили разделение таблицы по месяцам. Базы данных обрабатывают миллионы строк - это не проблема.

Каковы потенциальные проблемы с моим доморощенным методом, который я изначально придумал?


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

1 голос
/ 04 января 2010

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

0 голосов
/ 09 марта 2010
UPDATE pageviews SET 
        yesterday = CASE WHEN last_update_time > xxx_ts THEN yesterday ELSE today END,
        today     = CASE WHEN last_update_time > xxx_ts THEN today + 1 ELSE 1     END, 
        acc = acc + 1, last_update_time = UNIX_TIMESTAMP() WHERE page_id = 'xxx';

http://tech.shreeni.info/2010/01/conditional-mysql-statements-lifesaver.html

facebook.com / zahoor80

0 голосов
/ 05 января 2010

Если у меня есть стол с тысячами строки добавляются ежемесячно, это потенциально затягивать ресурсы? Если Итак, каков наилучший способ разбиения эта таблица, так как выше Verboten

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

Проблемы с разделами

Я не считаю это «разделением», но это полностью зависит от ваших данных и от того, как вы их используете. В любой системе SQL вы можете предварительно индексировать на основе столбцов или комбинации столбцов. Когда вы предварительно индексируете, вы в основном «разделяете». Поэтому, если вы знаете, что большую часть времени будете просматривать данные, основанные на датах (например, месяц / год), тогда вы добавляете индекс в поле даты. С абстрактной точки зрения это разделение ваших данных на дату. То, какие индексы вы создаете, зависит от того, как вы собираетесь использовать данные - чем больше вы создаете, тем больше времени / пространства используется для поддержки индекса (ов), но тем выше производительность для операторов, использующих индекс.

0 голосов
/ 04 января 2010

Какова была цель вашего первоначального «создания таблицы по расписанию»? Вы беспокоились о том, чтобы хранить все эти данные в Интернете? Может быть, вы хотели удалить данные за предыдущий месяц по какой-то причине безопасности?

Если вам действительно нужно разделить месяцы, у вашей идеи «создания таблицы по расписанию» есть проблема синхронизации. Планирование события на полночь не гарантирует, что оно будет выполнено точно в полночь. Итак, что вы будете делать, если запланированное создание происходит через доли секунды после того, как ранний пользователь вслепую выполняет запрос, ожидающий существование текущей таблицы? По этой причине лучше хранить пустую таблицу в том же месте, что и запрос.

ОК, вы можете запланировать создание незадолго до полуночи. Но если наличие пустой таблицы в Интернете для будущей даты не является проблемой, то почему бы просто не создать таблицы вручную за год или два?

0 голосов
/ 04 января 2010

Взгляните на планировщик событий, доступный с MySQL 5.1:

http://dev.mysql.com/doc/refman/5.1/en/events.html

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