Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация сессийной таблицы, постоянно обновляемая таблица 
:(
    Опции темы
Smorodin
Дата 3.12.2010, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



В веб-приложении авторизация и идентификация пользователей устроена таким образом, что все сессии хранятся в таблице:

Код

--
-- Структура таблицы `sessions`
--

CREATE TABLE IF NOT EXISTS `sessions` (
  `sesid` varchar(50) NOT NULL,
  `ip` varchar(50) NOT NULL,
  `time` int(20) NOT NULL,
  `user` int(9) NOT NULL,
  `user_groups` varchar(255) default NULL,
  `user_name` varchar(255) NOT NULL COMMENT 'login из users',
  `hash1` varchar(100) NOT NULL,
  `from` varchar(255) NOT NULL,
  KEY `upd` (`sesid`,`ip`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;


На каждой странице выполняется запрос:
Код

SELECT * FROM `sessions` WHERE `sesid`='a26f2fa59e6760e4db6b3bcee9e9670c' AND `ip`='188.17.148.83' LIMIT 1


и в зависимости от отваета 
Код

INSERT INTO `sessions` VALUES('a26f2fa59e6760e4db6b3bcee9e9670c', '188.17.148.83', '1291357490', '0', '1', 'Гость', '8af1bcf386', '/')

или
Код

UPDATE `sessions` SET `time`='1291358180', `user`='1', `user_groups`='4,2,3', `user_name`='smorodin', `from`='/' WHERE `sesid`='a26f2fa59e6760e4db6b3bcee9e9670c' AND `ip`='188.17.148.83' LIMIT 1


Также каждые 2 минуты запускается очистка от записей, где `time` меньше на 3600 от текущего.

Как можно оптимизировать запросы и таблицу? Правильно ли выбран ключ? Спасибо.


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
Akina
Дата 3.12.2010, 09:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Smorodin @  3.12.2010,  10:38 Найти цитируемый пост)
Как можно оптимизировать запросы 

заменить все три запроса на один
Код

insert into ... on duplicate key update ...


Добавлено через 57 секунд
Цитата(Smorodin @  3.12.2010,  10:38 Найти цитируемый пост)
Правильно ли выбран ключ?

недостаточно данных для осмысленного ответа.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Smorodin
Дата 3.12.2010, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Спасибо!

А какие данные надо предоставить для осмысленного ответа?

Добавлено через 1 минуту и 10 секунд
Еще забыл спросить, правильно ли выбран тип таблицы ENGINE=MEMORY? Данные временные, при перезагрузке сервера восстанавливать не имеет смысла, при сбое тоже.


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
Akina
Дата 3.12.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Smorodin @  3.12.2010,  11:00 Найти цитируемый пост)
какие данные надо предоставить для осмысленного ответа?

Все.
Например - допускается ли мультивход? а мультисессии? какой тип запросов к этой таблице будет преобладать? будут ли запросы, связывающие эту таблицу с другими?

Цитата(Smorodin @  3.12.2010,  11:00 Найти цитируемый пост)
правильно ли выбран тип таблицы ENGINE=MEMORY?

Зависит от прогнозируемого максимального объёма данных в таблице.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Smorodin
Дата 3.12.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Цитата(Akina @  3.12.2010,  14:10 Найти цитируемый пост)
Например - допускается ли мультивход? а мультисессии?

На пару IP-SESID в таблице будет только одна запись, если Вы об этом.
Но возможно существование записей с одним IP, но разными SESID

Цитата(Akina @  3.12.2010,  14:10 Найти цитируемый пост)
какой тип запросов к этой таблице будет преобладать?

Явное преобладание
Код

UPDATE `sessions` SET `time`='1291358180', `user`='1', `user_groups`='4,2,3', `user_name`='smorodin', `from`='/' WHERE `sesid`='a26f2fa59e6760e4db6b3bcee9e9670c' AND `ip`='188.17.148.83' LIMIT 1


Цитата(Akina @  3.12.2010,  14:10 Найти цитируемый пост)
будут ли запросы, связывающие эту таблицу с другими?

Нет. Все поступающие данные уже подготовлены, все исходящие обрабатываются непосредственно программой.


Цитата(Akina @  3.12.2010,  14:10 Найти цитируемый пост)
Зависит от прогнозируемого максимального объёма данных в таблице. 

Максимальный прогнозируемый 500 записей

Это сообщение отредактировал(а) Smorodin - 3.12.2010, 11:35


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
Akina
Дата 3.12.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Smorodin @  3.12.2010,  12:34 Найти цитируемый пост)
Явное преобладание
Код

... WHERE `sesid`='a26f2fa59e6760e4db6b3bcee9e9670c' AND `ip`='188.17.148.83'

В таком случае ключ выбран скорее правильно, чем нет. Хотя от тебя требуется подтвердить допустимость ОДНОВРЕМЕННОГО существования двух сессий с одним номером, но с разных ИПов. В зависимости от задачи может потребоваться считать, что идентификатор сессии - это уникально, а ИП проверять на неизменность, и при изменении сбрасывать сессию. 
Да! не забудь - по умолчанию MEMORY-движок использует hash-индексы. Если тебе нужен строго B-tree, то укажи это явно в структуре таблицы.

Цитата(Smorodin @  3.12.2010,  12:34 Найти цитируемый пост)
Максимальный прогнозируемый 500 записей

А размер записи - около килобайта. Да, MEMORY вполне нормальный выбор.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 3.12.2010, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Пятьсот записей... по килобайту.....не сохраняемые....

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 3.12.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  3.12.2010,  13:02 Найти цитируемый пост)
Какойетить ассоциативный массив на стороне приложения 

Представь браузерную игру... sid + ip идентифицирует игрока, который может запустить пяток окон браузера с разными функциями - в одном воюет, в другом лечится, в третьем торгует и так далее - причём параллельно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 3.12.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Представил. Не понял. Сериализовать доступ к коллекции приложения должно бы быть не сложно.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Smorodin
Дата 3.12.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Цитата(Akina @  3.12.2010,  14:52 Найти цитируемый пост)
Хотя от тебя требуется подтвердить допустимость ОДНОВРЕМЕННОГО существования двух сессий с одним номером, но с разных ИПов.

Это допустимо, извините, что сразу об этом не подумал.

Всем спасибо за обсуждение!
Но ассоциативный массив на стороне приложения - не самый лучший шаг. Если бы SESID была уникальным идентификатором, можно было бы назначить ключем элемента массива. Искать по элементам с ключем SESID, где IP=искомому? Массив получится очень динамичный, с постоянной записью. Если хранить в файле - рано или поздно придется задуматься о блокировке на запись, очереди. Недоработку по структуре таблицы исправить гораздо проще, чем изменять структуру или логику определенной части приложения. Во всяком случа, для меня.
Если случится такое, что число записей выростет до 5000? 


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
Smorodin
Дата 6.1.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



А что если таблицу переложить на eaccelerator или memcashe? Как считаете?


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.