Имя: Пароль:
1C
 
Почему 1С 80 использует GUID а не LONG INT для ссылок.
0 Гений 1С
 
гуру
02.11.06
16:10
Ведь LONG INT работал бы гораздо быстрее в запросах и т.п.
Если тут начнут темы про репликацию, вот рецепт:
1С могла бы для ссылок внутри базы использовать LONG INT, в то же время для каждого объекта хранить GUID, который бы использовался бы при выгрузках и при репликациях.
Так что вот сижу и думаю - почему GUID?
1 ТелепатБот
 
гуру
02.11.06
16:10
2 Херрес
 
02.11.06
16:12
ну держать и гуид и лонг инт - значит базы будут пухнуть ещё сильнее. И так уже неприлично...
3 Добрый Лемур
 
02.11.06
16:13
(0)Ты имеешь ввиду, что обработка чисел (Long INT) идет гораздо быстрее обработки символов (GUID).
4 Херрес
 
02.11.06
16:14
Вообще я у себя на ответственных регистрах с особо крупными измерениями делаю как раз тип - число.
Ну не удобно конечно в запросах, зато совесть по поводу скорости - чиста.
5 Гений 1С
 
гуру
02.11.06
16:15
(3) я имею ввиду, что база данных быстрее работает с LONG INT, чем с GUID...
6 Гений 1С
 
гуру
02.11.06
16:25
(2) Базы пухнуть не будут, индексы будут занимать меньше места, секете? А в индексах многократно дублируются ключевые поля.
7 Гений 1С
 
гуру
02.11.06
16:25
Может быть в этом секрет "тормозов" 8-ки?
8 Херрес
 
02.11.06
16:28
(7) да, в этом. И ещё в тормозном интерпретаторе

ты прав только цена решения слишком высока.... Тотальное введение собственных идентификаторов превратит удобнейшую платформу в обычный аксесс
9 Херрес
 
02.11.06
16:29
(8) +1 и ещё в промежуточных итогах. Это ж фактически процессинг куба при каждом движении... Чистые OLTP системы конечно быстрее... в записи, но не в выборке
10 France
 
02.11.06
16:33
ну, можно было бы привести пример "пухнущих баз" на сравнении 16 битной гуид с 8 битной бигинт (лонгинт нету у мсскл)...

ps.. как хранится в файловой версии - одному б.н известно..
11 Гений 1С
 
гуру
02.11.06
17:03
(8) Ты про что, какое введение собственных идентификаторов???
12 orefkov
 
02.11.06
17:03
Это просто.
Для создания нового идентификатора типа long int надо обратится к базе, залочить таблицу, считать последний текущий, обновить последний текущий, разлочить таблицу.
При использовании guid'а новый идшник легко создает клиент без всяких обращений к БД.
А для современного железа 8 или 16 байт длина ключа - не велика разница.
13 Гений 1С
 
гуру
02.11.06
17:03
(10) Франс. тебе уже говорили, что база будет меньше весить, т.к. индексы будут весить меньше, чем ГУИДЫ каждой ссылки, дополнительно хранимые в ней для репликации..
14 Херрес
 
02.11.06
17:10
(12) т.е. что, получается guid уменьшает блокировки базы ??
т.е. это благо, что ли ?
15 orefkov
 
02.11.06
17:14
Все что уменьшает блокировки базы, благо :)
К тому же Гений лукавит, говоря, что индексы станут меньше, если использовать для репликации guid дополнительным полем, тк по нему все-равно придется строить индекс.
16 Херрес
 
02.11.06
17:17
(15) ну это наверно будут уже другие индексы, которые не будут пролистываться при соединениях или отборах по ключу с лонгинт ?
И ускорение в запросах мы всё же получим. В чём я убедился на практике
17 orefkov
 
02.11.06
17:20
(16)
Можно узнать, как проводилась практика?
18 Херрес
 
02.11.06
17:26
(17) к сожалению точных замеров не проводил, но дело было так.
300000 позиций номенклатуры, 300 документов по 15 строк в день. Списание по средней.
В лоб на типовой проводит секунд 10
Делал свой регистр, измерения Товар, Склад  (ссылочные)
было уже гораздо быстрее. К сожалению не замерил, сколько
потом ссылочное измерение Товар заменил на ID_товар тип Число, 10
ну и вместо справочника товаров стал использовать регистр сведений.
Потом правда снова вернулся к справочнику, но связь делал по своему полю ID_товар.

Визуально стало быстрее. На сколько - затрудняюсь сказать, сейчас док около секунды проводится
19 Гений 1С
 
гуру
02.11.06
17:58
(15) гм... неужели СУБД МС СКЛ не умеет без блокировок раздавать уникальные ключи?
20 Гений 1С
 
гуру
02.11.06
17:58
Кстати, а что ГУИД реально всего 8 байт? Я думал больше.
21 Гений 1С
 
гуру
02.11.06
18:00
Ну в общем то сами понимаете добавление Поля ГУИД не изменит существенно объем базы.
Обычно объем занимают реквизиты, строки, регистры сведений и т.п.
Их гораздо больше (на порядки) чем объектов.
22 Гений 1С
 
гуру
02.11.06
18:02
можно выдавать ключи не блокируя таблицу...
сервер хранит последний выданный ключ и всегда возвращает ключ+1
Ну иногда шерстит диапазон, находит дырки, ставит их в очередь.
и по такой же схеме выдает...
23 Херрес
 
02.11.06
18:06
(20) France в (10) говорит что гуид=16 бит
24 _r2003
 
02.11.06
18:08
GUID 128 бит 16 байт.
25 _r2003
 
02.11.06
18:14
где то читал что запросы на выборку с условием по GUID по определению работают быстрее чем с целыми так как происходит по байтовое сравнение.
Не говоря уже о запросах на вставку так как нагрузка не собирается в конце кластерного индекса.
Возможно выйгрышь в 18 достигнут из за низкой производительности дисковой подситемы. А если её поднять то на целых возможно запрос ляжет на процессоре и эфекта не будет.
ИМХО.
26 _r2003
 
02.11.06
18:16
to 22 and to 15 блокировки базы при заведении новых товаров, контрагентов и прочей справочной информации (записью новых документов) ничто по сравнению с временем формирования отчетов и проведением документов.
тоже ИМХО.
27 MMF
 
02.11.06
18:16
(22) теоретик доморощенный
28 Херрес
 
02.11.06
18:19
(24) точняк
http://www.ibase.ru/devinfo/test2.htm

(25) ну не знаю как может получиться быстрее.
Индекс занимает больше места, больше страниц надо пролистать при поиске...
29 Terv
 
02.11.06
18:25
+ 27 фонтан сырых идей.
30 Дык ё
 
02.11.06
18:26
(22) Это SQL Server. А есть ещё файловый вариант, будет PostgreSQL... В 1С в очередной раз пожертвовали эффективностью в пользу унификации.
31 Гений 1С
 
гуру
02.11.06
18:26
(29) суть в том что ключи выдаются без блокировок!
32 Гений 1С
 
гуру
02.11.06
18:27
(30) бред
33 Гений 1С
 
гуру
02.11.06
18:29
(30) Поясню (32) наоборот LONG INT есть во всех базах, а с GUID не все справляются. О какой унификации идет речь. Удобство только для репликации, но репликация делается другим способом, о нем я уже писал в (0)...
И где здесь выгода?
1с очередной раз лажанулась.
34 Гений 1С
 
гуру
02.11.06
18:31
Кстати, раз уж вы так зациклились на увеличении объема базы, то каждый объект и так может получить уникальный ГУИД, который образуется из ГУИД базы+ код таблицы + код ключа внутри нее.
35 Гений 1С
 
гуру
02.11.06
18:31
(29) Завидуй!
36 Neco
 
02.11.06
18:34
Возможно соображения 1С такие, что ГУИД более стандартный механизм обеспечения уникальности объектов, даже если и LONG INT дает некий выигрыш, то им можно пренебречь в пользу унификации.
37 Херрес
 
02.11.06
18:35
А почему Лотус тоже использует ГУИды ? Уж наверно они не дурнее 1С ?
38 ottto
 
02.11.06
18:36
(37) опередел))
А почему винда использует ГУИДы, а не лонгит. Вопрос риторический :)
39 Гений 1С
 
гуру
02.11.06
18:37
Винда и Лотус - я фигею...
А почему ты молчишь про Акцапту и Навижн.
Ты бы еще Ворд приплел, гыгыгы.
Сравнил записную книжку и СУБД, где данных на порядки больше.
40 Гений 1С
 
гуру
02.11.06
18:38
1С расшаркалась и пропустила вперед Акцапту в очередной раз...
41 ottto
 
02.11.06
18:39
А в акцапте нет ГУИДов?
42 Гений 1С
 
гуру
02.11.06
18:39
(41) в акцапте для ключей не гуиды используются... ;-)
43 Гений 1С
 
гуру
02.11.06
18:40
Хотя фиг их знает, по-моему они для связки используют "естественные ключи", а это та еще задница. ;-) Даже длиннее GUID, так что может я еще и погорячилси.
44 Херрес
 
02.11.06
18:52
Производительность GUID
Шон МакКоун (Sean McCown)

