Имя: Пароль:
1C
 
Как лучше спроектировать регистр
0 lanc2233
 
20.11.20
12:51
Есть регистр, что-то типа лога.
Подразумеваются что в нем будет много записей, операции чтения, поиск записей и их редактирование через МенеджерЗаписи, изменение записей при проведении документов.

Одно из измерений регистра будет иметь составной тип "ЗаказПокупателя", "ЗаказПоставщику" и так около 5-7 типов (в процессе может добавляться).

Как лучше поступить, с точки зрения производительности : делать одно измерение с составным типом, или сделать 5-7 разных измерений с разными типами?

Когда-то вроде читал, что у реквизитов с составными типами нелинейно растет нагрузка на БД, особенно если включена индексация по ним.
1 mikecool
 
20.11.20
12:53
на каждый тип документа добавлять новое измерение? оО
2 ДенисЧ
 
20.11.20
12:58
Надо не "когда-то читать", а взять и посмотреть на структуру таблиц. Потом смоделировать ситуацию и покурить планы запросов.
Но вот идея "5-7 разных измерений с разными типами" - она однозначно влечёт за собой канделябр.
3 VladZ
 
20.11.20
13:00
(0) "Есть регистр, что-то типа лога." - убрать нахрен все ссылочные объекты. Оставить только текст.
4 youalex
 
20.11.20
13:04
(0) одно измерение - уникальный идентификатор. Писать через НаборЗаписей.Записать(Ложь)
Документ - в реквизит, и индекс на него, если надо.
5 lanc2233
 
20.11.20
13:07
Да, крутое решение. Спасибо.
6 youalex
 
20.11.20
13:09
(5) Только учти, что индекс работает только по одному реквизиту/ресурсу, в отличие от индекса по измерениям.  
Т.е. если у тебя стоит в двух реквизитах стоит индексировать, эти индексы не "складываются", будет работать только один из них.
7 H A D G E H O G s
 
20.11.20
13:13
(6) Реквизиты не складываются, а вот Реквизит и Измерение складывается.
8 H A D G E H O G s
 
20.11.20
13:15
Решение с UUID забавно. Но как его потом юзать в запросах?
9 youalex
 
20.11.20
13:15
(7) Да, там Реквизит+Измерения, Измерение штатно выбросить нельзя, увы.
10 ДенисЧ
 
20.11.20
13:15
(8) Зачем тебе запрос по логам?
11 H A D G E H O G s
 
20.11.20
13:19
(0) Автор, помни, кстати, как только ты имеешь РС с 2 и более измерениями и НаборЗаписей.Записать(Истина), ты можешь столкнуться с загадочным ожиданием на блокировке.
12 H A D G E H O G s
 
20.11.20
13:19
(10) Действительно, глупость какая.
13 Новиков
 
20.11.20
13:23
(4) Если в измерении стоит > 1 документа, то в типовых сделано где как:
- где просто составной тип,
- где определяемый тип, который сам по себе составной.

(8) Пост.обработкой, как еще? Получил датасет, преобразуй уникальный идентификатор обратно к документу. Я слыхал так запариваются те, кто логи куда-то складывает отдельно - эластики и прочее. ХЗ, насколько это актуально для ТС.
14 youalex
 
20.11.20
13:26
(13) не, там просто Новый УникальныйИдентификатор(), он с данными никак не связан.
15 mistеr
 
20.11.20
13:44
(10) Ладно запрос, но зачем "изменение записей при проведении документов"?
16 H A D G E H O G s
 
20.11.20
13:46
Я бы сделал составным Измерением ссылку на док.
Ну че там такого - лишние 5 байт в индексе.
Зато удобно и кластерно.
17 Новиков
 
20.11.20
14:14
(11) >>и НаборЗаписей.Записать(Истина), ты можешь столкнуться с загадочным ожиданием на блокировке.

В типовых тяжелые РС, статусы доков и подобное, именно так и пишутся, с Истиной.
18 H A D G E H O G s
 
20.11.20
14:17
(17) Ну может там одно измерение.
1С накладывает упр. блокировку на область набора записей, по которой не задан отбор с Записать(Истина). Чтобы не было фантомов.
Записать(Ложь) не допустит фантома на уровне вставки в индекс СУБД.
Вроде так.
Ошибка? Это не ошибка, это системная функция.