|
|
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
RXLmiksoft, Что делает решение еще менее универсальным и повышает вероятность появления трудно находимых ошибок.Я уже высказывал свое мнение , что идеального решения тут существовать не может. Т.е. остается только выбирать из неидеальных. LOCK TABLE - одно из таких решений. И не такое уж плохое, если в обсуждаемой транзакции не происходит больше ничего, кроме инсерта. Другое решение , которое предложил Alex_Ustinov, более подходяще в случае сложных и/или длительных транзакций. А больше серьезных вариантов я в топике не вижу, возможно, пропустил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 16:18:55 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 16:33:36 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
Более надежным решением я бы назвал такое, которое можно поместить в функцию или процедуру и которое не мешало бы транзакции и не зависело бы от нее. Еще более идеальный вариант должен корректно реплицироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 16:47:20 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
RXLmiksoft, Мое предложение . Позжее опишу подробно.Имхо, GET_LOCK/RELEASE_LOCK лучше блокировки таблицы только тем, что не блокирует апдейты этой же таблицы. И хуже тем, что в случае появления двух таких "дурацких" таблиц в системе и, одноврменно, в случае необходимости работать сразу с обеми таким таблицами из одной сесси, они будут мешать друг другу. Кстати, вопрос топикстартеру - а апдейты этой таблицы бывают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 16:50:06 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
RXLБолее надежным решением я бы назвал такое, которое можно поместить в функцию или процедуру и которое не мешало бы транзакции и не зависело бы от нее. Еще более идеальный вариант должен корректно реплицироваться.вижу только один выход, чтобы не было "общей точки блокировки", как заметил miksoft - для КАЖДОГО СИКВЕНСА создавать отдельную таблицу MyIsam seq_mytable( curr_value BIGINT UNSIGNED NOT NULL, inc_value BIGINT UNSIGNED NOT NULL); здесь уже можно лочить почти спокойно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 21:04:07 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
епрст, забыл добавить или же использовать общую таблицу-InnoDB для всех сиквенсов но только в режиме READ_UNCOMMITED (но могут возникнуть дырки в СиКВенсе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 21:07:36 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
кстати, по-моему насколько помню в Оракле так и происходит: если после Инсерта идет откат транз-ии - задействованный в триггере (до 11g) сиквенс все-равно увеличивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 21:11:09 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovвижу только один выход, чтобы не было "общей точки блокировки", как заметил miksoft - для КАЖДОГО СИКВЕНСА создавать отдельную таблицу MyIsam seq_mytable( curr_value BIGINT UNSIGNED NOT NULL, inc_value BIGINT UNSIGNED NOT NULL); здесь уже можно лочить почти спокойноЗависит от характера данных. Если значение cat во вставляемых записях меняется редко, например, раз в день и одно на всю систему, то этот вариант ситуацию не улучшит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2010, 22:09:07 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
Кстати, вопрос топикстартеру - а апдейты этой таблицы бывают? Да, конечно, хотя и не часто. Как я понял, все решения сводятся к созданию дополнительной MYISAM таблицы. Если создать MYISAM таблицу соответствий `cat`, `последнее значение`, то ее в любом случае надо блокировать, что тоже может создать проблемы. Создавать полный дубликат таблицы `cat`, `id` с primary key (`cat`, `id`) не рационально... P.S. Что касается сикуенсов, то насколько я помню, их в Postgres, например, нужно создавать для КАЖДОЙ последовательности, что решение не упрощает, т.к. `cat` может периодически появляться новый. Могу ошибаться, т.к. с Postgres работал давно. Если же sequence`ом можно генерировать для разных `cat`, то я бы перешел на Postgres :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2010, 15:49:17 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
myprogaКак я понял, все решения сводятся к созданию дополнительной MYISAM таблицы. Если создать MYISAM таблицу соответствий `cat`, `последнее значение`, то ее в любом случае надо блокировать, что тоже может создать проблемы.Блокировать MYISAM таблицу не нужно, она и так блокируется на время инсерта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2010, 16:44:58 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
miksoft, Блокировать MYISAM таблицу не нужно, она и так блокируется на время инсерта. Нужно, если таблица: `cat` | `last_id`, а `cat` - уникальный ключ в этой таблице. Т.е. не дублирующая основную, а содержащая только счетчик для каждого `cat`. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2010, 17:04:53 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
myprogamiksoft, Блокировать MYISAM таблицу не нужно, она и так блокируется на время инсерта. Нужно, если таблица: `cat` | `last_id`, а `cat` - уникальный ключ в этой таблице. Т.е. не дублирующая основную, а содержащая только счетчик для каждого `cat`.Все равно не вижу зачем ее специально блокировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2010, 17:35:23 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
myproga, Блокировать не надо. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2010, 01:46:49 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
В ЛОКЕ INSERT INTO CLONE_MY_TAB ( cat ,id) VALUES ("cat", NULL); можно пот'ом DELETE возвращаем LAST_INSERT_ID() нет времени пока разбираться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2010, 02:14:55 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov, RXL, Похоже, что так и придется делать, раз лучшего решения нет. Всем спасибо, кто принял участие в обсуждении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2010, 17:24:34 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
RXL, Блокировать не надо. В этом случае нет, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2010, 17:26:55 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
myproga, Кстати, если включить эти операторы в функцию, то в запросе с ее участием все таблицы, использованные в функции блокируются для записи. Включая и те, из которых производится только чтение. Скажем, если сделать генератор в UDF, то блокировки можно избежать. Жаль вот только, что интерфейс UDF такой примитивный, а то столько дел можно было бы натворить... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2010, 13:35:38 |
|
||
|
Уникальный номер (нестандартный autoincrement), нужен совет
|
|||
|---|---|---|---|
|
#18+
javajdbcmyproga, 1. серилизовать доступ к раздатчику ИД -- например сериализе в жаве 2. предпологаю (неплохо бы доказать) что такой вариант будет атомарно-безопасным: insert into ABC values (new_val1, new_val2, (select max(id) from ABC where cat=CAT1) + 1) если будет ругатся про мутируюшую таблицу, то сделать ето в подселекте Объясните, почему решение с подзапросом (как вариант, оформленным в функцию) - плохо? Разве такой insert не будет обработан как транзакция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2015, 17:33:44 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=36518810&tid=1832355]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
312ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 661ms |

| 0 / 0 |
