Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранение пользователй в 2-х таблицах / 8 сообщений из 8, страница 1 из 1
14.11.2013, 09:25:58
    #38464483
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
Здравствуйте.
Прошу помощи в такой задаче.

Идея в следующем: Есть 2 таблицы пользователей с одинаковой структурой (активные и неактивные) и 2 таблицы с токенами, также одинаковой структуры, соответственно принадлежащие активным и неактивным пользователям. Все таблицы InnoDB.

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

Когда приходит запрос на авторизацию, токен ищется сначала в базе активных токенов. Если он там есть, т.е. пользователь активный, находим его в базе юзеров, все ОК - пользователь быстро включается в работу.

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

Вопрос: как это правильно организовать с точки зрения многопоточности и высокой нагрузки?
Чтобы в тот момент когда юзер с токеном переносится из одной таблицы в другую, вдруг приходит еще один авторизационный токен от этого юзера. Получится что в активных его ЕЩЕ нет, а в неактивных - УЖЕ нет.

На ум приходит только блочить все 4 таблицы. Не получится ли что они будут постоянно заблочены?
Использовать транзакции? Как корректно выстроить логику коммитов и ролбэков? Я пока не силен в транзакциях.
...
Рейтинг: 0 / 0
14.11.2013, 09:42:50
    #38464497
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
Oleg8000в активных его ЕЩЕ нет, а в неактивных - УЖЕ нет.Если сначала инсертить запись в таблицу активных, а потом удалять из неаткивных, тогда вроде с логикой все в порядке.
...
Рейтинг: 0 / 0
14.11.2013, 09:46:06
    #38464500
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
Oleg8000Пользователей предполагается реально много, поэтому решили разнести их по разным таблицамИМХО в этом есть смысл только если количество неактивных пользователей на порядки больше чем количество активных.
...
Рейтинг: 0 / 0
14.11.2013, 09:50:44
    #38464508
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
Oleg8000 , выстроив систему ускорения для активных пользователей (не факт, что от неё вообще есть хоть какой-то эффект), Вы накопали себе на пустом месте конкретный геморрой. Причём гарантированно дальше будет всё хуже и хуже...

Откажитесь от этой системы и верните одну таблицу на всё про всё - ну нет никакого профита от этого разделения. Если при единой таблице тормоза приводили к некомфортной раобте - то это не проблема количества записей в таблице, и тюнингом сервера можно добиться гораздо большего.
...
Рейтинг: 0 / 0
14.11.2013, 10:06:52
    #38464535
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
Да, приблизительно того же эффекта, как и от деления на две таблицы, можно добиться, если ввести в структуру поле boolActive и выполнить partitioning by range по нему. При наличии where boolActive = const в условии отбора (не в составе комплексного условия!) оптимизатор будет сканровать только нужный раздел.
...
Рейтинг: 0 / 0
14.11.2013, 10:11:30
    #38464547
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
vkleЕсли сначала инсертить запись в таблицу активных, а потом удалять из неаткивных, тогда вроде с логикой все в порядке.

Ситуация такая: приходят одновременно 2 запроса от неактивного пользователя:
- запрос 1 не нашел активного токена в момент t1, нашел в неактивных токенах в момент t2, начал перенос юзера между таблицами.
- запрос 2 не находит активного токена в момент t1, начинает искать в неактивных, но и в неактивных его тоже нет, т.к. запрос 1 успел его уже перенести в активные.

vkle ИМХО в этом есть смысл только если количество неактивных пользователей на порядки больше чем количество активных.
Именно это и предполагается, что будет очень-очень много неактивных, но которых нежелательно удалять, и которые будут висеть мертвым грузом на активных юзерах. Логика приложения позволяет иметь пользователю по несколько аккаунтов.

Akina , почему вы так думаете? Разьве скорость выборки не зависит от кол-ва записей в таблице? Я думаю, что если хорошо отладить это механизм переноса юзеров + поиграть с параметрами, которые влияют на перенос юзера в неактивную таблицу, то можно добиться стабильно хорошего результата на неограниченном кол-ве юзеров в целом
...
Рейтинг: 0 / 0
14.11.2013, 10:14:40
    #38464552
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
AkinaДа, приблизительно того же эффекта, как и от деления на две таблицы, можно добиться, если ввести в структуру поле boolActive и выполнить partitioning by range по нему. При наличии where boolActive = const в условии отбора (не в составе комплексного условия!) оптимизатор будет сканровать только нужный раздел.

Не слышал про partitioning by range . Пошел гуглить..
...
Рейтинг: 0 / 0
14.11.2013, 10:33:06
    #38464586
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение пользователй в 2-х таблицах
Oleg8000 Akina , почему вы так думаете? Разьве скорость выборки не зависит от кол-ва записей в таблице?Если количества различаются на порядок и более - да, зависит. Да и то при наличии правильных индексов - несильно. Ну или если объём данных на порядок больше размера оперативки.

Oleg8000Не слышал про partitioning by range . Пошел гуглить..
Вернись и больше НИКОГДА не делай этой глупости.
Гугл - только после того, как ничего не дал поиск по официальной документации . Но сейчас не тот случай.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Хранение пользователй в 2-х таблицах / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]