Все чаще и чаще я сталкиваюсь с тем, что разработчики по каким­то причинам хотят использовать идентификаторы GUID в качестве первичных ключей, и, что еще хуже, в кластеризованных индексах. Никак не возьму в толк, зачем надо применять GUID. Во­первых, они огромного размера — раза в четыре больше, чем целое, используемое в качестве первичного ключа.

Приведем основные причины, по которым НЕ следует пользоваться GUID.



· Они слишком большие, чтобы стать эффективным индексом. Чем меньше индекс, тем лучше, — это позволяет быстро найти значение ключа. Ни при каких условиях 16­байтный индекс не сравнится с 4­байтным.

· Их слишком трудно запоминать администраторам баз данных, и потому сложно вникать в вопросы с данными.

· Они не гарантируют уникальность. Вероятность того, что значение GUID будет уникальным, весьма велика, но это не 100%.

· Они слишком быстро приводят к фрагментации таблицы. Поскольку они совершенно случайны, нельзя знать заранее, где произойдет следующая вставка, поэтому кластеризация по этому ключу НЕПРЕМЕННО вызовет фрагментацию.

Поэтому не позволяйте своим разработчикам использовать GUID, особенно в системах, которые вам самим придется сопровождать. Проблема состоит в том, что ничего нельзя менять без твердых цифр и никто не проводил тестирования такого рода вещей. А вот я протестировал! Разница в производительности потрясает. Конечно, найдутся разработчики, которые все же будут настаивать на применении этих идентификаторов, но пусть стараются. Однако одно несомненно — ничего нельзя менять без обоснования в виде реальных цифр. Но теперь вы можете пойти к ним и показать, почему в базах данных лучше обойтись без GUID.

Заключение
У идентификаторов GUID есть своя ниша, но она, разумеется, не расположена рядом с кластеризованными индексами. Если вам все же приходится хранить GUID, создайте для него столбец где­нибудь в конце таблицы, а кластеризованный индекс стройте по ID, а не по нему. Тогда вы сможете обращаться с запросом к нужному GUID, а затем взять соответствующий ему ID и выполнять все, кроме первоначального поиска, по этому маленькому полю ID. По­моему, очень забавно, что разработчики получают требование уникальности, — их мозг попадает в заложники к GUID. Им в голову не приходит ничего иного. Один раз меня даже назвал идиотом один программист, который считал, что логические требования — это самый важный аспект приложения и что учитывать в приложении соображения производительности — кратчайший путь к провалу. Попробуйте­ка воспользоваться этой логикой и запустите 500 или 1000 одновременно работающих пользователей. А когда ваше приложение встанет, позвоните своему заказчику и скажите ему, что производительность приложения не такая уж важная штука.

http://newsletter.narod.ru/sql_pages/sql_may_2006.htm
45 Terv
 
02.11.06
18:52
(43) чему завидовать? что ты занимаешь плагиатом? данный вопрос уже подымался летом на конференции разработчиков.
46 Гений 1С
 
гуру
02.11.06
19:14
(45) извини, мне не доложили, на мисте он не подымался, просвещаю...
47 Гений 1С
 
гуру
02.11.06
19:15
(45) вот видишь, вопрос подымался, а местныя во всю защищают ГУИДЫ, даже Орефков замечен был, гыгыгы
48 Гений 1С
 
гуру
02.11.06
19:15
(45) так что не завидуй!
49 spock
 
02.11.06
19:42
Все же они GUID запихали в кластерный индекс?
50 k23
 
02.11.06
21:16
инт в качестве идентификаторов - не очень хорошая идея. разный он на разных платформах.
а разве лонг инт на x32 не те же 64 бита?
51 Гений 1С
 
гуру
03.11.06
08:48
(50) 4 байта они и в африке 4 байта, что за гон?
Гуид не 64 бита, а 16 байт.
52 Херрес
 
03.11.06
09:05
(49) да !
хотя если подумать - что они могли ещё использовать, например для справочников.. Код - не уникален...  Они юзают код+гуид, ну так он ещё длиннее чем просто гуид
53 Херрес
 
03.11.06
09:07
в общем вывод такой: если в 8.1 вдруг откажутся от гуидов - мы порвём всякие аксапты с сапами - как тузик грелку !
54 Гений 1С
 
гуру
03.11.06
09:15
(52) Херрес вы с бодуна? А что они в 77 использовали? Внутренний идентификатор! Короткая сжатая строка, в которой был зашит Лонг Инт...
55 Гений 1С
 
гуру
03.11.06
09:16
(53) да, в аксапте индексы могут быть длинее - там естественный ключ по-моему используется для связки, т.е. именно поле КОД в понимании 1с-негов.
56 Херрес
 
03.11.06
09:18
(54) ну и по этой причине семёрочные базы поменьше и шевелятся побыстрее... С чем не согласен-то ?
57 Гений 1С
 
гуру
03.11.06
09:28
Вот эта фраза непрофессиональна: "что они могли ещё использовать, например для справочников.. Код - не уникален.."
58 Ланкастер
 
03.11.06
09:30
to 53 Это мы еще посмотрим кто кого порвет - сказала грелка, надутая до 10 атмосфер, Тузику.
59 Херрес
 
03.11.06
09:31
(57) слушай, ну хорош наезжать, да ?
В 8ке код у справочников - не уникален. Записать его можно запроста с включенным флагом ЭтоЗагрузка. С чем ещё не согласен ???
60 Гений 1С
 
гуру
03.11.06
09:46
(59) Херес, у каждого элемента справочника есть уникальный код в пределах справочника этого вида. 1С использует ГУИД, хотя могла бы юзать Лонг Инт, уникальный идентификатор есть независимо от уникальности/не уникальности кода...

Так что к чему тут твои фразы про уникальность кода, не догоняю...
1С могла бы юзать естественный ключ, как АХАПТА, но тогда бы пришлось делать одно поле или комбинацию полей уникальной, проще ввести уникальный системный ключ каждого элемента, что 1С и сделала.
61 Херрес
 
03.11.06
09:50
(60) ну смотри, мы же вроде говорили про кластерные индексы ? А они должны быть уникальными.... А код справочника, так же как и номер документа - по определению не уникален (на уровне БД), т.к. через план обмена всегда может приехать тот же код. Поэтому кластерный индекс по коду делать нельзя. Да и если посмотреть в ентерпрайз менеджере, вместо индекса по коду 1С использует составной =код+гуид

Ты же сам говорил что гуидам есть альтернатива - лонгинт+код объекта+код базы
62 Steban
 
03.11.06
10:04
63 k23
 
03.11.06
10:06
(60) блин, длина инт зависит от процессора! нельзя его использовать в качестве идентификаторов.
64 Neco
 
03.11.06
10:09
Просмотрел еще раз ветку, не увидел ответа на вопрос:
Почему LONG INT  в запросах быстрее GUID?

Также не убедительны решения в (22) вопроса присвоения нового идентификатора LONG INT без выборки данных из таблицы.
65 Мутабор
 
03.11.06
10:10
Читать лень. ПАТАМУШТА ЕСТЬ УРБД дапустим...
66 Херрес
 
03.11.06
10:17
(63) зависит не от процессора а от СУБД в данном контексте
(64) ну потому что индексы получатся очень длинными. индексы хранятся так же как и данные, на страницах данных. Серверу надо пролистать в 4 раза больше страниц при поиске.
(65) ну если бы почитал сначала, увидел бы 2 альтернативных решения для УРБД
67 Мутабор
 
03.11.06
10:21
(66) SQL Server, MS Access и т.д.
GUID патаму что он GUID и шансов получить одиноковый номер меньше...
68 spock
 
03.11.06
10:22
(52)а ни кто не пробовал вставить в такую табличку, например, миллион записей?
Или расчет на то, что у всех стоят суперсервера под v8 и можно спокойно гуид запихать в кластерный индекс?
(61)Кластерные индексы не обязаны быть уникальными. А вот праймари кейз - да.
69 Херрес
 
03.11.06
10:23
(67) если цена ГУИДа - проигрывание войны ERP систем - то насрать на этот шанс !
70 Мутабор
 
03.11.06
10:25
(69) А патаму что у меня тоже хомяки спорят в клетке, а мне накакать чо им там не нравится.
71 Sadovnikov
 
03.11.06
10:26
Г1С - инженер знаний?? Нда... И после этого сюда еще грамотные люди заходят??
72 Мутабор
 
03.11.06
10:29
(71) Не, грамотные не заходят. Только ты и другие. Вот и меня подтянули....
73 Мутабор
 
03.11.06
10:34
А вообще ветка классная. Только я ее не читал, названия хватило :)
74 wPa
 
03.11.06
10:58
(67) шансов получить одинаковый GUID нет - в ближайший миллион лет.
Не нужно искать свободный, выбирать пустые.
Не нужно вообще ничего проверять. Как примари кей - идеал.
А насчет индексации и выборок - очень сомневаюсь что настолько значительна разница - в десятки раз как грит Хоррес (не ставлю под сомнение слова - просто возможно причина в другом все-тки)
75 Гений 1С
 
