Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Время последнего изменения таблицы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Vinyl
Отправлено: 14 Сентября, 2012 - 08:46:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Всем доброго времени.
Делаю корзину заказчику, без регистрации и авторизации (так надо заказчику).
Т.к. постоянной БД пользователей нет, ставлю каждому уникальному посетителю куку вида
PHP:
скопировать код в буфер обмена
  1. md5(time().$_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'])

а потом создаю временную таблицу с тем же именем, что и значение куки.

Сама корзина работает так:
Проверяет, стоит ли кука
--- Если стоит -
------ Проверяет, есть ли соответствующая таблица в БД
--------- Если есть - записывает туда товар
--------- Если нет - создает таблицу и записывает товар
--- Если не стоит -
------ Ставит куку, создает таблицу и записывает товар

При каждой успешной записи кука продлевается на сутки.

Хочу написать скрипт, который будет раз в час (cron) чистить базу от таблиц, изменения в которых проводились более чем 24 часа назад. Как узнать дату последней модификации таблицы? Вариант с доп.полем даты/времени в каждой таблице не хочу, есть причины. Логи парсить тоже нет особого желания. Есть какой-нибудь другой вариант? Заранее спасибо.

P.S. Движок InnoDB

(Отредактировано автором: 14 Сентября, 2012 - 09:39:35)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
EuGen Администратор
Отправлено: 14 Сентября, 2012 - 09:31:07
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




На каждую такую куку - таблицу? Что-то не в порядке с архитектурой. Храните все в одной таблице, привязывая товары корзины к пользователю.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 14 Сентября, 2012 - 09:33:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Пишите в одну таблицу. Здесь вполне уместна простая сериализация данных в text'овое поле.

Vinyl пишет:
Как узнать дату последней модификации таблицы?

На сколько помню, эта цифра не хранится за ненадобностью. Можно смотреть по дате модификации соответствующий файлов, в принципе.


-----
PostgreSQL DBA
 
 Top
Vinyl
Отправлено: 14 Сентября, 2012 - 09:42:05
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




EuGen пишет:
На каждую такую куку - таблицу? Что-то не в порядке с архитектурой.

А чем плох такой вариант? По мне так наоборот, чем для каждого запроса будет перебираться огромная единственная таблица (у них за один заказ могут 300-400 наименований взять, клиентов в онлайне - 50-100), легче под каждого пользователя таблицу сделать.

Мелкий пишет:
Можно смотреть по дате модификации соответствующий файлов, в принципе.

Нельзя. InnoDB одним файлом всю базу хранит.
(Добавление)
Кстати, насчет
Vinyl пишет:
InnoDB одним файлом всю базу хранит.

Т.е., в принципе, база итак вся перебирается, только не php, а движком MySQL, так? Может тогда целесообразней на MyISAM работать?


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Мелкий Супермодератор
Отправлено: 14 Сентября, 2012 - 10:02:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Vinyl пишет:
Нельзя. InnoDB одним файлом всю базу хранит.

innodb_file_per_table

Vinyl пишет:
чем для каждого запроса будет перебираться огромная единственная таблица

Memcache и пускай себе перебирается для промахов кэша. К тому же, зачем её перебирать? Будет только некоторый оверхед на пересчёт индексов при добавлении новый сессий, но 1 запрос на добавление сессии от юзера - ничто на общей нагрузке.

Если у вас десятки миллионов открытых сессий - можете партицировать по первым символам md5, который даёт вполне нормальное распределение. Но по таблице на сессию никто в здравом уме не делает.


-----
PostgreSQL DBA
 
 Top
Vinyl
Отправлено: 14 Сентября, 2012 - 10:27:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Мелкий пишет:
innodb_file_per_table
Не дадут скорее всего. Там хостинг, причем не лучший. Хотя не сталкивался, можно попробовать.

Мелкий пишет:
Но по таблице на сессию никто в здравом уме не делает.

Почему? Причина же какая-то есть? Интересно просто.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Мелкий Супермодератор
Отправлено: 14 Сентября, 2012 - 10:46:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Vinyl пишет:
Причина же какая-то есть?

В первую очередь - это просто неудобно сопровождать. Во вторую - не даёт сопоставимых с получаемым неудобством преимуществ.


-----
PostgreSQL DBA
 
 Top
Vinyl
Отправлено: 14 Сентября, 2012 - 10:53:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Мелкий пишет:
В первую очередь - это просто неудобно сопровождать

Единственное на данный момент неудобство для меня - очитска мусора. А так - все удобно. Может я что-то упускаю из вида...


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB