Имя: Пароль:
1C
1С v8
Как лучше хранить данные в хранилище значения - одним куском, или разбивать?
0 Zhuravlik
 
28.10.22
16:45
1. Разбивать 60% (3)
2. Одним куском 40% (2)
Всего мнений: 5

Всем привет. Есть потребность хранить перечень различных данных в разрезе документа, в регистре сведений - в ресурсе с типом ХранилищеЗначения.
Это может быть несколько таблиц, или несколько структур, неважно. Важно два момента:
- Вложенная коллекция может быть объемной, например таблица в 50к строк, или больше
- Есть возможность эти коллекции разбивать

Вопрос - как лучше помещать эти данные?
Одним куском - например структура с 10-20 таблицами, каждая из которых может иметь различные объемы. Будет одна запись с измерением документ и такой структурой в хранилище.
Или по одной таблице - будет 10-20 записей с измерениями Документ, ИмяКоллекции и самой коллекцией в ресурсе.
Просьба по возможности аргументировать выбор. Заранее спасибо.
1 Fragster
 
гуру
28.10.22
16:48
делить на минимально требуемые единицы. т.е. если нужна будет в каком-то бизнес процессе одна таблица - она должна храниться отдельно от других. Если же данные используются всегда целиком - то пусть будет один кусок.
2 Fragster
 
гуру
28.10.22
16:48
1

Одним куском
4 Fragster
 
гуру
28.10.22
16:48
2

Разбивать
5 unenu
 
28.10.22
16:50
однополяроность проще и понятнее, а всякие многомеры от лукавого.

Одним куском
6 Garykom
 
гуру
28.10.22
16:54
(0) Однозначно

Разбивать
7 Garykom
 
гуру
28.10.22
16:55
(6)+ Ибо как разные сеансы/процессы будут читать-писать то?
8 Kassern
 
28.10.22
16:57
(7) А с чего вы решили, что разные сеансы и процессы будут работать с этой таблицей? Мы вообще не знаем, как будут использоваться данные из этого хранилища и будут ли вообще. Поэтому и нет смысла в этой голосовалке.
9 Garykom
 
гуру
28.10.22
16:58
И да.
Т.к. РС оно прекрасно работает с много записей, то каждую отдельную строку каждой таблицы можно в свою запись сувать.
Добавить к "Документ, ИмяКоллекции" еще уникальный внутри коллекции Ключ записи/строки, а в ресурс засовывать структуру строки таблицы.
10 Garykom
 
гуру
28.10.22
16:58
(8) Опыт. И всегда предполагаю худшее.
11 Kassern
 
28.10.22
17:02
(10) А потом окажется, что ТС захочет оперативно работать с таблицами из этого хранилища, делать запросы по таблицам, получать итоги по ним. И тогда вся тема просто в топку со всеми советами))
12 Сергиус
 
28.10.22
17:24
С точки зрения последующих обращений - лучше конечно разбить. Но тут тоже надо смотреть - ИМХО, 50 ресурсов тоже не хорошо.

Разбивать
13 ДедМорроз
 
28.10.22
17:28
Хранилище значения делает сериализацию при записи,поэтому,один кусок будет быстрее,чем несколько.
И,самое простое,посмотреть на механизм Присоединенные файлы.
И тут сразу будет ответ - нсли файл один,то и храним как один.
Если файлов несколько,то и делить на части.
14 Zhuravlik
 
28.10.22
17:29
(10) +1
(11) не окажется

Я за порционность просто потому, что во мне живет уверенность - если есть возможность разбить большой кусок на более мелкие, лучше разбить. Опять таки по-табличное чтение может понадобится. Что будет быстрее - считать все одним куском, использовать только две таблички, или считать отдельно только то что требуется.
15 Zhuravlik
 
28.10.22
17:32
(13) За десериализацию кстати - заметил сегодня неожиданный для себя момент. Были переживания за ссылки - что произойдет если в таблице есть ссылка, а имя таблицы этой ссылки изменилось. Так вот прекрасно восстановилось) Т.е. помещаю ссылку на МойСправочник, переименовываю в Удалить_МойСправочник, читаю - ссылка осталась, ошибки при чтении нет.
А вот штатная десериализация из json ожидаемо упала.
16 Zhuravlik
 
28.10.22
17:33
(12) речь не за 50 ресурсов, ресурс один - таблица. Будет 50 записей, а не 50 ресурсов.
17 Zhuravlik
 
28.10.22
17:35
(9) да нет, это уже слишком, такая детализация не нужна
18 Zhuravlik
 
31.10.22
10:52
(13) Выполнил замеры на выходных, не быстрее.

По результату пяти тестов получена таблица замеров, выкинута в сводную таблицу. Выигрышные замеры выделены светло синим цветом.  Чтобы избавиться от холодного старта – перед запуском снимаемых замеров выполнено несколько запусков тестов каждого вида:
https://ibb.co/X4jV7Q1

Разница по среднему времени:
https://ibb.co/nL4rmRJ

Память рабочего процесса
Счетчик: \Процесс(rphost*)\Байт виртуальной памяти - Показывает объем виртуального адресного пространства (в байтах), которое в данный момент использует процесс.  
Замер собран за время исполнения теста, выгружен в файл с разделителями, и проанализирован в Excell.  
https://ibb.co/9wFRpM7
Если сопоставить время пиков с таблицей замеров, увидим что пики приходятся на единовременное чтение структуры таблиц в тестах 1, 2, 5. В тестах 3, 4 пиков нет по той причине что счетчики работали с шагом в две секунды, и скорее всего их не засекли. Окрестностей времени тестов 3, 4 в собранных данных нет.
Пики также наблюдаются для операций по-табличного чтения, однако они более плавные.
Пики некритичные в данном случае – в 40-80 мб, но и окружение – тестовое, а не реальный прод с большим набором данных. Здесь только можно обратить внимание на сам факт прыжков памяти при единовременном чтении.

Тот же график в разлиновке по тестам (Т- таблицы, С - структуры):
https://ibb.co/PcBrBX8
19 Zhuravlik
 
31.10.22
10:55
(13) И,самое простое,посмотреть на механизм Присоединенные файлы
- да, была такая мысль, пока в подвешенном состоянии. Штатная десериализация упадет при изменении структуры метаданных, а если пилить свое то быстродействие скорее всего снизится.
Плюс нюанс описанный в (15) - уже из-за этого не хочется уходить от хранилища.
20 Zhuravlik
 
31.10.22
10:57
к (18) забыл описание теста: Тест выполнялся на серверной базе. Проверялось: чтение, запись через набор, запись через менеджер записи. Для: перечня таблиц сохраняемых отдельно, перечня таблиц сохраняемых в структуре.
Исходно сгенерирована таблица размерностью 80 колонок на 10 тысяч строк и раскопирована на 10 копий. Т.е. есть структура с 10 такими таблицами сохраняемая одним куском, и есть 10 таблиц сохраняемых по-отдельности.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.