Чтобы определить, как часто использовался какой-либо объект, я использую таблицу со следующими полями;Как правильно очистить таблицу
id - objectID - timestamp
Каждый раз, когда используется объект, это ID и time()
добавляются. Это позволяет мне определить, как часто объект использовался в последний час/минута/секунда и т.д.
После одного час, строка бесполезна (я не проверяю выше одного часа). Тем не менее, я понимаю, что неразумно просто удалять строку, потому что это может испортить первичный ключ (auto_increment ID).
Итак, я добавил поле под названием «active». Перед проверкой того, как часто использовался объект, я перебираю все WHERE active=1
и устанавливаю его в 0, если прошло более 1 часа. Я не думаю, что это создаст проблемы параллелизма между несколькими пользователями, но это оставляет мне много неиспользуемых данных.
Теперь я думаю, что, возможно, лучше всего до ввода новых данных использования проверить, есть ли поле с active=0
, а затем вместо того, чтобы вставлять новую строку, обновлять ее с новыми данными и устанавливать активные к 1 снова. Однако для этого потребуется блокировка таблиц, чтобы предотвратить одновременное обновление нескольких клиентов.
Может ли кто-нибудь пролить свет на это, пожалуйста?
Как вы подразумеваете «присвоить значения явно»? – natli
@MichaelSlade является правильным (+1 голос). Вы можете использовать 'objectID' как« Основной ключ »(без автоинкремента), чтобы убедиться, что у вас нет дубликатов. Вы можете удалить старые строки, потому что это не повлияет. Кроме того, вы можете использовать 'INSERT ON DUPLICATE KEY' (http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html), чтобы обновить временную метку строки, если она уже существует. –
@mazzucci Я думаю, что вы неправильно поняли, мне нужно * дублировать записи на объект ID. В конце концов, объект можно использовать несколько раз в час/минуту/секунду. – natli