|
Как сохранить огромную ТЗ на сервере, чтобы мгновенно её загрузить? | ☑ | ||
---|---|---|---|---|
0
alf2006x
13.07.20
✎
17:28
|
Всем добрый день!
Собственно сабж. ТЗ формируется во внешней обработке 30 минут. Нужно сформированную ТЗ так сохранить, чтобы в следующие разы она загружалась 10 секунд (или ещё быстрее). Сейчас использую ЗначениеВФайл (один раз, чтобы сохранить) и ЗначениеИзФайла (столько раз, сколько надо). Загрузка в ЗначениеИзФайла занимает 70 секунд. Хочется побыстрее. |
|||
1
Garykom
гуру
13.07.20
✎
17:30
|
Никак
|
|||
2
H A D G E H O G s
13.07.20
✎
17:34
|
Временное хранилище
|
|||
3
dka80
13.07.20
✎
17:34
|
Общий модуль с галочкой Повторное использование, но это если памяти достаточно
|
|||
4
H A D G E H O G s
13.07.20
✎
17:35
|
ЗначениеИзФайла должно быть тоже быстро, если нет индексов или версия платформы 8.3.10 или 8.3.17
|
|||
5
Garykom
гуру
13.07.20
✎
17:37
|
(4) И нет ссылок на объекты
|
|||
6
Формат строки
13.07.20
✎
17:38
|
Заданием формировать ТЗ, когда надо, по нужному расписанию или событию.
Запихнуть в РС и брать из него, когда надо. НаборЗаписей = РегистрыСведений.РС.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.КакоеТоИзмерение.Установить(КакоеТоИзмерение); НаборЗаписей.Загрузить(ТЗ); НаборЗаписей.Записать(); |
|||
7
Garykom
гуру
13.07.20
✎
17:42
|
(6) Имхается скоро в платформе 1С реализуют программные РС
|
|||
8
Василий Алибабаевич
13.07.20
✎
17:43
|
(0) Голосую за табличку в скульной базе. Хоть в mySQL? хоть в MSSQL хоть еще какая.
|
|||
9
alf2006x
13.07.20
✎
17:47
|
(4) 8.3.16.1148
|
|||
10
alf2006x
13.07.20
✎
17:48
|
(4) 70 секунд. В принципе быстро. Но медленно. Хочется чтобы прямо ти-ууу.
|
|||
11
Fragster
гуру
13.07.20
✎
17:48
|
(0) поставить нормальные диски и быстрый проц
|
|||
12
Fragster
гуру
13.07.20
✎
17:48
|
хранить на рамдрайве
|
|||
13
alf2006x
13.07.20
✎
17:49
|
(5) Никаких ссылок. Только строки. Колонок = 19 штук.
|
|||
14
H A D G E H O G s
13.07.20
✎
17:50
|
(9) индексы есть?
|
|||
15
H A D G E H O G s
13.07.20
✎
17:50
|
(13) а строк?
|
|||
16
alf2006x
13.07.20
✎
17:51
|
(11) Не вариант. На разных машинах будет запускаться. Просто надо выжать максимум скорости. 1 300 000 строк в ТЗ
|
|||
17
alf2006x
13.07.20
✎
17:51
|
(14) Индексов нет
|
|||
18
Fragster
гуру
13.07.20
✎
17:51
|
(16) что значит "наразных машинах"? нафиг оно на клиенте вообще?
|
|||
19
fisher
13.07.20
✎
17:53
|
(0) В одном сеансе? Или нужно один раз сформировать и чтобы из разных сеансов можно было загружать?
|
|||
20
alf2006x
13.07.20
✎
17:53
|
(18) В том плане что на нескольких разных серверах.
|
|||
21
dka80
13.07.20
✎
17:54
|
Разбить не несколько файлов, грузить в несколько потоков, потом соединить
|
|||
22
Йохохо
13.07.20
✎
17:55
|
"Никаких ссылок" "1 300 000 строк в ТЗ"
т.е. это не ТЗ, это txt |
|||
23
alf2006x
13.07.20
✎
17:55
|
(19) Открыл обработку - сформировал ТЗ - сохранил. Полежал, отдохнул и поехали: снова открыл обработку и мгновенно (максимально быстро) загрузил ТЗ.
|
|||
24
alf2006x
13.07.20
✎
17:57
|
(22) Ну как бы наверное да. Но у меня этот объект в отладчике обзывается ТаблицаЗначений.
|
|||
25
Йохохо
13.07.20
✎
17:58
|
(24) если это твой отладчик поменяй, но нет? )) жесть
|
|||
26
fisher
13.07.20
✎
17:59
|
(23) Если в одном сеансе, тогда (3). При благоприятных условиях она вообще будет оставаться в памяти (т.е. все мгновенно). В неблагоприятных условиях будет автоматическая сериализация-десериализация.
|
|||
27
fisher
13.07.20
✎
18:00
|
(26) + При этом код абсолютно прозрачный. Без каких-то явных сохранений и загрузок.
|
|||
28
alf2006x
13.07.20
✎
18:02
|
(27) И как туда (в этот общий модуль) правильно написать текст чтобы всё получилось именно так как задумано?
|
|||
29
Йохохо
13.07.20
✎
18:03
|
(28) тебе надо начать с Радченко или купить у ДенисЧ
|
|||
30
alf2006x
13.07.20
✎
18:07
|
(29) Ну написать то дело техники. Проблем не будет, справлюсь ("эй гугыл" - пока вроде работает).
Просто хотел на шару быстро получить пример. Всем спасибо за участие а dka80 за подсказку. Пошел пробовать. |
|||
31
Йохохо
13.07.20
✎
18:20
|
история
alf2006x 18:07 alf2006x 30.06.20 alf2006x 01.04.20 alf2006x 17.03.20 сделайте кнопку или виджет |
|||
32
Вафель
13.07.20
✎
18:40
|
повторное использование спасет на 20 мин, потом кэшировать все равно нужно будет
|
|||
33
Фрэнки
13.07.20
✎
18:49
|
Смотрю на ветку и понимаю, что что-то не то
Как сохранить огромную ЗП на севере чтобы мгновенно ее разгрузить |
|||
34
МихаилМ
13.07.20
✎
19:55
|
у меня пустая Тз 1М строк из строки внутненней создается за 1с.
|
|||
35
vde69
13.07.20
✎
20:36
|
(0) создай регистр сведений и храни в нем
|
|||
36
alf2006x
13.07.20
✎
23:42
|
(31) Просто вопросов мало.
Но уж если возникают - точно знаю куда надо идти. ) |
|||
37
alf2006x
13.07.20
✎
23:48
|
(34) У меня файл, из которого я вытягиваю мою ТЗ весит 700 Мб.
ЗначениеИзФайла() замерял секундомером: получается 60 (+/- 5) сек. |
|||
38
alf2006x
13.07.20
✎
23:58
|
Еще не проверял, но вдруг подумал, чисто теоретически: если создать параметр сеанса
с типом ХранилищеЗначения (вдруг оно целиком в памяти будет храниться?) Это как долго меня тут будут пинать за такие мысли? |
|||
39
alf2006x
14.07.20
✎
00:03
|
(33) :-)
|
|||
40
orefkov
14.07.20
✎
00:24
|
(0)
Мне кажется, что сама такая постановка задачи говорит, что планируется какой-то дикий закат солнца вручную. С ТЗ то что потом делают хоть? |
|||
41
H A D G E H O G s
14.07.20
✎
00:46
|
(38) И временное хранилище и параметр сеанса хранятся одинаково - в памяти сервера 1с, пока он не сбросил ее в сеансовые данные.
|
|||
42
МихаилМ
14.07.20
✎
01:20
|
(38) ХранилищеЗначения - таже строка внутреняя.
|
|||
43
МихаилМ
14.07.20
✎
01:21
|
(42) нет . соврал. строка внутренняя, сжатая deflate
|
|||
44
palsergeich
14.07.20
✎
03:08
|
Как показала практика - строковые функции при поточном чтении работают очень быстро.
К чему я это. ТЗ преобразуется в csv файл. Потом как то хранится, желательно в БД не помещать, а в какую нить шару специально для этого созданную. Потом файл потоком считывается и переводится снова к виду ТЗ. Но нужно понимать, что тупое добавление 1кк строк в ТЗ займет секунд 5. (НоваяСтрока = ТЗ.Добавить() я про это) Само чтение построчное - 2-3 секунды Строковые функции преобразования несколько секунд. ИМХО в лоб чисто средствами платформы я хз что еще быстрее предложить. Но в 10 секунд мысленным экспериментом, если будут только функции СтрРазделить и поячейное обращение к колонкам строки ТЧ - уложиться можно. Если делать промежуточную структуру с ЗаполнитьЗначения свойств то еще пара секунд сверху. |
|||
45
rphosts
14.07.20
✎
04:18
|
(0) Если не получится сделать так как предлагают выше кури тему в вот каком направлении: если тебе смотреть-редактировать - подсасывай с сервера динамически, если обработка всего этого - делай на сервере.
При хранении в хранилище сжатие может как сработать в плюс, так и в минус - нужно пробовать и замерять. Если структура ТЗ статичная - я-бы использовал РС. |
|||
46
vi0
14.07.20
✎
04:41
|
(38) в сторону сжатия можно подумать. Сжатие может быть быстрее передачи между сеансами несжатого
|
|||
47
Конструктор1С
14.07.20
✎
06:34
|
Попахивает кривой архитектурой...
|
|||
48
vi0
14.07.20
✎
07:22
|
(47) и очень сильно
|
|||
49
VLAL
14.07.20
✎
08:54
|
это так себестоимость сейчас считают?
|
|||
50
fisher
14.07.20
✎
09:12
|
(28) Просто пишешь в функции код, который формирует и возвращает мегатаблицу. При первом обращении функция исполнится и вернет сформированную таблицу. При повторном обращении к этой же функции с теми же параметрами вместо того, чтобы заново исполнять функцию, платформа вернет закэшированный ранее результат. Кэширование работает стандартно. При частых обращениях кэш держится в памяти, потом вытесняется на диск. При необходимости восстанавливается с диска обратно в память. Т.е. в лучшем случае будет мгновенное чтение, в худшем - примерно как у тебя сейчас.
|
|||
51
alf2006x
14.07.20
✎
10:17
|
(40) Да не, не похоже. Суть простая. Есть поставщики туруслуг (в данном случае гостиниц). Хотелбук, Островок, Броневик (и многие другие).
Все имеют свой АПИ для раздачи интересующей информации. В том числе массивов со странами, городами и собственно гостиницами. Мы всё это матчим с объектами в нашей базе (например по примерному совпадению соответствующих геокоординат, либо по другим признакам). И вот один из поставщиков отдаёт всю инфу в виде мегамассива (всё-превсё включено: и страны и гостиницы и адреса объектов и телефоны и описание, короче - полный фарш). Отдаёт JSON размером 10 629 381 Мб (~10,5 Гб). Вот это файло читается построчным ЧтениемJSON 30 минут. Читается и впихивается обработкой в ТЗ (а куда ещё?). А дальше идет работа в полуавтомате. Получеловек-полуандроид, глазками (и частично интеллектом), проверяет что найденный объект в нашей базе и есть то самое что мы матчим с загруженными данными. Если сомнений нет - тычет галку и оно привязывается путем сопоставления кода поставщика и объекта в базе (РегистрСведений). К слову, форма естессно управляемая. А поскольку гостиницы, города да и страны имеют свойство изменяться (исчезать, появляться, переименовываться, переезжать), то подобную работу наш трудяга будет делать регулярно и(/или) периодически. Думается что в каждый такой раз, подходов для сопоставления будет не один (не два и не три). Всё ж таки мильён триста тыщ объектов это прилично. Ну вот и есть желание не заставлять его ждать загрузки данных каждый раз по пол-часа с момента запуска обработки до момента начала непосредственной работы. А цель - открыл обработку, выждал 10 секунд (10 - это чтобы не успел уснуть или пойти чаепитничать) и айда трудиться. |
|||
52
alf2006x
14.07.20
✎
10:30
|
(45) В целом согласен. РС - надежный и практически мгновенный вариант.
Тут уже порядок исчисления уходит в миллисекунды. Возможно именно так и буду реализовывать. Видимо изначально задача выглядела так, что не подразумевала какие-либо доработки конфигурации. И до последнего мозг бьется за то чтобы конфу не трогать. Если ТЗ будет грузиться хотя бы 30-40 секунд, то ну и ладно. Но морально я уже готов на РС. |
|||
53
Новый участник
14.07.20
✎
10:30
|
Нормализовать данные и хранить в регистре сведений, читать выборками.
|
|||
54
alf2006x
14.07.20
✎
10:32
|
(53) Да, да, спору нет. Тут одни плюсы. В том числе динамическое считывание (это же имеется в виду под "выборками"?).
|
|||
55
Андроны едут
14.07.20
✎
10:38
|
(51) Я читаю большие CSV-файлы запросом ADODB.Recordset в ТЗ. ТЗ в текстовый файл сохраняется методом Записать в СКД. И то и другое работает тоже очень быстро.
|
|||
56
alf2006x
14.07.20
✎
10:42
|
(55) Интересная мысль. Сюда ещё не думал )
|
|||
57
alf2006x
14.07.20
✎
10:43
|
(55) Тока не понял что за метод "Записать" в СКД?
|
|||
58
Андроны едут
14.07.20
✎
10:45
|
(57) Примерно так:
Результат = Новый ТабличныйДокумент; СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("Макет"); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); Результат.Записать(КаталогЛокальный + ИмяФайла, ТипФайлаТабличногоДокумента.TXT); |
|||
59
alf2006x
14.07.20
✎
10:49
|
(58) А где тут ТЗ?
|
|||
60
Fragster
гуру
14.07.20
✎
10:49
|
засасывать в РС регламентным заданием ночью, оставлять только несопоставленные автоматически, которых будет не много в другом РС и с ним работать оператору уже по приходу на работу
|
|||
61
Андроны едут
14.07.20
✎
10:54
|
(59) ТЗ в СКД. Читаешь свою таблицу, а выводишь текстовое пользовательское поле такого типа Колонка1+";" + Колонка2+";" и т.д.
|
|||
62
alf2006x
14.07.20
✎
10:57
|
(61) Это чтобы оно стало CSV?
|
|||
63
Андроны едут
14.07.20
✎
10:59
|
(62) ну да, сохраняешь в текстовый файл с разделителями, а потом читаешь запросом.
|
|||
64
alf2006x
14.07.20
✎
11:01
|
(61) А этот формат где настраивается? В макете?
|
|||
65
Андроны едут
14.07.20
✎
11:03
|
(64) вот пример поля ТЕКСТ из реальной обработки:
Код + ";" + МагазинКод + ";" + Формат(Цена, "ЧЦ=12; ЧДЦ=2; ЧН=0; ЧГ=0") + ";" + Строка(Выбор Когда ДнейДоставки > 99 Тогда -1 Иначе ДнейДоставки Конец) + ";" + Строка(ЕстьКП) + ";" + Строка(СогласовыватьЦену) + ";" + Формат(МинЦена, "ЧЦ=12; ЧДЦ=2; ЧН=0; ЧГ=0") + ";" + Формат(Остаток, "ЧЦ=12; ЧДЦ=0; ЧН=0; ЧГ=0") + ";" |
|||
66
alf2006x
14.07.20
✎
11:05
|
(65) Мощно. То есть колонка в ТД будет всего одна, правильно?
|
|||
67
alf2006x
14.07.20
✎
11:06
|
(65) Никогда не использовал "Формат()" в запросе. Быстро работает?
|
|||
68
Андроны едут
14.07.20
✎
11:08
|
(66) выводится только пользовательское поле ТЕКСТ с разделителями в табличный документ, который потом записывается в csv-файл методом записать
|
|||
69
Андроны едут
14.07.20
✎
11:10
|
(67) это не в запросе, это пользовательское поле в СКД. В запросе у тебя поля твоей ТЗ, возможно с отборами. Кстати и текстовый файл можешь читать не весь, а с установленными отборами
|
|||
70
alf2006x
14.07.20
✎
11:13
|
(69) оригинально
|
|||
71
alf2006x
14.07.20
✎
11:15
|
Скоро вернусь (уходит засучивая рукава и с блестящими от внезапно нахлынувшего интереса глазами)
|
|||
72
Dmitry77
14.07.20
✎
11:30
|
зачем пользователю сразу всю огромную таблицу? считал первые 100 записей и отдал в обработку. хранить можно в любом регистре как текст с разделителями
|
|||
73
polosov
14.07.20
✎
12:02
|
(72) Пользователи похоже под спидами - очень быстро работают.
|
|||
74
Fragster
гуру
14.07.20
✎
14:38
|
(69) только индексов нет, так что любой запрос будет читать весь файл
|
|||
75
H A D G E H O G s
14.07.20
✎
14:50
|
Весело тут у вас.
Опять магия ADO появилась. Причем, абсолютно зря. |
|||
76
lodger
14.07.20
✎
14:53
|
(51) в РС запиши этот файл и пускай хоть обчитаются. НаКлиенте всё равно больше 10-20-50 строк за раз невозможно видеть.
|
|||
77
lodger
14.07.20
✎
14:53
|
+(76) открытие будет от 0.01 до 5 секунд, смотря насколько печально всё с сервером.
|
|||
78
lodger
14.07.20
✎
14:54
|
(76) не файл, а таблицу. извините.
|
|||
79
Вафель
14.07.20
✎
14:59
|
как вариант - раскидать во внешнюю базу по табличками и уже оттуда вытягивать кусочками как нужно
|
|||
80
Сияющий в темноте
15.07.20
✎
00:38
|
а почему Нельзя json прочитать во внешнюю sql базу и там с ним работать? тогда и грузить ничего не надо.
|
|||
81
rphosts
15.07.20
✎
05:34
|
(75) а свой вариант?
PS тут не только АДО, тут и например в РС и подтягивать порциями предлагают, что имхо может взлететь |
|||
82
Garykom
гуру
15.07.20
✎
06:25
|
(81) Тогда проще создать "универсальный РС" с кучей Колонка1, Колонка2 и т.д. и его использовать.
А в какой колонке что и по какой индексированной отбирать хранить отдельно |
|||
83
Конструктор1С
15.07.20
✎
07:41
|
(65) аццкий код. Функционала с гулькин нос, а читать и изменять такой код чрезвычайно неудобно
|
|||
84
Конструктор1С
15.07.20
✎
07:47
|
Автор, ты страдаешь какой-то ерундой. Погугли как устроены онлайн-карты на уровне БД, и делай что-то подобное
|
|||
85
Обработка
15.07.20
✎
08:01
|
(0) Позови 1С-архитектора. Да просто 1Сника хотябы чуть чуть думающий над архитектурой.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |