Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
ASCRUS Alex.CzechStart value и seed value у IDENTITY безусловно настраиваются... так что имхо для репликации никаких проблем я не вижу. Вот когда нужно одно ID на несколько таблиц сразу автоинкрементить - это и есть те самые 5% (о которых я говорил в другом топике), где identity проигрывает Ради интереса - настраиваться то понятно настраивается. А вот не сбивается ли, если с других БД приходят записи с заведомо более высоким диапазоном номеров ? То есть работает у нас Identity в пределах 1-100 и равен 2, приходит с другой БД запись 101. Какой следующий номер будет присвоен при вставке новой записи в этой таблице ? По идее он должен равняться 3-ем. Сбивается, согласен. Не подумал об этом. Все равно репликацию на GUID-ах делал всегда, когда делал... точнее, в таблице делалось 2 ключа - int identity и плюс еще guid только для репликации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 16:51 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Ну вот мы и нашли оправдание существования большой статьи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 16:54 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
gardenmanБлин... чтобы узнать Identity-значение нужно обядательно вставить строку в таблицу. (сделать транзакцию) Последнее значение возвратится в @@identity. Чтобы получить значение из последовательности - нужно сделать запрос, который находится все транзакции. Разница - ОГРОМНА! Огромна для MSSQL. Это уже глобальная тема, на которую нынче принято отвечать "а вот в юконе все будет хорошо". Другой вопрос, что развязывание по времени этих двух событий само по себе может оказаться удобным, если идет какая-нибудь сложная схема со взаимодействием нескольких процессов - мне, правда, такого делать не приходилось. Другой аспект - секвенсоры позволяют легко и довольно эффективно получить массив будущих id-шников, в то время как @@identity вряд ли столь универсальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 16:55 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
а всегда ли будет @@identity=IDENT_CURRENT('table_name')+1 после добавления? и, каким образом мне сдвинуть значение identity? или зарезервировать какой-то промежуток значений для своей транзнакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 16:59 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
авторРади интереса - настраиваться то понятно настраивается. А вот не сбивается ли, если с других БД приходят записи с заведомо более высоким диапазоном номеров ? То есть работает у нас Identity в пределах 1-100 и равен 2, приходит с другой БД запись 101. Какой следующий номер будет присвоен при вставке новой записи в этой таблице ? По идее он должен равняться 3-ем. а разве у автоинкремента не так-же если я прямо пишу 101 то и запишется 101 а не 3 ? ЗЫ. в оракле номер берут из сиквенса в тригери а не из другой субд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:03 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Alex.CzechСбивается, согласен. Не подумал об этом. Все равно репликацию на GUID-ах делал всегда, когда делал... точнее, в таблице делалось 2 ключа - int identity и плюс еще guid только для репликации Хм. Согласитесь, эти две задачи удобнее решать одним полем :) P.S. Не продумал про сбивание. Слишком зашорен - привык, что "текущее значение" хранится и явно запрашивается-изменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:03 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
softwarer Alex.CzechСбивается, согласен. Не подумал об этом. Все равно репликацию на GUID-ах делал всегда, когда делал... точнее, в таблице делалось 2 ключа - int identity и плюс еще guid только для репликации Хм. Согласитесь, эти две задачи удобнее решать одним полем :) P.S. Не продумал про сбивание. Слишком зашорен - привык, что "текущее значение" хранится и явно запрашивается-изменяется. Соглашусь, конечно... в принципе можно решать и одним полем - типа GUID - если записей немного, иначе производительность падает. Но вообще мне самому идея identity не очень нравится, если честно, sequence несомненно лучше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:06 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Yo! авторхм.. как-то вы с темы на тему перескакиваете. По поводу того документа и оценки в нем интеграции .Net и MS SQL вы согласны или нет? Если да, то вопрос решен, если нет, это означает что вы не со всем в нем согласны, тогда зачем вы его вообще советовали смотреть?советовал смотреть чтоб вы вообще представляли в чем есть отличия..знаете, в отличие от некоторых (не будем показывать пальцем) прежде чем говорить про то что плохо в другой СУБД, я стараюсь в ней разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:12 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Yo!например про .net и java я не согласен - мне все равно через врапер или нет запускается моя java, главное чтоб потери в скорости небыло. когда появятся тесты тогда и можно поговорить о преимуществах прямого запуска, а так это просто слова (если не углублятся в сами языки и их конструкции).почему же просто слова? есть целый ряд статей, в которых написано в каких случаях .NET будет работать быстрее TSQL и наоборот. Они приводились на примере beta2, но тем не менее, даже на этой, совсем не оптимальной по производительности версии сервера .Net показывает себя очень даже неплохо и оправдывает свое присутствие в сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:28 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
segunпочему же просто слова? есть целый ряд статей, в которых написано в каких случаях .NET будет работать быстрее TSQL и наоборот. Они приводились на примере beta2, но тем не менее, даже на этой, совсем не оптимальной по производительности версии сервера .Net показывает себя очень даже неплохо и оправдывает свое присутствие в сервере. статьи на всьяпупкин.народ.ру действительно бывают очень интересными, может дадите линк где бы не поламерски организовали тестирование ? только не на словах и пальцах, а нормальные тесты которые я бы мог повторить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:33 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
2 softwarer Про хуже разбираться не скажу - передумал :)) По секвенсам/идентити. Да, когда нужно обеспечить уникальность счетчика на несколько таблиц одновременно или обеспечить вставку данных с бОльшими значениями, то тут identity хреново подходит, только если через дополнительную таблицу. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:46 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
2 Yo!: вообще-то в статьях как правило код, который при желании можно повторить и проанализировать. Но что-то говорит мне что вы, уважаемый, все равно не станете это делать. У вас есть SQL2k5 beta2? У вас стоит хотя бы SQL2k? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:47 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
автора всегда ли будет @@identity=IDENT_CURRENT('table_name')+1 после добавления? Всегда, если никто не успел добавить до того, как вы узнали IDENT_CURRENT('table_name') автори, каким образом мне сдвинуть значение identity? или зарезервировать какой-то промежуток значений для своей транзнакции? Ну измените текущее значение идентити, а то. что себе оставили, добавляйте с set identity_insert on Хотя я не припомню задач, где бы ID было нужно заранее, а тем более уж сразу несколько заразервировать. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:50 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
авторвообще-то в статьях как правило код, который при желании можно повторить и проанализировать. Но что-то говорит мне что вы, уважаемый, все равно не станете это делать. У вас есть SQL2k5 beta2? У вас стоит хотя бы SQL2k? ну покажите же наконец эту чудо статью, я заинтригован. я так понимаю я там увижу java код для оракла и аналогичный на .Net для юкона и соответствено замеры скорости ? и там же я так понимаю и увижу то самое превосходство ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 18:03 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
tygra Хотя я не припомню задач, где бы ID было нужно заранее, а тем более уж сразу несколько заразервировать Например при копировании ветки дерева ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 18:17 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
tygraХотя я не припомню задач, где бы ID было нужно заранее, а тем более уж сразу несколько заразервировать. Массовая загрузка данных. Запрос id - довольно дорогая операция, поскольку требует синхронизации на высшем уровне. Соответственно, если сервер занят не только загрузкой, запрашивать по одному номеру на каждую запись - довольно неэффективно. Полагаю, это справедливо для всех серверов - то есть, я не вижу способа избежать этой проблемы. Ну а масштабы - видны на достаточно простом примере (на пустом сервере). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 18:23 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
1. SEQUENCE it's cool :), но он не решает проблем с репликацией по большому счету, так как в базе-источнике и базе-приемнике свои значения упомянутого, которые могут также пересекатся, как и identity. Для репликации в идеале надо получать идентификаторы, практически гарантировано, уникальные вне зависимости от сервера, базы и таблицы. Этим требованиям до определенной степени удовлетворяет GUID, но никак не sequence в чистом виде, который по смыслу представляет обычный identity, но в масштабе всей БД, а не отдельной таблицы. 2. Кстати, до стандарта SQL2003 ни о каких SEQUENCE речи не идет, правда, не идет речи и об identity :) , это к тому, что MS SQL пытается не сильно отрыватся от базовых стандартов, что не всегда получается, ровно, как и у всех остальных, разве что Sybase ASA, и то по отрывочным слухам. Здесь можно поверить ACRUS, если он подтвердит, хотя по некоторым примерам, которые он приводил, тоже есть тенденция расширять стандарты ради удобства. Собственно это к тому, что многие возможности выходят за рамки стандарта и производители часто реализуют их по своему. И лучше это или хуже, IMHO, судить сложно. В частности, мне ни разу не приходилось сталкиваться с потребностью создавать сквозную нумерацию через несколько "разношерстных" таблиц за достаточно немалый срок работы с СУБД, и она кажется несколько "искусственной". Если таковая возможность требовалась, то обычно это было связано с тем, что таковые таблицы по смыслу были подчиненными и связаными с "главной" таблицей, в которой и было поле identity, значения которого мигрировали в ключ "подчиненных" таблиц. 3. Если в некоторых случаях был необходим признак, гарантировано уникальный и монотонно возрастающий в пределах БД, например, для отслеживания порядка создания записей из разных таблиц, для этого в MS SQL достаточно использовать тип timestamp, который не имеет ровно никакого отношения ко времени, а представляет тупо и монотонно возрастающее binary(8) значение. У него есть один "минус", оно изменяется при каждом обновлении строки, так как в некотором смысле представляет собой версию строки, и поэтому является его же "плюсом". При необходимости "помнить" первоначальное значение полученное при вставке, его можно сохранить в другом поле типа binary(8), триггером при вставке, например. Это ни плохо, ни хорошо, это так. 4. Потребность получить заранее значение типа autoincrement, до реальной вставки в таблицу, чтобы затем его использовать, может привести с одной стороны к тому, что разные пользователи могут получить одно и то же значение, что в дальнейшем может привести к конфликту при вставке. С другой стороны, если после каждого чтения значения такого счетчика оно инкрементируется, то возникает опасность быстрого "исчерпания" в случае неверного кодирования, например при "зацикливании". Опять же, если необходимо получить диапазон идентификаторов типа identity, то никто не мешает получить последнее вставленное значение, а затем "сдвинуть" его на нужный шаг, зная, что "пропущенный" промежуток можно использовать позже, но это на любителя и при острой необходимости. P.S. Sorry за многословность, в этом виноваты стакан водки и коньяка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 02:24 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
softwarer Guid же, насколько я понимаю, является "ответом на sequence" потому что позволяет MSSQL нормально реплицироваться - чего (насколько я в курсе) не умеет identity. вот сижу и думаю, как это у меня работает репликация на identity с разделением диапазонов по серверам? ведь не должна, а работает.... наверное мне только кажется, что у меня mssql, а реально там крутится oracle. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 05:59 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
ASCRUS Ради интереса - настраиваться то понятно настраивается. А вот не сбивается ли, если с других БД приходят записи с заведомо более высоким диапазоном номеров ? То есть работает у нас Identity в пределах 1-100 и равен 2, приходит с другой БД запись 101. Какой следующий номер будет присвоен при вставке новой записи в этой таблице ? По идее он должен равняться 3-ем. если пришел по репликации - и будет равняться 3. куда он денется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 06:05 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
Возвращаясь к первоначальной теме... dimitr какие выводы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 11:10 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
А выводы обязательно должны быть? ;-) По общим методам использования TT тут много интересного сказали, и почти все это хорошо коррелируется с моим собственным опытом. Насчет чрезмерной любви сиквелистов к TT я, пожалуй, соглашусь с выводами ASCRUS'а, ибо внятных доказательств обратного мы так и не услышали. Все еще более-менее спорной остается необходимость в CLTT... А так, в целом, неплохо поговорили... хотя без флейма все равно не обошлось ;-))) К слову, какие дополнительные атрибуты CLTT и DLTT поддерживают сервера? Я имею ввиду констрейнты, индексы, триггеры. Имеет ли практический смысл вообще иметь триггеры для DLTT? Или те же FK? И еще один нюанс - я так понимаю, что опции DELETE/PRESERVE ROWS для DLTT особого смысла не имеют? Или все же множество транзакций внутри ХП является общепринятой практикой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 11:34 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
dimitrА выводы обязательно должны быть? ;-) Если это будет в FB 2.0, то просто интересно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 11:59 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
ChA1. SEQUENCE it's cool :), но он не решает проблем с репликацией по большому счету, так как в базе-источнике и базе-приемнике свои значения упомянутого, которые могут также пересекатся, как и identity. Решает. Я даже написал, как именно. После этого пересечься они могут только в результате "действий руками" - ну а тут и GUID не спасет. ChA Для репликации в идеале надо получать идентификаторы, практически гарантировано, уникальные вне зависимости от сервера, базы и таблицы. Совершенно излишние требования. Вы просто подгоняете требования к тому, что есть в MSSQL. ChA 2. Кстати, до стандарта SQL2003 ни о каких SEQUENCE речи не идет, правда, не идет речи и об identity :) , это к тому, что MS SQL пытается Хм. Если бы сервера не отрывались от стандартов - мы бы их сейчас ругали совсем не за детали репликации :) ChAВ частности, мне ни разу не приходилось сталкиваться с потребностью создавать сквозную нумерацию через несколько "разношерстных" таблиц за достаточно немалый срок работы с СУБД, и она кажется несколько "искусственной". Если таковая возможность требовалась, то обычно это было связано с тем, что таковые таблицы по смыслу были подчиненными и связаными с "главной" таблицей, в которой и было поле identity, значения которого мигрировали в ключ "подчиненных" таблиц. Вы другими словами сказали то же самое - вводить искусственную таблицу с identity. Просто представьте себе, что "главная" таблица не содержит ничего, кроме этого id - ну и, быть может, еще пары атрибутов, типа "создатель" и "дата создания", ради которых не стоит городить таблицу. Что касается примера - пожалуй, самый "горячий" будет связан с популярным желанием сделать таблички физ-юр лиц со сквозными id - дабы "одним полем id адресовать обе таблицы". Я здесь не имею в виду поднимать тему "насколько это хорошо"; просто наиболее навязшее в зубах. ChA3. Если в некоторых случаях был необходим признак, гарантировано уникальный и монотонно возрастающий в пределах БД, например, для отслеживания порядка создания записей из разных таблиц, для этого в MS SQL достаточно использовать тип timestamp, который не имеет ровно никакого отношения ко времени, а представляет тупо и монотонно возрастающее binary(8) Согласен, это вполне удобный для репликации id. По крайней мере пока не пойдет вопрос переполнения :) ChAЭто ни плохо, ни хорошо, это так. Хм. А прокомментируете то, что я уже упоминал - если я правильно понимаю, такие манипуляции на триггерах связаны с необходимостью второй раз update-ить ту же запись (и соответственно с дополнительной нагрузкой). ChA4. Потребность получить заранее значение типа autoincrement, до реальной вставки в таблицу, чтобы затем его использовать, может привести с одной стороны к тому, что разные пользователи могут получить одно и то же значение, что в дальнейшем может привести к конфликту при вставке. Не может. Наличие такой вероятности автоматом свидетельствует об одной из двух крайне неприятных вещей: либо о возможности получить то же непосредственно при вставке, либо о жесткой синхронизации каждой вставки в таблицу - и тогда о больших базах можно забыть. ChAС другой стороны, если после каждого чтения значения такого счетчика оно инкрементируется, то возникает опасность быстрого "исчерпания" в случае неверного кодирования, например при "зацикливании". Хм. В случае неверного кодирования можно получить абсолютно любые результаты - даже верные, если повезет. Не понимаю, что следует из этого аргумента. Реально "теряется" весьма немного id-шников, и, полагаю, если бы они вычислялись при вставке, терялись бы настолько же часто - поскольку основной причиной потери является rollback. ChAОпять же, если необходимо получить диапазон идентификаторов типа identity, то никто не мешает получить последнее вставленное значение, а затем "сдвинуть" его на нужный шаг, зная, что "пропущенный" промежуток можно использовать позже, но это на любителя и при острой необходимости. Эта проблема, к сожалению, нормально решается только в Interbase - правда, там свои минусы. Тем не менее, возможность получить id до вставки весьма актуальна - в качестве простого примера можно назвать работу с мастер-деталью с клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 12:01 |
|
||
|
О временных таблицах замолвите слово...
|
|||
|---|---|---|---|
|
#18+
andy stвот сижу и думаю, как это у меня работает репликация на identity с разделением диапазонов по серверам? ведь не должна, а работает.... наверное мне только кажется, что у меня mssql, а реально там крутится oracle. ;) Думаю, реально у Вас крутится решения наподобие предложенного в упомянутой мной статье. Это решение кажется мне.. неоправданно сложным и неудобным - например, с моей точки зрения, диапазоны id вообще не слишком удачная идея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 12:03 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32846929&tid=1553899]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 436ms |

| 0 / 0 |
