|
|
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Скажите пожалуйста, вот я вношу изменения в таблицу, используя preparedStatement для этого, (СУБД MySQL), нужно ли перед вызовом метода preparedStatement.executeUpdate(); посылать запрос "LOCK TABLES `mytable` WRITE;" и после выполнения preparedStatement.executeUpdate(); разблокировать таблицу с помощью запроса "UNLOCK TABLES;" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 00:23 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
обязательно, если больше одного пользователя. :) если изменения только из 1 программы производятся то можно просто метод, который это делает синхронизировать (synchronized). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 01:37 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
обязательно, если больше одного пользователя. :) нушто в mySQL все так плохо? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 07:03 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
в моем случае многопользовательский режим (одновременно обращаются к базе около 10 пользователей или больше), причем одновременно кто то может читать, а ктото может писать, а еще кто то может в это время вообще удалять целые поддеревья базы. пока конфликтов не было обнаружено, но возникло небольшое сомнение.. Насчет синхронизации метода - я сомневаюсь что так правильно - ведь здесь речь идет о JDBC, у него свои методы внутренние уже есть. так скажите точно - нужно делать или не нужно блокировку, которую я указал в самом начале темы? да или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 07:36 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
Вобщем можно явно блокировать, но лучше пусть это делает сервер. Наскока я знаю - по умолчанию этим занимается сам сервер, но при желании можно его так настроить чтобы лочить таблицы самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 07:58 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
Кроме блокировок по умолчанию можно использовать модификаторы. INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ... LOW_PRIORITY, DELAYED - это модификаторы планирования. Например LOW_PRIORITY - низкий приоритет записи. Если идет чтение из таблицы, запись будет ждать пока чтение не кончится. Если во время ожидания придет ещо одно чтение, оно вклинится между первым чтением и ждущей записью итд. mysql.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 08:05 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
Блокировка в многопользовательском режиме - очень плохой подход. Используйте либо транзакции, либо optimistic locking. В последнем случае в таблицу добавляется поле version int NOT NULL DEFAULT '0', перед обновлением проверяется, какая версия в базе и какую версию вы "взяли" на обновление. Несовпадение означает, что кто-то успел выполнить свое обновление и имеет место коллизия. Совпадение означает, что все ОК и можно обновлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 09:22 |
|
||
|
нужно ли блокировать таблицу перед ее изменением?
|
|||
|---|---|---|---|
|
#18+
М.ГоловановБлокировка в многопользовательском режиме - очень плохой подход. Используйте либо транзакции, либо optimistic locking. В последнем случае в таблицу добавляется поле version int NOT NULL DEFAULT '0', перед обновлением проверяется, какая версия в базе и какую версию вы "взяли" на обновление. Несовпадение означает, что кто-то успел выполнить свое обновление и имеет место коллизия. Совпадение означает, что все ОК и можно обновлять. :-) топикстартеру: не стоит думать, что во всех субд блокировки - это действительно плохой подход (очень понятно об этом написано у кайта, по моему в первой главе). предложенный вариант реализации оптимистичного блокирования выглядит крайне странным. я думал что это несколько другое (если судить по ораклу). кстати, как разрулить одновременный доступ к этой колонке? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 10:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33387263&tid=2150934]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 513ms |

| 0 / 0 |
