|
|
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
Если быть точнее, то конечно слово "свёрка" тут не подходит, надо что-то другое. В общем суть в следущем. Есть пользователи (U_ID), есть статьи и реклама (A_ID). Крайне желательно показывать юзеру при посещении очередной страницы в блоке рекламы выжимку из статьи или баннер, который ему ещё не показывался. Приоритетом показа на данном этапе не заморачиваемся. То есть условие - пока ВСЕ блоки не показали, два раза одно и тоже пользователь видеть не должен. До сих пор для отслеживания была простая табличка tcr_User_Adv из U_ID и A_ID, в которую писали, что уже просмотрено, а при запросе рекламного блока отбирали его по условию WHERE A_ID NOT IN (SELECT A_ID FROM tcr_User_Adv). Всё бы замечательно, но время шло, пользователей становилось вс больше, рекламы тоже, на сегодня в перекрёстной таблице имеем порядка 75 миллионов записей. Время выборки сами понимаете какое... Вот и пришла мне в голову мысль, для пользователя хранить данные в виде Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. Никто не заморачивался с таким? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 11:38 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
Un4given, Как вариант с битовой маской: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 11:50 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
S_Andrey_A, да, такой вариант тоже рассматривали, место экономит сильно, но поиск опять же только программно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 11:55 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
Un4given, Если считаем, что ID рекламы соответствует позиция в маске. Ищем первый выключеный бит. По его позиции определяем ID, показываем его юзеру. Если все реализовать через AND OR XOR все будет работать очень быстро. Плюс на такой маске можно будет реализовать вариант с анализом частоты показов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 12:16 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
Единственно, тип SET не подходит по длине, тогда можно было бы и запросы организовать, мне получается нужно поле байт в 600 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:01 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
Un4given WHERE A_ID NOT IN (SELECT A_ID FROM tcr_User_Adv) Не нравится мне эта конструкция. exists гораздо надежнее. Код: plaintext конечной выборки? То есть грубо говоря сколько записей нам надо посмотреть в таблице tcr_User_Adv на вызов? Например на каждый вызов (посещение) есть сто (тысяча) комбинаций баннеро-страниц. Для каждой комбинации надо просмотреть есть ли она уже в показе итого имеем X лишних сканов на которые уходит Y миллисекунд. Итак X и Y признаны неприемлимыми. Если допустить что Приоритетом показа на данном этапе не заморачиваемся и что данные только добавляются (то есть внутренний id всегда растет) то как временная мера можно запоминать последний показанный id и заменить условие на Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:15 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
ID к сожалению вразнобой и, более того, приоритеты меняются. Но сейчас пока не до них. Если копнуть глубже, то даже не столько выборка тормозит, сколько добавление записи. На выборку уходит примерно 0,3 - 0,4 секунды, на добавление две с половиной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:33 |
|
||
|
"Свернуть" данные?
|
|||
|---|---|---|---|
|
#18+
Un4given на добавление две с половиной.Именно. А все ваши свертки они только увеличивают время вставки (ибо больше интеллекта требуют). Далее вопрос к вашему ДБА, а на что уходит время вставки (поиск места в блоке, поиск свободного блока, и т.д.) и расшивать эти узкие места. Возможно (тут уже тонкий лед предположений) ее имеет смысл секционировать (например разбить на 100 подтаблиц в зависимости от двух последних цифр id пользователя) если велика конкуренция. Но это лучше на профильный подфорум. Далее как то надо эту табличку чистить. Реклама становится неактивной - всю историю посещений долой. Пользователь просмотрел все - всю историю посещений долой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:53 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37202851&tid=1542228]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
164ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 433ms |

| 0 / 0 |