гуру
03.11.06
10:58
(65) тебе не читать, тебе думать лень. Если GUID хранится в ссылке, то УРБД работает нормально...
(64) Думал плохо. Длина INT не при чем, для идентификатора используется строго 4 байта, просто индекс получается более короткий и поиск более быстрый, в конечном итоге почитай статью, в ветке была ссылка, почему не рекомендуется юзать ГУИД для ключа.
Сравни 4 байта и 16 байт...
76 Гений 1С
 
гуру
03.11.06
11:00
(64) Ты (22) просто не просек....
77 Херрес
 
03.11.06
11:01
(74) нет-нет. Не десятки раз, я этого не утвержал. У меня основной прирост по другой причине произошёл.
Ну визуально процентов на 20-30 может побыстрее стало.
ну кстати это соотносится с мнением здесь
http://www.aspnetmania.com/Forums/ForumMessage/72164.html
78 PVasili
 
03.11.06
11:05
(64)+
(66)огласите номера постов...
79 wPa
 
03.11.06
11:06
(77) очень похоже...текст версус инт понятно проигрывает...
Значит 1С на мега промышленный масштаб с индексами по ГУИД-ссылкам не выйдет. А Лотус понятно - он и так весь нереаляционный ...
80 Херрес
 
03.11.06
11:14
(78) ок, резюмирую варианты альтернатив.
В (0) прозвучала идея держать два ключа - гуид для УРБД и инт для всей прочей логики.
в (34) было предложено использовать суррогатный, но не глобально уникальный, а уникальный в пределах данного набора распределённых баз ключ -
код базы+код вида объекта+код объекта
81 Гений 1С
 
гуру
03.11.06
11:17
(74) читай (22), примари кей тоже можно получать без обращения к базе. Сервак просто хранит последний выданный ключ. и все!
82 Гений 1С
 
гуру
03.11.06
11:20
(79) Аксапта тоже текстовые коды юзает и ничего... Просто обидно, что 1с в очередной раз лажанулась... как обычно... А хомяки в клетке 1с гадят и галдят... как метко подметил товарищ!
83 wPa
 
03.11.06
11:54
(81) да но его туда надо записывать...а при массовом создании это узкое место, т.е. выдача все-равно производится серваком, а не клиентом как для GUID.
(82) Тип Code несколько не Unicode )
Может они просто не завершили прогрессивную идею .. оставь им шанс )
84 wPa
 
03.11.06
11:58
к примеру вытаскивать из GUID время в миллисекундах и из него делать индексы для таблиц
85 Херрес
 
03.11.06
12:00
(84) это есть шанс сделать в PostgreSQL, т.к. там есть механизм для встраивания в СУБД кастомных пользовательских алгоритмов индексации
86 Гений 1С
 
гуру
03.11.06
12:56
(83) не надо его вытаскивать.
При подключении к БД вытаскиваем максимальный ключ.
При запросе нового номера выдаем ключ плюс 1 и в памяти (не в базе) сохраняем новое значение. Где блокировки??
будут дырки в ключах, если по выбранному ключу не запишут объект (откажутся от записи).
Но механизм повторного использования дырок я уже описал, какие проблемы?
87 Гений 1С
 
гуру
03.11.06
12:57
(84) про одновременную работу пользователей забыл??? гыгыгы...
Лучше уж перенумеровывать гуид по глобальной таблице кэшей
88 MMF
 
03.11.06
13:10
Гений 1С
81 - 03.11.06 - 11:17
(74) читай (22), примари кей тоже можно получать без обращения к базе. Сервак просто хранит последний выданный ключ. и все!
-- когда же ты перестанешь тупить? возьми буквари и почитай. И вообще, иди лучше  на мобилу девок заманивай.
(74) "шансов получить одинаковый GUID нет - в ближайший миллион лет." Фигня. Во-первых, если на компе стоит нормальная сетевая карта - только до 3400 года :-). А во-вторых, если стоит карточка с кривым МАС - уникальность только в пределах данного компа. Вполне реально получение нарушение уникальности Pk
89 Гений 1С
 
гуру
03.11.06
13:31
(88) И в чем я туплю, объясни, вумник...
90 wPa
 
03.11.06
13:34
(86) в памяти клиента? а другие? получат тот же ключ?
(87) одноверменно - не значит одномоментно! =)  время по любому не совпадет.
91 wPa
 
03.11.06
13:34
(88) не допонял... при чем тут мак-адрес..
92 Гений 1С
 
гуру
03.11.06
13:35
(88)(90) Дятлы!
Когда я пишу SELECT PRIMARY KEY FROM Bashmaky, сервер подсовывает мне примари кей для справочника башмаки именно по этой схеме.

Если СКЛ Сервер это не умеет, это может делать сервер 1С предприятия....
НУ и ДЯТЛЫ!
93 Гений 1С
 
гуру
03.11.06
13:37
(91) ГУИД формируется в зависимости от мак-адреса в том числе
94 MMF
 
03.11.06
14:04
(89) "Сервак просто хранит последний выданный ключ. и все!" -  и тут у сервака выключается питание, виснет сервак или еще что-нить происходит, после перезапуска начинаем выдавать ключ с какого значения? При каждой выдаче нового ключа (например, gen_id в генераторе IB/Fb) осуществляется увеличение значения на диске с блокировкой таблицы.
"При запросе нового номера выдаем ключ плюс 1 и в памяти (не в базе) сохраняем новое значение. Где блокировки??" переименуйся в Идиет1С
95 MMF
 
03.11.06
14:16
(93) ну где ж ты, дружище? поясни как будет отрабатывать сбои твой мега-механизм генерации первичных ключей, не сохраняя на диске данные?
96 spock
 
03.11.06
14:18
(95)может он пытается сказать про идентити-поле, но как собака не может :)
97 Гений 1С
 
гуру
03.11.06
14:24
(94) Специально для дятлов повторяю - ПРИ ЗАПУСКЕ СЕРВАКА СЧИТЫВАЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ КЛЮЧА.

То бишь если сервак перезагрузился, при старте мы знаем максимальное значение ключа.

Я блин на блокировках собаку съел, а этот молодой и зеленый меня поучать собрался!
98 Гений 1С
 
гуру
03.11.06
14:26
(95) ты путаешь моменты... когда сервак выдает новый ключ, он берет новое значение из памяти, а уже записывается с этим ключом объект. где здесь вилы.
Сознайся что ты ступил, ну или отмажься - скажи, что не понял.
Если не въехал до сих пор, приведу пример на спичках, блин, ибо достал...
(96) Я не знаю, как работает поле идентити, может и так.
99 Гений 1С
 
гуру
03.11.06
14:27
Просто заявление, что GUID типа помогает избежать блокировок при выдаче первичного ключа - бред сивой кобылы... или бред людей, не глядящих ничего дальше 1С-а и не знакомых с базами данных
100 Гений 1С
 
гуру
03.11.06
14:29
Запуск сервера
Максимальный ключ = 10, заносим в оперативку сервера 10
Запрос на выдачу ключа, выдаем 11, в оперативку заносим 11
Запрос на выдачу ключа, выдаем 12, в оперативку заносим 12
Записался объект с ключом 11
Запрос на выдачу ключа, выдаем 13, в оперативку заносим 13
Записался объект с ключом 13
Запрос на выдачу ключа, выдаем 14, в оперативку заносим 14
Обана, шухер - перезагрузка. Клиенты отрубились, сервер перестартовал.
Запуск сервера
Максимальный ключ = 13, заносим в оперативку сервера 13
Запрос на выдачу ключа, выдаем 14, в оперативку заносим 14
Запрос на выдачу ключа, выдаем 15, в оперативку заносим 15
Запрос на выдачу ключа, выдаем 16, в оперативку заносим 16

Ну и нахрена тут ГУИД???
101 Гений 1С
 
гуру
03.11.06
14:31
В результате этой последовательности будут такие записи:
10, 11, 13

Алгоритм повторного использования "дырок" приводить не буду, элементарно...
102 Гений 1С
 
гуру
03.11.06
14:31
ДЯТЛЫ!
103 spock
 
03.11.06
14:33
GUID в кластерном индексе - это зло.
Я просто уверен, что при вставке новых строк в такую таблицу будут жуткие тормоза (из-за перестройки би-дерева индексов).
104 Гений 1С
 
гуру
03.11.06
14:35
(103) голос разума!
105 megalodon
 
03.11.06
14:37
(100) в 1С-ке он так и раздает значения _IDRRef, а не каждый генерит по алгоритму получения ГУИДа. А почему бинари 16 а не интегер - наверна чтоб тупые адынэснеги не запутались в 2-х ключах (коротком и для репликации). Не всем же быть гениями :-)
106 Херрес
 
03.11.06
14:39
(103) и не только индексов, надо же ещё и страницы данных физически перемещать, индекс-то кластерный
107 Гений 1С
 
гуру
03.11.06
14:39
(105) нюню... ищи оправдания, ищи... Оказывается все тормоза в 1С-ке идут из благого желания облегчить жизнь тупых 1снегов.
Если бы БГ думал об 1снегах, он бы дал функцию для получения списка открытых форм, гыгыгы...
108 Гений 1С
 
гуру
03.11.06
14:40
Ну где ты ММФ, съел, гыгыгы, приятно просрамить выскочку!
109 spock
 
03.11.06
14:40
(104)так никто и не думал спорить с этим (в этой ветке), вроде, народу понравилась твоя идея генерации своего ключа :)
Кто понимает различия в индексах (кластерные/некластерные) и помнит про би-дерево из курса универа, тот втыкает в тему.
110 megalodon
 
03.11.06
14:41
Гений блин, чего ты докопался до точек с запятыми? Уж менять длину ключа с 16-ти байтного на 8-ми байтный - это последнее чем надо заняться для повышения быстродействия. Лучше бы управление блокировками сделали более гибким - вот здесь есть где разгуляться. Ну в 8.1 вроде говорят сделали. Это хорошо.
111 spock
 
03.11.06
14:42
(106)в кластерном индексе хранятся сами данные. В некластерном - адреса на физическое расположение данных.
112 Гений 1С
 
гуру
03.11.06
14:44
(110) не гони, с 16 байт на 4 байта.
113 megalodon
 
03.11.06
14:45
(112) 4 байта маловато.
114 Neco
 
03.11.06
14:45
(100) Блокировки останутся только теперь их будет создавать сервер 1С, который не выдаст новый ключ, пока не обработает старый запрос. А представь куча справочников, документов и подключений и каждый требует свой ключ? Так сервер загнется, а тем более зная как 1С умеет ваять стабильные приложения, то сервер превратится в такой головняк. А с учетом того как 1С умеет разруливать транзакции - пользователи будут курить бамбук до полного посинения.
115 megalodon
 
03.11.06
14:47
(114) он именно так сейчас и работает и вроде пока не загнулся, по крайней мере у меня на 200 юзерах.
116 wPa
 
03.11.06
14:51
(115) как связан PK _IDRREF  с GUID  (на тему (0))?
117 megalodon
 
03.11.06
14:54
(116) только тем, что размер у них одинаковый.
118 progr
 
03.11.06
14:58
(0)Мои 5 копеек:
В плане производительности - GUID отстой (да и как бы мы не возмущались 1С никогда не прислушается к нашим мнениям), но зато в плане УРБД - это замечательная идея. Созданный объект становится уникальным во всей вселенной. Мне очень нравится сей факт.
119 Гений 1С
 
гуру
03.11.06
15:00
(114) читать еще раз... сервер выдает ключи по запросу, другими словами - при создании новой записи ей проставляется новый ключ, ничего не ждется... ты о чем, товарищ, ты читать умеешь?
120 Гений 1С
 
гуру
03.11.06
15:01
(118) На переэкзаменовку: читай топик, там сказано, как обеспечить уникальность объекта, не мучая индексы
121 megalodon
 
03.11.06
15:02
(119) как ты думаешь, 4 байта для ключа достаточно или маловато? все таки 1С заявила о выходе на большие масштабы, нежели автоматизация ларьков и автостоянок.
122 progr
 
03.11.06
15:27
(all) мне кажется товарища Осипова (автора сабжа) не любят из-за ника и поэтому чтобы он ни говорил все воспринимают в штыки :) Просто в данном случае он прав. А все остальное это "тупость одноэсников", которые ну просто никакие.
(121)Не могу удержаться от смеха. Офигенный аргумент :) 22 см отдыхает
123 Гений 1С
 
гуру
03.11.06
15:28
(121) у регистров ключей нет, регистры есть у документов и справочников
Скажи, где нужно 4 294 967 295 элементов или документов? Для анализа ДНК?
124 Гений 1С
 
гуру
03.11.06
15:29
хотя если вести персонифицированный учет всего земного шара, то не хватит - 6 млрд,  а тут всего 4 млрд. ;-)
Ну возьмите 6 байт, не жалко. ;-)
125 Гений 1С
 
гуру
03.11.06
15:30
А вообще по идее это должно решаться в настройках базы, только я сомневаюсь, что 1с потянет 4 миллиарда элементов справочника.
126 ОператорПК
 
03.11.06
15:31
(123) А как быть с обменами между ИБ? Как я понял Ваш алгоритм будет задваивать LONG INT в разных ИБ. Может я просто не понял ни чего, из Вашего сабжа....
127 ОператорПК
 
03.11.06
15:33
+(126) сейчас с обменом в 8.0 проблем нет, благодаря использования GUID.
128 Гений 1С
 
гуру
03.11.06
15:35
(126) вы не поняли, курите топик... Здесь описаны 2 способа получения GUID для любого элемента, что ж вы так зациклены на 1С???
129 Джинн
 
03.11.06
15:36
Я чего-то недопонимаю. 1С использует GUID в качестве внешних ключей в соединениях?
130 Гений 1С
 
гуру
03.11.06
15:36
И УРБД будет хорошо работать на LONGINT и задвоений не будет...
131 Гений 1С
 
гуру
03.11.06
15:36
Не путайте первичный (LONGINT) и уникальный (GUID) ключи
132 Гений 1С
 
гуру
03.11.06
15:36
(129) яя
133 ОператорПК
 
03.11.06
15:37
(128) понятно. значит все таки не понял. ну и ладно :))
134 masky
 
03.11.06
15:38
(0) а еще 1С могла бы нормльно работать с транзакциями... а то когда говорят что в 7.7 болкировалось все, а теперь можно выбирать какие таблицы блокировать становится грустно...
(100+n) специально для этого случая придумали identity , даже думать ни о чем не надо
135 masky
 
03.11.06
15:42
(123)Using the bigint Data Type
The bigint data type is an integer containing values from -2^63 (-9,223,372,036,854,775,807) through 2^63-1 (9,223,372,036,854,775,807). The storage size is 8 bytes.

это если инта не хватит
136 Гений 1С
 
гуру
03.11.06
15:42
(134) да, тут уже подсказали, я просто не в курсе идентити использует такой же алгоритм или блокирует таблицу. ;-) хотя там наверное ID можно получить только после записи в БД, так?
137 masky
 
03.11.06
15:46
(136) идентити никого не блокирует, но может содержать дырки в нумерации..
а так, значение идентити можно получить сразу после генерации... в нескольких вариантах, с учетом области видимости транзакций или без..
138 masky
 
03.11.06
15:50
139 Гений 1С
 
гуру
03.11.06
15:50
(135) короче 1с могла бы выпускать две версии, различающиеся длиной ключа - для обычных пацанов 4 байта, для трансгалактический корпораций - с длиной ключа 8 байт. ;-)
140 Гений 1С
 
гуру
03.11.06
15:51
(138) да ладно, в общем все с этим понятно...
141 Гений 1С
 
гуру
03.11.06
15:51
Прикиньте 4 млрд записей с ключом на GUID!!! ;-)
142 Гений 1С
 
гуру
03.11.06
15:52
Ну что, MMF, лажанулся?
143 MMF
 
03.11.06
16:01
(142) уточни, твой генератор используется ТОЛЬКО в качестве первичного ключа и речь только о 1С v8? В таком случае нахрена он нужен? Не изобрел ли ты identity field, только на твоем сервере приложения? Уникальные генераторы или генераторы с контролем последовательности во всех промышленных sql-серверах используют обновление и хранение значения генераторов в базе, даже при откате транзакции клиента инкремент происходит.
144 Гений 1С
 
гуру
03.11.06
16:04
(143) так фигли ты про блокировку трендел, раз это давно известно и называется идентити???
145 Гений 1С
 
гуру
03.11.06
16:04
(143) гыгыгы, ММФ, ты в пролете...
146 Neco
 
03.11.06
16:10
Гм.. сам же на партнерском форуме называл использование GUID "изящное решение".
147 Гений 1С
 
гуру
03.11.06
16:19
(143) не ты ли сладко пел, что LONG INT вызывает блокировки для заведения нового элемента???
148 Гений 1С
 
гуру
03.11.06
16:19
(146) все может быть, но я с пеной у рта как ММФ не доказывал бредовыя вещи
149 Гений 1С
 
гуру
03.11.06
16:20
(143) ну так что ММФ, ты за базар ответишь, покайся....
150 MMF
 
03.11.06
16:29
(147) это же ты, а не я предложил идиотскую идею перенести генерацию ид и хранение их только в памяти сервера приложений (92)? А я говорил про генераторы sql-серверов, и утверждал, что при  получении их значения происходят блокировки см. (94). Это ты сказал, что "съел собаку на блокировках" и тут вдруг оказывается, что изобрел велосипед с квадратными колесами. Дятел это ты, дружище.
151 Гений 1С
 
гуру
03.11.06
16:30
(150) не отмазывайся, все ходы записаны...
152 Гений 1С
 
гуру
03.11.06
16:32
(94) Нет, батенька, вы говорили именно про блокировки, которые якобы возникают в момент запроса ключа для нового элемента справочника...

С индетити я встречался, мне важно было на примере показать вам, что это не так.
Так что не звездите, дорогой Дятлушка!
153 Гений 1С
 
гуру
03.11.06
16:32
Про какие блокировки в таком случае ты говорил, ну ка-ну ка!?
154 Гений 1С
 
гуру
03.11.06
16:33
Короче, да, Ответь по существу: Про какие блокировки шла речь, если блокировок нет... Утрись, зеленый юнец!
155 Neco
 
