Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прочитал статейку о том, что Юкон уже поддерживает версионность: http://www.rsdn.ru/article/db/yukonvers.xml и некоторую перебранку: http://www.sql.ru/forum/actualthread.aspx?tid=145611 Ув. гуру! просьба не издеваться, а дать решение для версионника простенькой задачки. Сам я работаю с MSSQL2000 и плохо представляю как такое можно сделать на версионнике. Задачка простая - самодельный счетчик типа int. Итак: 1) есть таблица счетчиков: create table Counters( CounterId int, CounterVal int ) 2) есть таблица 'чего-нибудь' c PK, значение которого берется из Counters (с инкрементом): create AA( PK int, Attr char(10)) для блокировочника: declare @n int begin tran update counters set CounterVal = CounterVal+1, @n = CounterVal where CounterId = 10 insert into AA select @n, 'Attrib' commit PS: 1) Про автоинкрементные поля я знаю, но у нас софт (чужой) работает именно так. Причем, счетчиков (дыже для одной таблицы АА может быть несколько). 2) Уровень изоляции подразумевается Read Commited, не желательно его менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 10:29 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
А почему бы для этого не использовать генераторы уникальных последовательностей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 10:37 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
для этого существуют специальные объекты - sequence, автоинкрементных полей в оракле нет (ненужны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 10:39 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Запрос который написал будет точно так же работать и на версионнике... потому что там изменение точно так же блокирует данные, как и на блокировочнике, чудес-то не бывает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 10:41 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Yo!для этого существуют специальные объекты - sequence, автоинкрементных полей в оракле нет (ненужны). То же самое и в InterBase... причем они работают вне контекста транзакции. Интересно не появились ли sequence в юконе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 10:42 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Спасибо за живое участие! 2Серега, Yo!, Dik76 : интересно, а в Юконе уже есть sequence? Если нет, то как-то странно получится: версионность поддерживают, а sequence нет.... В принципе, в MSSQL есть автоинкрементные поля и работают они тоже вне контекста транзакции. Но это не то... задачу изменять придется... 2 Alex.Czech: я сомневаюсь, что запрос будет работать так же - на то он и версионник. представьте, что вставка с одним значением счетчика идет не в 1 таблицу АА, a в 10 (т.е. достаточно длительная - пару секунд + с конкуренция с другими такими же транзакциями) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 11:40 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Наверняка sequence в том или ином виде появятся в следующей версии СУБД от Microsoft и они как всегда назовут их "революционной технологией" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 11:52 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Дамир1Спасибо за живое участие! 2Серега, Yo!, Dik76 : интересно, а в Юконе уже есть sequence? Если нет, то как-то странно получится: версионность поддерживают, а sequence нет.... В принципе, в MSSQL есть автоинкрементные поля и работают они тоже вне контекста транзакции. Но это не то... задачу изменять придется... 2 Alex.Czech: я сомневаюсь, что запрос будет работать так же - на то он и версионник. представьте, что вставка с одним значением счетчика идет не в 1 таблицу АА, a в 10 (т.е. достаточно длительная - пару секунд + с конкуренция с другими такими же транзакциями) Ну и что ? Произошел update - значит, строка в таблице заблокирована до конца транзакции. И это верно как в блокировочнике, так и в версионнике. Отличие в том, что ЧТЕНИЕ не блокирует данные, с записью никаких различий нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:11 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Я очень сомневаюсь, что в MS SQL в ближайшее время появится sequence - там уже есть identity, ублюдочный, но аналог ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:13 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
А чем не нравится? -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:15 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
tygraА чем не нравится? Чем не нравится identity ? Тем, что как это нередко бывает у MS, за меня многое решили Я могу использовать identity только для автоинкрементного значения в одной таблице, и все. Sequence по возможностям богаче, и хотя в 95% случаев этого не нужно, но зато в тех 5% когда занадобится, в MS SQL начинаются геморрои и всякие залипухи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:17 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
значение SQUENCE я знаю до того, как начал транзакцию, а идентити - после ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:22 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
есть еще одна прикольная фича в Sybase ASE Во всех базах данных timestamp - временная метка - просто тип данных, а тут...) все по особому... create table #TTT (ts1 timestamp,ts2 timestamp) go Sybase ASE: Server Message: Number 2738, Severity 16 Server 'pnsybase', Line 1: A table can only have one timestamp column. Since table '#TTT_________00000770013300781' already has one, you can't add the column 'ts2'. MSSQL: Server: Msg 2738, Level 16, State 2, Line 1 A table can only have one timestamp column. Because table '#TTT' already has one, the column 'ts2' cannot be added. db2 => connect to test3 Информация соединения с базой данных Сервер баз данных = DB2/NT 8.2.0 ID авторизации SQL = DB2ADMIN Алиас локальной базы данных = TEST3 db2 => create table ttt(ts1 timestamp,ts2 timestamp) DB20000I Команда SQL выполнена успешно. db2 => ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:30 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
В MS SQL то же самое с timestamp. Это на самом деле совсем не тот же timestamp что в Оракл или DB2, просто однофамилец :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 12:31 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
авторзначение SQUENCE я знаю до того, как начал транзакцию, а идентити - после А зачем вам до ? Привычки файл-серверного программирования о себе знать дают? -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 13:26 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
А если задачу усложнить и вместо счетчика будет более сложная величина. Допустим текущие остатки по товару на складе? Я так понимаю тут sequence не поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 09:49 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
CripА если задачу усложнить и вместо счетчика будет более сложная величина. Допустим текущие остатки по товару на складе? Я так понимаю тут sequence не поможет... А если решать задачу обработки видео в реальном времени, то тут БД ваще не катит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 10:01 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
[quote] А зачем вам до? Привычки файл-серверного программирования о себе знать дают? [/quote] Номер счета например видеть хорошо бы до сохранения. Удобнее вставки подчиненных записей сразу же знать идентификатор родительской. Потом, те же партишин-вью организовать не по int-полю, а по varchar, типа 1B,1C,1D, где B,C,D например - идентифицирует филиал (это когда репликация нужна). Про "достоинства" разеделения identity по диапазонам в mssql, надеюсь не нужно объяснять. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 10:07 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
авторА если решать задачу обработки видео в реальном времени, то тут БД ваще не катит Вообще-то конкретный вопрос был задан, а вы мне какую-то пургу. В Oracle я не специалист, потому и спрашиваю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 10:24 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
CripВообще-то конкретный вопрос был задан, а вы мне какую-то пургу. В Oracle я не специалист, потому и спрашиваю... Это ты пургу спросил. По твоему "текущие остатки по товару на складе" - это усложнение начальной задачи "счетчик"? ИМХО, это вообще другая задача. О ней недавно ветка была - http://]http://www.sql.ru/forum/actualthread.aspx?tid=145611 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 10:35 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
авторНомер счета например видеть хорошо бы до сохранения. Зачем? авторУдобнее вставки подчиненных записей сразу же знать идентификатор родительской. Аналогично. Вставите родительскую - получите значение, тогда вставляйте подчиненные. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 10:54 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
>>>Зачем? Затем >>>Аналогично. Вставите родительскую - получите значение, тогда вставляйте подчиненные Я с клиента одним пакетом вставляю. А на клиенте, к примеру, два связанных датасета. И что я тогда в подчиненную запись подставлю для связи с родительской? -1? 0? Правильно - GUID сгенерить на клиенте (это по поводу identity, так зачем мне он). А гьюид разбалонсированный получается. Попробуй наверни на него партишин вью, наполнение партишин - непредсказуемо будет, количество партишин - постоянно (условия от A до Z), индексы на гьюид в таблицах - разбалансированы. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 11:15 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
Каким пакетом? Что, не можете сначала вставить родительскую, потом дочерние с полученным значением? Ну странно. Одним пакетом в две таблицы одновременно все-равно не вставить, как не старайся :) В общем, это только отговорки и привычка - куча людей работает с identity, вставляет мастер-детайл и все хорошо получается. Потому я с тем же успехом могу сказать: как же вы это без identity работаете!!!??? Непорядок! :)) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 12:51 |
|
||
|
Счетчик для версионника - как?
|
|||
|---|---|---|---|
|
#18+
2tygra а как можно было бы в моей задаче поступить. есть серификаты, там одна табличка, есть там id, cert_no, type. для различных типов своя нумерация начинающаяся с 1, у меня сейчас на каждый тип свой сиквенс, а как с автоинкрементом такое ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2004, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32845518&tid=1546045]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 446ms |

| 0 / 0 |
