DedAlex |
04-06-2008 09:45 818027 |
Поиск несуществующего значения.
Есть два скрипта которые работают с одной базой, и оба добавляют в нее записи. Точнее один - многопользовательский сервер. Он для скорости работы сначала делает запрос типа "SELECT MAX(id)", а потом INSERT, но между запросами проходит достаточно много времени и они со вторым скриптом бывает портят данные. Эти записи удаляются и остаются "дыры" в числовом ряду.
Можно ли найти эту "дыру" и записать данные в нее?
|
vadimiron |
04-06-2008 09:53 818033 |
DedAlex,
А может дать юазе самой об этом заботиться и воспользоваться полем, в котором автоматически будут генерироваться ID?
стать для размышления
|
DedAlex |
04-06-2008 10:27 818051 |
vadimiron, переписать сервер довольно проблематично, там эта вставка идет в нескольких местах. Он создавался для монопольного доступа к базе и не преполагает совместной работы (на запись) с другими программами. Вариант с блокированием базы (LOCK), тоже не помогает.
|
Если "переписать сервер довольно проблематично", значит есть желание заполнять "дыры" исключительно вторым скриптом?
Как вариант - создать таблицу-пул пропусков и переписать второй скрипт, чтобы брал id оттуда. Красивого (быстрого) решения найти имеющиеся пропуски нет, а на будущее надо так же переписать процедуру которая удаляет кривые записи, чтобы информация о них попадала в пул.
|
vadimiron |
04-06-2008 11:45 818114 |
DedAlex,
Вообще можно, конечно, скриптом вытаскивать все значения и циклом проверять пустые значение, но естественно это не эффективно.
Я тоже за вариант, который предложит Busla
|
DedAlex |
04-06-2008 12:51 818149 |
Цитата:
Цитата Busla
Если "переписать сервер довольно проблематично", значит есть желание заполнять "дыры" исключительно вторым скриптом? »
|
Да, только вторым скриптом. Для него скорость работы не столь критична.
Цитата:
Цитата Busla
Как вариант - создать таблицу-пул пропусков и переписать второй скрипт, чтобы брал id оттуда. »
|
А можно поподробнее. Вы предлагаете изменить сервер, что бы он при удалении записи заносил "пустой" номер в другую таблицу?
|
DedAlex, а у вас удалением кривых записей занимается основной серверный скрипт? - он разве в состоянии делать это корректно? - как я понял из описания, для него это - совершенно нештатная ситуация.
|
DedAlex |
04-06-2008 15:13 818233 |
Цитата:
Цитата Busla
DedAlex, а у вас удалением кривых записей занимается основной серверный скрипт? »
|
Это игровой сервер, и в результате такой ошибки получается что у человека оказывается другая вещь. Но с такой записью сервер прекрасно работает, ведь формат данных остается правильным, просто получается другой идентификатор.
|
Время: 01:00.
© OSzone.net 2001-