03.11.06
16:34
Возможно что использование более оптимальных структур данных было-бы замечательно. Что этой веткой Г1С ты хочешь нам сказать? Что 1С лажает? Ну лажает, однако систему назначения уникальных индексов они не сменят. Что ты крут и все такое? И что тебе медальку за это.
156 megalodon
 
03.11.06
16:39
что то никак не могу найти инфу о том, во сколько раз в среднем повышается время поиска по индексу при увеличении его размера в 2 раза. Ни у кого нет ответа на этот вопрос?
157 Гений 1С
 
гуру
03.11.06
16:40
(155) да, я хочу сказать что я крут и не нужно со мной спорить в духе "Я умный, ты дурак", потому что обычно, как показывает вскрытие и случай с ММФ, все совсем наоборот...

Да, они не сменят, потому что тупари... ;-)
Ладно, я понял через год юзания 80, что ГУИД - это зло, а они куда смотрили? БГ и компани?
158 Гений 1С
 
гуру
03.11.06
16:58
(150) Ну че, ты ответишь, про какие блокировки вел базар или будем считать тебя лохом?
159 MMF
 
03.11.06
17:26
(158) Я действительно не знал про identity, поскольку занимаюсь fb, отсюда и ноги высказывания про блокировки. Но походу и ты не знал, "крутой":
(152) "С индетити я встречался", (96) "Я не знаю, как работает поле идентити". Думаю, что блокировки на уровне страницы данных все равно происходят, поскольку значение identity фактически соответствует физическому номеру записи, то генерируется следующее значение путем чтения предыдущей записи. Но никак не +1 в памяти, да еще и select max(id) при старте. Уточню этот вопрос, потом плюну, если что, на тебя еще раз.
160 wPa
 
03.11.06
17:28
(157) Какой-то юношеский максимализм проявляете...мистер... почему обязятельно или зло или благо. Есть плюсы есть минусы.
Кста binary PK пошли с 8-ки. В 7-ке int.  Наверно так и есть решили не заморачиваться. Только вот еще - индексы сиквлом не строятся. 1С сам похоже строит свои индексные таблицы. Возможно там есть какая-то оптимизация.
(159) жаль нельзя посмотреть значение dentity как и сделать ему инкремент ;)
161 Гений 1С
 
гуру
03.11.06
17:29
(159) Блин, ММФ, я тебя прощу, если в твои мозги наконец то дойдет, как работает алгоритм, описанный в (100). Я не утверждаю, что алгоритм идентити работает именно так.

Просто я хочу сказать, что ключевое поле можно реализовать так, что раздача ключей не будет вызывать блокировок и ты должен с этим согласиться. Ведь об этом был базар.

Поэтому утверждение что ГУИД помогает решать какие-то проблемы блокировки - чушь!
162 Гений 1С
 
гуру
03.11.06
17:29
(160) что такое бинари РК?
163 wPa
 
03.11.06
17:31
(162) первичный ключ
164 Гений 1С
 
гуру
03.11.06
17:31
(160) Вот именно соль подхода - "не заморачиваться".. гыгыгы....
тогда о какой ЕРП на 80 может идти речь, если главный подход в построении платформы 80 - "не заморачиваться"...
Подумаешь падение производительности на 20%, а - мы не заморачиваемся, гыгыгы...
165 Гений 1С
 
гуру
03.11.06
17:31
хотя справедливости ради сказать, что оба БГ на вопросах производительности не заморачиваются - что Виндоус Командир, что Директор Фирмы. ;-)
166 MMF
 
03.11.06
17:38
(161) Г1С, когда же ты поймешь, что такой механизм не может использоваться, поскольку он не надежен. На примере того идентити. Есть возможность его установить руками - достаточно разрешить установку setidentiny в On. Таким образом алгоритм увеличения путем чтения+инкремент предыдущей записи в БД будет работать точно так же. А если все операции со значением Ид происходят только в памяти сервака, то нужно решить массу геморроев с параллельностью потоков запросов, с ручной установкой текущего значения и т.д.
167 megalodon
 
03.11.06
17:38
Слышь, Гений, а ты стало быть продолжаешь утверждать, что Primary Key справочников 1С 8.0 строится по алгоритму GUID?
168 Гений 1С
 
гуру
03.11.06
17:40
Господа, а теперь - ВУАЛЯ.
Я открою вам страшную тайну, почему 1С использует ГУИД.
Только не говорите, что вы об этом знали.

Короче, как вы знаете некоторые столбцы могут хранить ссылки на разные таблицы.

Раньше в 77 в ссылке хранился номер таблицы и ID в этой таблице.

Теперь предполагается что каждый объект имеет уникальный ID.

Таким образом, если в нормальных СУБД поле имеет несколько возможных типов, добавляется поле типа, следовательно операция поиска соответствующего значения всегда занимает одно действие - открыть нужную таблицу, найти по ID нужную запись.

В 1С же ГУИД используется именно для того, чтобы объединить всевозможные таблицы (помните ошибку 255 таблиц СКЛ) и затем по ГУИД найти нужную запись.

Вот и весь секрет, надеюсь внятно рассказал.

Можно было даже при таком подходе вместо ГУИД использовать 4 байта на код внутри таблицы и 2 байта (номер таблицы) + 4 байта = 6 байт на внешние ссылки.

Все равно меньше, чем 16 байт.
Но мозги видимо у 1сцев не шибко варят.

Теперь вы понимаете истинную причину, почему юзается ГУИД?

Теперь я окончательно понял систему связей между данными 1С!!!
169 Гений 1С
 
гуру
03.11.06
17:41
(166) и почему же он ненадежен, ты хочешь сказать, что в памяти сервака нет разделяемых процессами данных. Не звезди!
170 Гений 1С
 
гуру
03.11.06
17:41
(167) Читай (168), думаю пациент вскрыт полностью!
171 Гений 1С
 
гуру
03.11.06
17:43
(166) Это не моя головная боль, а боль разработчиков МС СКЛ сервера. То бишь наверняка они уже продумали эти нюансы.
172 megalodon
 
03.11.06
17:45
(168) ха-ха-ха. поздравляю тебя Гений: ты в этой ветке первый Дятел!
"Раньше в 77 в ссылке хранился номер таблицы и ID в этой таблице.

Теперь предполагается что каждый объект имеет уникальный ID. "

Загляни в структуру базы и увидишь, что каждый реквизит составного типа состоит минимум из 2-х полей: _IDRTRef и _IDRRef, а если составной тип не только ссылочный - так там и строковый и дата и так далее есть. Ну и когда до тебя тупого дойдет то наконец: _IDRRef НЕ СОЗДАЕТСЯ ПО АЛГОРИТМУ GUID!!! Хочешь поспорить???
173 Гений 1С
 
гуру
03.11.06
17:48
(172) Лондон, похоже Дятлы в этой ветке плодятся со страшной силой.
Для связей таблиц, согласно (168) юзается именно ГУИД. А следовательно, проистекают все недостатки. _IDRRef используется для хранимых процедур (служебных), то бишь все основные индексы строятся по ГУИД, так что все в силе, ГОСПОДИН ДЯТЕЛ!
174 wPa
 
03.11.06
17:50
Как он создается я недопонял, но храниться явно похоже на GUID ... хм...
транзакция создания нового элемента справочника:

SELECT
MAX(_Reference21._Code) f_1
FROM
_Reference21 WITH(NOLOCK)
SELECT @@TRANCOUNT

exec sp_executesql N'INSERT INTO _Reference21 WITH(REPEATABLEREAD) (_IDRRef,_Marked,_IsMetadata,_  блаблаб (16)', 0x9C1550505450303011DB6B4888828265, 0x00, 0x00, блабла

SELECT _IDRRef,_Version
FROM _Reference21
WHERE _IDRRef IN (
0x9c1550505450303011db6b4888828265
)
SELECT @@TRANCOUNT
175 megalodon
 
03.11.06
17:51
(173) ну ты охренел! Предлагаю ВР по завершении спора забанить проигравшего на веки вечные. Гений, ты согласен?
176 wPa
 
03.11.06
17:51
вот тут похоже
SELECT
_Node4022._IDRRef f_1
FROM
_Node4022 WITH(REPEATABLEREAD)
WHERE
_Node4022._IDRRef <> @P1
177 Гений 1С
 
гуру
03.11.06
17:52
Короче (168) можно кратко изложить так - любой элемент в 80 имеет уникальный номер ГУИД в пределах базы и он используется для ссылок между объектами базы.

Можно было бы юзать 4 байта на номер таблицы + 4 байта на код внутри таблиц (почти как в 77), но в 1цэ решили не заморачиваться и юзают ГУИД, при этом теряют возможность из ссылки напрямую вычленить номер таблицы... Уроды!
178 Гений 1С
 
гуру
03.11.06
18:00
(175) я не азартный человек, хотя было бы прикольно обломать тебя, увы!
179 megalodon
 
03.11.06
18:00
(177) эээ батенька, вот только песдеть теперь не надо. GIUD - это GLOBAL Uniqie identifier, а не какая то там уникальная йухня в пределах базы. цитирую (170) "Для связей таблиц, согласно (168) юзается именно ГУИД". Цитирую (177): "любой элемент в 80 имеет уникальный номер ГУИД в пределах базы"
180 wPa
 
