|
|
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Есть таблица, из которой на обработку несколько параллельно скриптов берут информацию. Для того чтобы скрипты не обрабатывали одни и теже данные на. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Можно-ли как либо уместить эту конструкцию в одном запросе. Или использовать другой алгоритм поскольку этот не устраивает по скорости. При этом желательно не использовать LOCK дабы скрипты не выстраивались в очередь. Заранее признателен за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 15:57 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Зачем делать сложно, когда можно просто? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 16:23 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Да, я думал об этом. Но как я смогу выбрать точно те данные которые проапдейтил, NOW() ведь измениться (запрос длиться > 1 секунды). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 16:55 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Дык ты же все равно выбираешь с вычитанием 10 дней. Из-за одной секунды ничего не произойдет. Или ты еще где-то выбираешь? Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 08:28 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Да, там идёт сбор инфы. A поскольку её очень много и собрать её надо в минимальное время, задержки на выборку очень большие (на сетевые соеденения => загрузка процессора от 100 потоков ~10%) я запускаю огромное количество потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 11:04 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Ну если NOW() может отстать на секунду - ну сделай диапазон Или я не понял :) Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 11:25 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
Немного переформулирую постановку вопроса: Ситуация: Много скриптов в один момент времени могут запросить данные из таблици на обработку. Условия: Кол-во скриптов : > 100 (желательно чем больше - тем лучше). Выборка порции происходит 1-3 сек. Требования: Выборка должна быть максимально распаралелена (оптимально 5 параллельных выборок). Cкрипты недолжны брать на обработку одни и теже данные. Скрипт не имеет постоянного соеденения с базой: ВЗЯЛ - ОТРАБОТАЛ - ПОЛОЖИЛ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 12:39 |
|
||
|
Нетривиальная задачка: SELECT совмещённый с UPDATE
|
|||
|---|---|---|---|
|
#18+
>Cкрипты не должны брать на обработку одни и те же данные. в противном случае всё летит к чертям собачьим? ну если так, предлагаю сделать буфер для проверенных страниц; что-то типа create table buffer (id int not null, constraint unique (id)); сюда в рамках транзакции пишешь ид страниц (если повторение - генерится ошибка, пытаешься снова, в общем, геморроишься по полной программе), которые собираешься проверять, можно добавить поле с датой проверки (чтобы удалять проверенные, скажем, сутки назад, страницы). В основную таблицу предлагаю ввести дополнительное поле checkid - случайно (лучше - регулярно) генерящееся число, которым метишь записи со страницами, ид которых поместил в буфер, и уж потом по checkid выбираешь нужные страницы. Второй способ: 1)помечаешь нужные страницы: Код: plaintext 1. Код: plaintext 1. Код: plaintext ma X mo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 16:15 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32816958&tid=1854551]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 420ms |

| 0 / 0 |
