|
|
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста, как из таблицы организовать очередь. Нужны всего 2 возможности: 1.достать(и удалить) первую запись 2.положить новую в конец В таблице не желателен первичный ключ, тем более автоинкрементный, т.к. очередь будет часто использоваться и автоикрементное поле быстро кончится. Вопрос как организовать все это наиболее эффективно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 12:53:15 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
Навскидку написать всой счетчик и не ломать себе голову, min(),max() или временные метки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 13:21:35 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2miem Ого! Ну у вас и системка, если автоинкрементное поле типа bigint быстро кончится! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 13:24:57 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2.положить новую в конец В конец чего? Уж не думаете ли Вы, что записи в таблицах имеют порядковый номер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 13:36:47 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2Genady нет не думаю. Мне нужна очередь лежащая в базе. По-моему это понятно объяснено. Принцип: первый вошел, первый вышел. 2alexeyvg bigint все равно закончится рано или поздно. А очередь должна продолжать работать. Одновременно, конечно, в ней не будет хранится max bigint записей. 2ALL Вопрос был про эффективность решения задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:12:27 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
Ну тогда ,помоему,timestamp и при начале периода актуальности записей выставляй его на новый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:15:27 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
доп поле в котором номер от начала - поддерживается на тригерах удаляется строка - update-1 если не единственная При вставке сначала вставляется потом добавляем поле max()+1 Сумбурно но думаю общий смысл понятен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:27:20 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2 Maxx а поподробнее и что значит " при начале периода актуальности записей" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:29:10 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2 dao >удаляется строка - update-1 если не единственная это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:35:32 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
периоды актуальности записей - рабочий период,то что он будет следует из ваших слов в таблице одновременно не будет храниться max(bigint) может я не правильно вас понял. Так моя идея какова,если вам не нужны все занчения из таблицы,а только значения для определенного рабочего периода,то при его начале определяете новую временную метку,в последствии очередь легко реализуема,но елси нет разбивки по периодам то тогды только счетчик,или опять же datetime. ЗЫ All Any idea? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:39:38 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
в тригере на удаление - проверяешь последняя ли занись если на последняя то обновляешь доп поле set field=field-1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:40:55 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
Соответственно удаляешь всегда запись со значением 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:42:46 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
А если классическим способом: доп. поле, явлающееся указатлем на соседа... и т.д. Можно даже двойной связанный список сделать. ______ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:48:37 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
Поле типа timestamp закончится намного быстрее. Для поля типа bigint, если вставлять 1000000 записей в сек. круглые сутки, то хватит на 507357 лет. Желаю Вам учавствовать в решении проблемы 509359-го года. По эффективности - быстрый вариант с bigint+identity; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 14:48:44 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2alexeyvg про bigint я погорячился. простые подсчеты говорят, что вы правы. а постоянное вычисление MIN при SELECT и DELETE, это не накладно, или лучше использовать select top 1 * from t1 ? можно что-нить подобное придумать для DELETE ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 15:02:46 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 15:35:07 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
select top 1 * from t1 использовать вместо MIN можно, только если по автоинкрементному полю сделать кл. индекс, да и то правильность без order by не гарантируется. А делать поле кластерным - возможно, будет медленно. Тут всё зависит от типичной длинны очереди. Если помещается на одну страницу - тогда без индекса и MIN и MAX быстрее всего. Если на несколько страниц - тоже подойдёт. Ну а если в очереди - 1000...000 записей - тогда автоинкрементному полю сделать уникальный некластерный индекс и искать по MIN и MAX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 15:35:53 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
всем большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2002, 16:44:36 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
если поле "автоинкремент" - индекс только кластерный... затрат на поддержку индекса 0... добавляются запися всегда в конец.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 02:26:15 |
|
||
|
работа с таблицей как с очередью
|
|||
|---|---|---|---|
|
#18+
2MiCe Тут можно поспорить. Предсавьте, что очередь небольшая и интенсивно используемая. При кластерном индексе будут постоянно выделяться новые страницы для новых элементов очереди и освобождаться страницы для доставаемых элементов. Поэтому я и писал - некластерный. А если элементов совсем мало - на одну или там три страницы - быстрее всего вообще без индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2002, 11:40:11 |
|
||
|
|

start [/forum/search_topic.php?author=Dmitriy001&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
get settings: |
9ms |
get forum list: |
12ms |
get settings: |
12ms |
get forum list: |
9ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 1083ms |
| total: | 1254ms |

| 0 / 0 |