03.11.06
18:00
(172)
в приведенном примере _IDRRef присвоился 0x9c1550505450303011db6b4888828265
А теперь GUID нового элемента
88828265-6b48-11db-9c15-505054503030
Найдите 10 отличий.... в общем вопрос закрыт..?
181 Гений 1С
 
гуру
03.11.06
18:01
(180) Закроется, если ты расшифруешь 0x9c1550505450303011db6b4888828265
182 Гений 1С
 
гуру
03.11.06
18:01
это по твоему не гуид??? гыгыгы
183 wPa
 
03.11.06
18:01
ты до конца дочитай да
184 Гений 1С
 
гуру
03.11.06
18:02
(182) ой. пардон, да именно ГУИД, мегалондон отдыхает
185 Гений 1С
 
гуру
03.11.06
18:02
(183) тетрадки забыл переставить. гыгыгы
186 megalodon
 
03.11.06
18:02
(179) да обломай, чего ты? вон на уважаемого MMF наежжал так шопесдетс, а на меня, йух знает кого, тебе жалко типа? Сцыкун йопта, так и скажи что обоссалсо.
187 Гений 1С
 
гуру
03.11.06
18:02
Лондон, кури!
188 Гений 1С
 
гуру
03.11.06
18:03
(186) Ну ММФ ваще лаханулся по полной программе, явно видно, что лох идет, а тут хрен знает, я в SQL 1c 80 не часто заглядывал!
189 megalodon
 
03.11.06
18:03
(181) ну ты согласен на условия в (175)? если нет - закрой варешку и не песди, пустозвон!
190 Гений 1С
 
гуру
03.11.06
18:03
(186) ММФ я не могу уважать, он лоханулся и не признался в этом, значит паршивый человечишко. Я лично свои ошибки признаю. ;-)
191 Гений 1С
 
гуру
03.11.06
18:04
(189) так ты уже продул. гыггыы Кури (180)
192 wPa
 
03.11.06
18:06
Может кто знает - где 8-ка хранит индексы? в сиквеле не нашел ...
Надеюсь - может там есть супер оптимизация бинарного бреда....
193 Гений 1С
 
гуру
03.11.06
18:06
(192) интересно, как можно оптимизировать ГУИДЫ??? ;-)
194 Geza
 
03.11.06
18:07
(168) Над изречением про ошибку о 255 таблиц - ржунимагу, тупее вывода не слышал
195 megalodon
 
03.11.06
18:07
(191) я просто еще доказательства не приводил. лень понимаешь ли без интереса играть. но тебе у тебя теперь всего 2 выхода: бесчестие или достойная смерть. так ты принамаешь условия, сформулированные в (175)?
196 wPa
 
03.11.06
18:08
(193) заменить на что нидь ))
197 megalodon
 
03.11.06
18:12
(190) нет приятель, теперь у тебя шанса просто признать свои ошибки не будет. базар зашел слишком далеко. придется ответить.
198 Гений 1С
 
гуру
03.11.06
18:15
(195) конечно же я посылаю тебя нафиг... ведь Волшебник никогда не забанит Гения 1С... гыгыгы
199 Гений 1С
 
гуру
03.11.06
18:15
(197) слышь, малолетка, давай по существу вопроса...
200 Гений 1С
 
гуру
03.11.06
18:16
(194) да ну.... и что ж тебя так развеселило...
201 Гений 1С
 
гуру
03.11.06
18:17
(194) для дятлов еще раз - 1С ка при составлении запроса делает соединение со всеми таблицами, которые могут содержать записи, на которые возможна ссылка из колонки.

Поэтому если в базе более 255 объектов, использование типа ЛюбаяСсылка для запросов невозможно... Вот вам и супер-пупер ЕРП, гыгыгы....
202 Гений 1С
 
гуру
03.11.06
18:18
Короче платформу 80 куда то не в ту сторону накренило по сравнению с 77...
203 Гений 1С
 
гуру
03.11.06
18:18
(199) Не бери меня на слабо, мне понятия пофик
204 Гений 1С
 
гуру
03.11.06
18:19
(200) Эх, упустил шанс забить сотку, впервые в жизни. гыгыгы
205 megalodon
 
03.11.06
18:25
(204) Я так и знал, что ты обоссышьсо. Сейчас тут все время поди пытался профилером что то поймать, да так, как ты в этом нийуха не понимаешь, забросил это дело. Гыгы, ламер мля! во распесделся то, как павлин, я ваще в ахуе. Хоть ты и предпочел позор достойной сметри я надеюсь что ВР лишит тебя звания инженера знаний и ты перестанешь постить всякую йухню в книгу знаний.
206 Гений 1С
 
гуру
03.11.06
18:28
(205) да ладно, тут таких пустобрехов как ты, дофига.
Я высказал свою точку зрения и пока никто не доказал обратное, истина за мной...
А ты вот и бесишься от бессилия вставить свои пять копеет.

Я открыл ИСТИНУ, наслаждайтеся!
207 Гений 1С
 
гуру
03.11.06
18:29
(205) Запомни, пионер, я могу признать свои ошибки, но то что я - Гений 1С, это факт и такие Моськи типа тебя для меня как мухи...
208 Гений 1С
 
гуру
03.11.06
18:30
(205) и я профайлером не искал, у меня достаточно знаний в голове, чтобы вывести все и в теории, исходя из схемы базы, что я  и проделал. Ассемблером увлекаются хакеры-неудачнеги-вирусописатели типо тебя!
209 megalodon
 
03.11.06
18:31
(206) я на 5 копеек не играю, ламер. А то, что ты не хочешь подтвердить свои слова реальными ставками говорит только об одном - пустозвон ты обычный и есть. И все твои базары - йухня, да и сам ты в общем то тоже ХУЙНЯ. Вот так вот. Или тебе есть что возразить, гыгы?
210 wPa
 
03.11.06
18:32
.. жаль затрут топик.. )))
211 Гений 1С
 
гуру
03.11.06
18:33
(210) Ладно, клянусь больше не буянить, буду только по существу, давайте дойдем до истины, всем на кого наехал - пардон. реально ветка интересная!
212 megalodon
 
03.11.06
18:35
ты меня дятлом назвал ламер пока не извинишься персонально конструктива не дождешься.
213 wPa
 
03.11.06
18:40
varbinary(16) vs int
Плюс - уникальный (поиск дырок, контроль уникаьности)
Минус - индекс (поиск, соединение)
214 Гений 1С
 
гуру
03.11.06
18:45
(213) от дырок можно избавиться с помощью моего алгоритма, уже писал, уникальность и так гарантирована для LONGINT, тогда где же плюсы GUID,
кстати откеда цитата
215 megalodon
 
03.11.06
18:47
ну понятно... как же можно собственные ошибки признавать, а? Вот жаль у меня нет статуса инженера знаний, я бы эту ветку под названием "Гений1С - дятел" в бзню запихнул. Эй, Гений1С, помоги чтоль мне в этом праведном деле, а?!
216 France
 
03.11.06
18:59
ни асилил..
вот
217 megalodon
 
03.11.06
19:10
кстати, Гений 1С, не имея душевных сил что либо доказать мне в рамках этой ветки, шлет мне письма следуещего содержания:

Тема: Уважаемый дятел
Проследите хронологию, вы меня первым обозвали, так что я умываю руки и в ветке обсуждаю только топик...
Разговаривать с вами мне не интересно, увы!


Ответ: Дятлом тебя, ламер, я назвал, и за это отвечу перед всеми, а ты, пустозвон, лучше бы вообще заткнулся - сошел бы хоть не за умного, но понятливого.

В общем, вероятно, здесь он разъяснит мне, как сие понимать. А также почему посетители форума недостойны увидеть его объяснений.
218 wPa
 
03.11.06
19:13
в общем топик в книгу знаний по наездам )
и обрезать по (0) с одним ответом
(0) Вопрос риторический.
219 Гений 1С
 
гуру
03.11.06
19:18
(218) жаль что в БЗ нет категорий, я бы кинул в "Лажания 1С". ;-)
220 France
 
03.11.06
19:22
(168) хм.. если правильно понял, ошибка на 255 таблиц возлагается на 1С?.. таки, 1С тут не причем. Это ограничение MSSQL на количество таблиц, одновоременно используемых в запросе.
(192) +1 за "где хранятся индексы"))
221 megalodon
 
03.11.06
19:34
слышь, Гений, может хватит мне слать на ящик письма оскорбительного содержания, а вместо этого ты мне и всем присутствующим на деле докажешь, что в данном споре прав ты, а не я? Подтверди слова делом - прими условия в (175). Не принимаешь - чего тогда воняешь, как задетая ненароком куча старого дерьма?
222 Гений 1С
 
гуру
03.11.06
19:41
(220) 1С выбирала модель и должна была подумать об ограничениях движка и как их обойти, конечно это лажа 1С... Какая это ЕРП, если не более 255 объектов может быть в базе данных...
223 megalodon
 
03.11.06
19:46
(222) я в ахуе... Гений.. убей себя об стену... такой инженер знаний только во вред, бля буду. И кстати ты еще не забыл, что ты облажался и не ответил на мой вызов?
224 Neco
 
03.11.06
19:48
(223) Ммм... а если без мата, всетаки культурная беседа по теме
225 Neco
 
03.11.06
19:52
Вижу, что придется проводить эксперимент. В SQL создавать две таблицу с GUID и индексом и проверять на скорость выборки и ввода данных.
226 Skynin
 
04.11.06
01:23
Забавно, откуда увереность что у 1Совцев не было такой идеи и информации, и обсуждения (0)

Как я понял Гений1С думал думал, и решил что они просто тупари и ничего не знали, и не думали ни о чем.

Оно конечно правильно, не стоит клякнуть перед авторитетами, да только недооценивать дурака - такая же дурость, а никак даже не талант.
227 spock
 
04.11.06
08:27
1. идентити хранится в свойствах таблицы, где-то в нутрях. Для получения следующего значения не делаются ни какие запросы по таблице - оно хранится.
2. Закрывать дырки совсем не обязательно, яб даже сказал, что вообще не нужно.
(225)Ты только результаты опубликуй и параметры тестирования, вплоть до скриптов на создание таблицы и индексов.
228 ERWINS
 
04.11.06
11:23
1) GUID создаются на рабочей станции...(если на 10 машинах вызвать rnd (а гуид по сути он)то каждый гуид будет создаваться независимо) при этом проблема уникальности ложится только на нее и вопрос о блокировках вообще не стоит!
2) Нам не нужена сортировка по ключевому полю, а только поиск. точный поиск (когда мы абсолютно точно знаем элемент, а не по шаблону) легче реализовать с помощью хеш функций, а GUID подходит для этого многократно лучше и доступ по хеш не зависит от размера базы 3-4 просмотра не более даже при милиардах записей
229 Neco
 
04.11.06
11:35
Честно, говоря еще пока не придумал как осуществить тестирование (ну тупой одынэсниг с сиквелом только на Вы).
Нужно создать таблицы с индексами в LONGINT и GUID, заполнить таблицы данными и провести эксперименты по выборке и записи данных в эти таблицы. Попробую поискать для начала в Инете, может кто уже такое осуществил.
230 ERWINS
 
04.11.06
11:41
(229) что бы сформировать новый longint надо найти наибольший в базе... это запрос... что дополнительная загрузка sql  и потеря времени, хранить в базе максимальный элемент увеличивая его на 1 тоже самое... плюс могут 2 машины сделать запросы а потом по полученному максимуму увеличить на 1 что повалет запись или приведет к ошибке если индекс уникальный... а это еще потеря производительности

при чтении вопрос в том что кластерный индекс по guid не нужен
231 acsent
 
04.11.06
11:41
Даже если и сеть блокировки на получение нового identity то они ничто по сравнению  со всеми остальными блокировками
232 acsent
 
04.11.06
11:44
+(231) Не знаю ни одного сервера, который бы не умел получать новый уникальный id
233 ERWINS
 
04.11.06
11:59
(232) это дополнительный запрос к SQL
234 Geza
 
04.11.06
12:00
(201) Задача: В офисе есть 6 томов документации +  том оглавление. Необходимо дома найти главу N. Условие: Посмотреть оглавление можно только дома...
Варианта решения такой тупой задачи 2: Припереть домой все шесть томов + оглавление или сначала принести и прочитать оглавление а потом еще сходить за нужным томом.....
Офис - база, Дом - результат запроса.
вот тебе и 256 таблиц......
и с выражениями поаккуратнее.....
235 Бым
 
04.11.06
12:00
Пока Истина Цикл
     
     НачатьТранзакцию();
     
     Для А = 1 По 1000 Цикл
         Док = СоздатьНовыйДокумент();
         Док.Записать();
     КонецЦикла;
     
     ОтменитьТранзакцию();
     
 КонецЦикла;

Такой простой фигнёй счетчик identity из 4-байт накрутиться за неделю.
Ну и нахера это нужно?
Только ради понтов Балабола_1С ?
236 ERWINS
 
04.11.06
12:02
(201) это возникает из за ограничений доступа... таблица доступна по чтению если... и получается дурдом...
237 acsent
 
04.11.06
12:04
(233) если мы получаем новый ИД автоматом во время INSERT то доп запроса нет
238 ERWINS
 
04.11.06
12:10
(237) но его надо использовать в других привязанных данных... (редко записывается элемент без привязки) теперь задача как получить идентификатор этого элемента? select?
239 acsent
 
04.11.06
12:26
(238) Для MSSQL будет что то типа такого
INSERT (ID, f1) Values (,f1)
Select @@identity
240 ERWINS
 
04.11.06
12:28
Select @@identity???
что то не помню такого....
может storyproc имеешь ввиду?
241 acsent
 
04.11.06
12:32
Из BOL

@@IDENTITY
Returns the last-inserted identity value.

Syntax
@@IDENTITY

Return Types
numeric

Remarks
After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY contains the last identity value generated by the statement. If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions in that they return the last value inserted into the IDENTITY column of a table.

@@IDENTITY and SCOPE_IDENTITY will return the last identity value generated in any table in the current session. However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. For more information, see IDENT_CURRENT.

Examples
This example inserts a row into a table with an identity column and uses @@IDENTITY to display the identity value used in the new row.

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
242 spock
 
04.11.06
12:51
епта, и эти люди спорят про блокировки и уникальные ключи...
(241)хы, дай народу ссылку на BOL, потом можно будет с ними говорить на одном языке.
243 acsent
 
04.11.06
12:54
Подтягивается тяжелая артилерия :)
244 ERWINS
 
04.11.06
13:03
(243) тригер- это дополнительная нагрузка на сервер...
245 bazvan
 
04.11.06
13:49
Давайте даавай те. Я в ентом не куя не понимаю но пива уже купил
246 France
 
04.11.06
14:18
здравых мыслей ооочень мало.. и думаю, не один новичок уйдет отсель с багажом ошибочных знаний...
247 ERWINS
 
04.11.06
14:22
(246) тогда давай здравые мысли...
мне действительно будет интересно твое мнение...
248 megalodon
 
04.11.06
14:54
(245) опоздал, приятель :-) весело было вчера.
249 spock
 
04.11.06
17:52
(229)Ну вот так можно (если у кого есть возражения по скриптам - обсуждаем):
Создание таблиц.
-- Создаем таблицу "IDTABLE" с колонками "ID" и "DESCR". И уникальный кластерный индекс по полю "ID"
IF EXISTS(SELECT name
     FROM     sysobjects
     WHERE  name = N'IDTABLE'
     AND     type = 'U')
   DROP TABLE IDTABLE
GO

CREATE TABLE IDTABLE (
   ID int IDENTITY(1,1) NOT NULL,
   DESCR char (100) NOT NULL
)
CREATE UNIQUE CLUSTERED INDEX [IX_ID] ON IDTABLE ([ID])
GO

-- Создаем таблицу "GUIDTABLE" с колонками "GUID" и "DESCR". И уникальный кластерный индекс по полю "GUID"
IF EXISTS(SELECT name
     FROM     sysobjects
     WHERE  name = N'GUIDTABLE'
     AND     type = 'U')
   DROP TABLE GUIDTABLE
GO

CREATE TABLE GUIDTABLE (
   GUID uniqueidentifier ROWGUIDCOL  NOT NULL DEFAULT (NEWID()),
   DESCR char (100) NOT NULL
)
CREATE UNIQUE CLUSTERED INDEX [IX_GUID] ON GUIDTABLE ([GUID])
GO

Вставка №1
--SELECT * FROM IDTABLE (NOLOCK)

SET NOCOUNT ON

DECLARE @CNT as int
DECLARE @RND as int
DECLARE @STRCNT as int
DECLARE @STR as varchar(100) -- строка из случайных символов диапазона 65-122 длиной 100 символов
DECLARE @ROWS as int

SET @CNT = 0
SET @ROWS = 5000 -- кол-во строк, вставляемых в цикле

WHILE @CNT < @ROWS BEGIN
   SET @STRCNT = 0
   SET @STR = ''
   WHILE @STRCNT < 100 BEGIN
       SET @RND = ROUND(122*RAND(), 0)
       IF @RND > 122 SET @RND = 122
       ELSE IF @RND < 65 SET @RND = 65

       SET @STR = @STR + CHAR(@RND)
       SET @STRCNT = @STRCNT + 1
   END

   INSERT INTO IDTABLE (DESCR) VALUES(@STR)
   SET @CNT = @CNT + 1
END
GO
-- в этот момент будет @ROWS строк

INSERT INTO IDTABLE (DESCR)
   SELECT DESCR
   FROM IDTABLE (NOLOCK)
GO
-- в этот момент будет 2*@ROWS строк

INSERT INTO IDTABLE (DESCR)
   SELECT DESCR
   FROM IDTABLE (NOLOCK)
GO
-- в этот момент будет 4*@ROWS строк

INSERT INTO IDTABLE (DESCR)
   SELECT DESCR
   FROM IDTABLE (NOLOCK)
GO
-- в этот момент будет 8*@ROWS строк

INSERT INTO IDTABLE (DESCR)
   SELECT DESCR
   FROM IDTABLE (NOLOCK)
GO
-- в этот момент будет 16*@ROWS строк

INSERT INTO IDTABLE (DESCR)
   SELECT DESCR
   FROM IDTABLE (NOLOCK)
GO
-- в этот момент будет 32*@ROWS строк

Вставка №2
--SELECT * FROM GUIDTABLE (NOLOCK)

SET NOCOUNT ON

DECLARE @CNT as int
DECLARE @RND as int
DECLARE @STRCNT as int
DECLARE @STR as varchar(100) -- строка из случайных символов диапазона 65-122 длиной 100 символов
DECLARE @ROWS as int

SET @CNT = 0
SET @ROWS = 5000 -- кол-во строк, вставляемых в цикле

WHILE @CNT < @ROWS BEGIN
   SET @STRCNT = 0
   SET @STR = ''
   WHILE @STRCNT < 100 BEGIN
       SET @RND = ROUND(122*RAND(), 0)
       IF @RND > 122 SET @RND = 122
       ELSE IF @RND < 65 SET @RND = 65

       SET @STR = @STR + CHAR(@RND)
       SET @STRCNT = @STRCNT + 1
   END

   INSERT INTO GUIDTABLE (DESCR) VALUES(@STR)
   SET @CNT = @CNT + 1
END
GO
-- в этот момент будет @ROWS строк

INSERT INTO GUIDTABLE (DESCR)
   SELECT DESCR
   FROM GUIDTABLE (NOLOCK)
GO
-- в этот момент будет 2*@ROWS строк

INSERT INTO GUIDTABLE (DESCR)
   SELECT DESCR
   FROM GUIDTABLE (NOLOCK)
GO
-- в этот момент будет 4*@ROWS строк

INSERT INTO GUIDTABLE (DESCR)
   SELECT DESCR
   FROM GUIDTABLE (NOLOCK)
GO
-- в этот момент будет 8*@ROWS строк

INSERT INTO GUIDTABLE (DESCR)
   SELECT DESCR
   FROM GUIDTABLE (NOLOCK)
GO
-- в этот момент будет 16*@ROWS строк

INSERT INTO GUIDTABLE (DESCR)
   SELECT DESCR
   FROM GUIDTABLE (NOLOCK)
GO
-- в этот момент будет 32*@ROWS строк
250 France
 
04.11.06
17:53
(249) не, ну некрасиво на... такие листинги на скл.ру нужно выкладывать, а не здесь..
251 spock
 
04.11.06
17:53
дааа, очень красиво получилось :(
252 Neco
 
04.11.06
18:52
(249) Моща!

Попробовал на SQL 2005 Express. Проц AMD Turion64 1.6Mh, память 1Гб

Получилось, что создание 160000 строк по скриптам из (249):


Замер 1:
IDTABLE    16c
GUIDTABLE    17с

Замер 2:
IDTABLE    14c
GUIDTABLE    18с

Замер3:
IDTABLE    12c
GUIDTABLE    17с

Замер 4:
IDTABLE    15c
GUIDTABLE    18с

Замер 5:
IDTABLE    12c
GUIDTABLE    10с

// Итого в среднем:
IDTABLE    13,8c
GUIDTABLE    16с



После каждого замера таблицы создавал заново.

Выводы: на мой взгляд разница есть, но не катастрофическая, можно даже сказать не
существенная, чтобы паниковать и отказываться от кластерных индексов
253 spock
 
04.11.06
19:08
(252)думается мне, что тестирование получилось однобокое...
254 Neco
 
04.11.06
19:39
(253) Чего так?
255 spock
 
04.11.06
20:11
(254)в результатах теста не учитываются дисковые операции.
256 Neco
 
04.11.06
21:00
(255) Возможно. Мой комп не идеальная тестовая платформа, хотя условия теста для одной и другой таблицы одинаковые, тем более выполнил несколько замеров.
257 acsent
 
04.11.06
23:57
На самом деле ID или GUID - это мелочи жизни. Весь тормоз не здесь
258 DGorgoN
 
05.11.06
10:59
(0) Пиши свою базу :)
259 Гений 1С
 
гуру
07.11.06
18:54
(230) ERWINS, а ты не рассматривал вариант с виртуальным VIEW, который хранит максимальный ID каждой таблицы??? Не знал про такое, на переэкзаменовку!!!!
А сама виртуальная вьюха в памяти сервера лежит, так что никаких запросов, по скорости равноценно ГУИД... двоешник
260 fisher
 
07.11.06
19:24
Я балдею. Люди с пеной у рта спорят о вещах, в которых не разбираются. Это ведь достаточно специфическая тема. Пойдите почитайте материалы хотя бы на том же sql.ru или на других ресурсах по SQL.
Об эту тему (использование GUID в качестве ключа) давно ломаются копья спецами классом повыше, чем здесь собрались. Там далеко не так все просто, и 1С в своем решении вовсе не новаторы.
261 ERWINS
 
07.11.06
21:57
(259) когда я обращаюсь к view я вызываю запрос или запрос вызывается когда я дополняю и изменяю таблицу?... приведи пример это view...
ты у нас гений... так давай пример...
262 SilentMan
 
07.11.06
22:40
(259) А что такое "виртуальный VIEW"?
263 France
 
07.11.06
22:42
(261) чего?
(262) :-).. тут как то дебаты была на тему "виртуальных" view и виртуальных таблиц 1С.. ща опять продолжатся...
264 Neco
 
07.11.06
22:48
(263) О нет только не этот бред
265 ERWINS
 
07.11.06
22:53
(263) ты про мои выступления?
266 France
 
07.11.06
22:55
(265) нет, не про выступления. Хотелось посмотреть другую формулировку поста в (261)...
267 Neco
 
07.11.06
22:58
268 ERWINS
 
07.11.06
23:00
(266) в базе создан view на таблицу... я я далаю select view и получаю результат...
как будет обнавлятся результат если мы меняем записть в таблице или добавляем новую (2 вариант обновление виртуальной таблице на SQL сервере аля тригер или полный повторный запрос в последнем случае принципиальной разницы есть view или нет не вижу)
269 France
 
07.11.06
23:05
(267) да уж.. "плодотворная" была ветка..
(268) обновление результата запроса - сугубо личное дело клиента, которое никоим образом не контролируется SQL не зависимо от того, что запрос был к view иди к реальной таблице
270 ERWINS
 
07.11.06
23:15
(269) не правильно объяснил... будет ли SQL кешировать (заранее подготавливать данные для view) или не будет заморачиваться?
271 France
 
07.11.06
23:17
(270) чЭстно - незнаю... надо будет на эту тему почитать..
272 Neco
 
07.11.06
23:23
(270) Сиквел оптимизирует запросы для вьювов. Кстати в ветки указанной в (267) упоминалось
273 Neco
 
07.11.06
23:24
Точнее стратегию выборки данных
274 France
 
07.11.06
23:25
(272) так, оптимизация - это одно...а подготовка и хранение в памятие все таки несколько другое..
(273) а это - план запроса кажись называется..
275 ERWINS
 
07.11.06
23:29
(272) про оптимизацию плана запроса понятно... это естественно... вопрос все таки в другом :) автоматически обновляет он данные для запроса? и причем это надо делать в каждой текущей транзакции
276 Neco
 
07.11.06
23:38
(275) Проде как вьюв никаких промежуточных данных не хранит
http://www.sql.ru/docs/sql/u_sql/ch20.shtml
277 ERWINS
 
07.11.06
23:39
(275) тогда толку от него в данном случае как от козла молока....
278 Гений 1С
 
гуру
08.11.06
10:33
(260) еще один демагог, пришел, ляпнул ни о чем, типа я крутой. Отвали!
(261) выше по тексту есть пример, как назначать уникальный ключ-счетчик без блокировок. Кури текст. Какие нафиг блокировки!!!???
(262) таблица, которая хранится в памяти сервера, а не на диске. Содержит для каждой таблицы номер последнего выданного ключа типа счетчик.
279 SilentMan
 
08.11.06
10:47
(278) Я правильно понимаю, что это твое собственное изобретение?
280 Гений 1С
 
гуру
08.11.06
10:55
(279) я думаю, все изобретения уже сделаны и так и должно работать выдача первичных ключей, если конечно имеет смысл это оптимизировать, правильно грят, блокировки по созданию новых объектов на порядок реже встречаются, чем блокировки регистров.
281 Растеряйка
 
08.11.06
11:03
(280) "правильно грят, блокировки по созданию новых объектов на порядок реже встречаются, чем блокировки регистров."
а почему так получается не подскажите?
282 Гений 1С
 
гуру
08.11.06
11:20
(281) из практики, батенька из практики.
Новые документы и элементы справочников вводятся реже, чем перепроведение документов, при котором меняются движения по регистрам. А у движений нет первичного ключа типа счетчик.
283 Растеряйка
 
08.11.06
11:23
(282) Значит если есть первичный ключ - блокировок будет меньше? Почему тогда 1С-цы не поставили первичный ключ на регистры?
284 Гений 1С
 
гуру
08.11.06
12:03
(283) наоборот. первичный ключ у регистра есть - это набор измерений, поэтому левый ключ не нужен, хотя как знать, как знать, если применить правила нормализации, то можно было бы и пронумеровать движения.
Это бы облегчило программирование, например можно было бы получить запись по одному ключу ID, удалить ее и т.п.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.