Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как сохранить огромную ТЗ на сервере, чтобы мгновенно её загрузить?

Как сохранить огромную ТЗ на сервере, чтобы мгновенно её загрузить?
Я
   alf2006x
 
13.07.20 - 17:28
Всем добрый день!

Собственно сабж.

ТЗ формируется во внешней обработке 30 минут.
Нужно сформированную ТЗ так сохранить, чтобы в следующие разы она загружалась 10 секунд (или ещё быстрее).

Сейчас использую ЗначениеВФайл (один раз, чтобы сохранить) и ЗначениеИзФайла (столько раз, сколько надо).
Загрузка в ЗначениеИзФайла занимает 70 секунд. Хочется побыстрее.
   Garykom
 
1 - 13.07.20 - 17:30
Никак
   H A D G E H O G s
 
2 - 13.07.20 - 17:34
Временное хранилище
   dka80
 
3 - 13.07.20 - 17:34
Общий модуль с галочкой Повторное использование, но это если памяти достаточно
   H A D G E H O G s
 
4 - 13.07.20 - 17:35
ЗначениеИзФайла должно быть тоже быстро, если нет индексов или версия платформы 8.3.10 или 8.3.17
   Garykom
 
5 - 13.07.20 - 17:37
(4) И нет ссылок на объекты
   Формат строки
 
6 - 13.07.20 - 17:38
Заданием формировать ТЗ, когда надо, по нужному расписанию или событию.
Запихнуть в РС и брать из него, когда надо.
НаборЗаписей = РегистрыСведений.РС.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.КакоеТоИзмерение.Установить(КакоеТоИзмерение);
НаборЗаписей.Загрузить(ТЗ);
НаборЗаписей.Записать();
   Garykom
 
7 - 13.07.20 - 17:42
(6) Имхается скоро в платформе 1С реализуют программные РС
   Василий Алибабаевич
 
8 - 13.07.20 - 17:43
(0) Голосую за табличку в скульной базе. Хоть в mySQL? хоть в MSSQL хоть еще какая.
   alf2006x
 
9 - 13.07.20 - 17:47
(4) 8.3.16.1148
   alf2006x
 
10 - 13.07.20 - 17:48
(4) 70 секунд. В принципе быстро. Но медленно. Хочется чтобы прямо ти-ууу.
   Fragster
 
11 - 13.07.20 - 17:48
(0) поставить нормальные диски и быстрый проц
   Fragster
 
12 - 13.07.20 - 17:48
хранить на рамдрайве
   alf2006x
 
13 - 13.07.20 - 17:49
(5) Никаких ссылок. Только строки. Колонок = 19 штук.
   H A D G E H O G s
 
14 - 13.07.20 - 17:50
(9) индексы есть?
   H A D G E H O G s
 
15 - 13.07.20 - 17:50
(13) а строк?
   alf2006x
 
16 - 13.07.20 - 17:51
(11) Не вариант. На разных машинах будет запускаться. Просто надо выжать максимум скорости. 1 300 000 строк в ТЗ
   alf2006x
 
17 - 13.07.20 - 17:51
(14) Индексов нет
   Fragster
 
18 - 13.07.20 - 17:51
(16) что значит "наразных машинах"? нафиг оно на клиенте вообще?
   fisher
 
19 - 13.07.20 - 17:53
(0) В одном сеансе? Или нужно один раз сформировать и чтобы из разных сеансов можно было загружать?
   alf2006x
 
20 - 13.07.20 - 17:53
(18) В том плане что на нескольких разных серверах.
   dka80
 
21 - 13.07.20 - 17:54
Разбить не несколько файлов, грузить в несколько потоков, потом соединить
   Йохохо
 
22 - 13.07.20 - 17:55
"Никаких ссылок" "1 300 000 строк в ТЗ"
т.е. это не ТЗ, это txt
   alf2006x
 
23 - 13.07.20 - 17:55
(19) Открыл обработку - сформировал ТЗ - сохранил. Полежал, отдохнул и поехали: снова открыл обработку и мгновенно (максимально быстро) загрузил ТЗ.
   alf2006x
 
24 - 13.07.20 - 17:57
(22) Ну как бы наверное да. Но у меня этот объект в отладчике обзывается ТаблицаЗначений.
   Йохохо
 
25 - 13.07.20 - 17:58
(24) если это твой отладчик поменяй, но нет? )) жесть
   fisher
 
26 - 13.07.20 - 17:59
(23) Если в одном сеансе, тогда (3). При благоприятных условиях она вообще будет оставаться в памяти (т.е. все мгновенно). В неблагоприятных условиях будет автоматическая сериализация-десериализация.
   fisher
 
27 - 13.07.20 - 18:00
(26) + При этом код абсолютно прозрачный. Без каких-то явных сохранений и загрузок.
   alf2006x
 
28 - 13.07.20 - 18:02
(27) И как туда (в этот общий модуль) правильно написать текст чтобы всё получилось именно так как задумано?
   Йохохо
 
29 - 13.07.20 - 18:03
(28) тебе надо начать с Радченко или купить у ДенисЧ
   alf2006x
 
30 - 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с.
   vde69
 
35 - 13.07.20 - 20:36
(0) создай регистр сведений и храни в нем
   alf2006x
 
36 - 13.07.20 - 23:42
(31) Просто вопросов мало.
Но уж если возникают - точно знаю куда надо идти. )
   alf2006x
 
37 - 13.07.20 - 23:48
(34) У меня файл, из которого я вытягиваю мою ТЗ весит 700 Мб.
ЗначениеИзФайла() замерял секундомером: получается 60 (+/- 5) сек.
   alf2006x
 
38 - 13.07.20 - 23:58
Еще не проверял, но вдруг подумал, чисто теоретически: если создать параметр сеанса
с типом ХранилищеЗначения (вдруг оно целиком в памяти будет храниться?)
Это как долго меня тут будут пинать за такие мысли?
   alf2006x
 
39 - 14.07.20 - 00:03
(33) :-)
   orefkov
 
40 - 14.07.20 - 00:24
(0)
Мне кажется, что сама такая постановка задачи говорит, что планируется какой-то дикий закат солнца вручную.
С ТЗ то что потом делают хоть?
   H A D G E H O G s
 
41 - 14.07.20 - 00:46
(38) И временное хранилище и параметр сеанса хранятся одинаково - в памяти сервера 1с, пока он не сбросил ее в сеансовые данные.
   МихаилМ
 
42 - 14.07.20 - 01:20
(38) ХранилищеЗначения -  таже строка внутреняя.
   МихаилМ
 
43 - 14.07.20 - 01:21
(42) нет . соврал. строка внутренняя, сжатая deflate
   palsergeich
 
44 - 14.07.20 - 03:08
Как показала практика - строковые функции при поточном чтении работают очень быстро.
К чему я это.
ТЗ преобразуется в csv файл.
Потом как то хранится, желательно в БД не помещать, а в какую нить шару специально для этого созданную.
Потом файл потоком считывается и переводится снова к виду ТЗ.
Но нужно понимать, что тупое добавление 1кк строк в ТЗ займет секунд 5. (НоваяСтрока = ТЗ.Добавить() я про это)
Само чтение построчное - 2-3 секунды
Строковые функции преобразования несколько секунд.
ИМХО в лоб чисто средствами платформы я хз что еще быстрее предложить. Но в 10 секунд мысленным экспериментом, если будут только функции СтрРазделить и поячейное обращение к колонкам строки ТЧ - уложиться можно.
Если делать промежуточную структуру с ЗаполнитьЗначения свойств то еще пара секунд сверху.
   rphosts
 
45 - 14.07.20 - 04:18
(0) Если не получится сделать так как предлагают выше кури тему в вот каком направлении: если тебе смотреть-редактировать - подсасывай с сервера динамически, если обработка всего этого - делай на сервере.
При хранении в хранилище сжатие может как сработать в плюс, так и в минус - нужно пробовать и замерять.
Если структура ТЗ статичная - я-бы использовал РС.
   vi0
 
46 - 14.07.20 - 04:41
(38) в сторону сжатия можно подумать. Сжатие может быть быстрее передачи между сеансами несжатого
   Конструктор1С
 
47 - 14.07.20 - 06:34
Попахивает кривой архитектурой...
   vi0
 
48 - 14.07.20 - 07:22
(47) и очень сильно
   VLAL
 
49 - 14.07.20 - 08:54
это так себестоимость сейчас считают?
   fisher
 
50 - 14.07.20 - 09:12
(28) Просто пишешь в функции код, который формирует и возвращает мегатаблицу. При первом обращении функция исполнится и вернет сформированную таблицу. При повторном обращении к этой же функции с теми же параметрами вместо того, чтобы заново исполнять функцию, платформа вернет закэшированный ранее результат. Кэширование работает стандартно. При частых обращениях кэш держится в памяти, потом вытесняется на диск. При необходимости восстанавливается с диска обратно в память. Т.е. в лучшем случае будет мгновенное чтение, в худшем - примерно как у тебя сейчас.
   alf2006x
 
51 - 14.07.20 - 10:17
(40) Да не, не похоже. Суть простая. Есть поставщики туруслуг (в данном случае гостиниц). Хотелбук, Островок, Броневик (и многие другие).
Все имеют свой АПИ для раздачи интересующей информации. В том числе массивов со странами, городами и собственно гостиницами.
Мы всё это матчим с объектами в нашей базе (например по примерному совпадению соответствующих геокоординат, либо по другим признакам).

И вот один из поставщиков отдаёт всю инфу в виде мегамассива (всё-превсё включено: и страны и гостиницы и адреса объектов и телефоны и описание, короче - полный фарш). Отдаёт JSON размером 10 629 381 Мб (~10,5 Гб). Вот это файло читается построчным ЧтениемJSON 30 минут. Читается и впихивается обработкой в ТЗ (а куда ещё?). А дальше идет работа в полуавтомате. Получеловек-полуандроид, глазками (и частично интеллектом), проверяет что найденный объект в нашей базе и есть то самое что мы матчим с загруженными данными. Если сомнений нет - тычет галку и оно привязывается путем сопоставления кода поставщика и объекта в базе (РегистрСведений). К слову, форма естессно управляемая.

А поскольку гостиницы, города да и страны имеют свойство изменяться (исчезать, появляться, переименовываться, переезжать), то подобную работу наш трудяга будет делать регулярно и(/или) периодически. Думается что в каждый такой раз, подходов для сопоставления будет не один (не два и не три). Всё ж таки мильён триста тыщ объектов это прилично. Ну вот и есть желание не заставлять его ждать загрузки данных каждый раз по пол-часа с момента запуска обработки до момента начала непосредственной работы. А цель - открыл обработку, выждал 10 секунд (10 - это чтобы не успел уснуть или пойти чаепитничать) и айда трудиться.
   alf2006x
 
52 - 14.07.20 - 10:30
(45) В целом согласен. РС - надежный и практически мгновенный вариант.
Тут уже порядок исчисления уходит в миллисекунды.
Возможно именно так и буду реализовывать.
Видимо изначально задача выглядела так, что не подразумевала какие-либо доработки конфигурации.
И до последнего мозг бьется за то чтобы конфу не трогать. Если ТЗ будет грузиться хотя бы 30-40 секунд,
то ну и ладно. Но морально я уже готов на РС.
   Новый участник
 
53 - 14.07.20 - 10:30
Нормализовать данные и хранить в регистре сведений, читать выборками.
   alf2006x
 
54 - 14.07.20 - 10:32
(53) Да, да, спору нет. Тут одни плюсы. В том числе динамическое считывание (это же имеется в виду под "выборками"?).
   Андроны едут
 
55 - 14.07.20 - 10:38
(51) Я читаю большие CSV-файлы запросом ADODB.Recordset в ТЗ. ТЗ в текстовый файл сохраняется методом Записать в СКД. И то и другое работает тоже очень быстро.
   alf2006x
 
56 - 14.07.20 - 10:42
(55) Интересная мысль. Сюда ещё не думал )
   alf2006x
 
57 - 14.07.20 - 10:43
(55) Тока не понял что за метод "Записать" в СКД?
   Андроны едут
 
58 - 14.07.20 - 10:45
(57) Примерно так:

        Результат = Новый ТабличныйДокумент;

    СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("Макет");
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    Результат.Записать(КаталогЛокальный + ИмяФайла, ТипФайлаТабличногоДокумента.TXT);
   alf2006x
 
59 - 14.07.20 - 10:49
(58) А где тут ТЗ?
   Fragster
 
60 - 14.07.20 - 10:49
засасывать в РС регламентным заданием ночью, оставлять только несопоставленные автоматически, которых будет не много в другом РС и с ним работать оператору уже по приходу на работу
 
 Рекламное место пустует
   Андроны едут
 
61 - 14.07.20 - 10:54
(59) ТЗ в СКД. Читаешь свою таблицу, а выводишь текстовое пользовательское поле такого типа Колонка1+";" + Колонка2+";" и т.д.
   alf2006x
 
62 - 14.07.20 - 10:57
(61) Это чтобы оно стало CSV?
   Андроны едут
 
63 - 14.07.20 - 10:59
(62) ну да, сохраняешь в текстовый файл с разделителями, а потом читаешь запросом.
   alf2006x
 
64 - 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") + ";"
   alf2006x
 
66 - 14.07.20 - 11:05
(65) Мощно. То есть колонка в ТД будет всего одна, правильно?
   alf2006x
 
67 - 14.07.20 - 11:06
(65) Никогда не использовал "Формат()" в запросе. Быстро работает?
   Андроны едут
 
68 - 14.07.20 - 11:08
(66) выводится только пользовательское поле ТЕКСТ с разделителями в табличный документ, который потом записывается в csv-файл методом записать
   Андроны едут
 
69 - 14.07.20 - 11:10
(67) это не в запросе, это пользовательское поле в СКД. В запросе у тебя поля твоей ТЗ, возможно с отборами. Кстати и текстовый файл можешь читать не весь, а с установленными отборами
   alf2006x
 
70 - 14.07.20 - 11:13
(69) оригинально
   alf2006x
 
71 - 14.07.20 - 11:15
Скоро вернусь (уходит засучивая рукава и с блестящими от внезапно нахлынувшего интереса глазами)
   Dmitry77
 
72 - 14.07.20 - 11:30
зачем пользователю сразу всю огромную таблицу? считал первые 100 записей и отдал в обработку. хранить можно в любом регистре  как текст с разделителями
   polosov
 
73 - 14.07.20 - 12:02
(72) Пользователи похоже под спидами - очень быстро работают.
   Fragster
 
74 - 14.07.20 - 14:38
(69) только индексов нет, так что любой запрос будет читать весь файл
   H A D G E H O G s
 
75 - 14.07.20 - 14:50
Весело тут у вас.
Опять магия ADO появилась.
Причем, абсолютно зря.
   lodger
 
76 - 14.07.20 - 14:53
(51) в РС запиши этот файл и пускай хоть обчитаются. НаКлиенте всё равно больше 10-20-50 строк за раз невозможно видеть.
   lodger
 
77 - 14.07.20 - 14:53
+(76) открытие будет от 0.01 до 5 секунд, смотря насколько печально всё с сервером.
   lodger
 
78 - 14.07.20 - 14:54
(76) не файл, а таблицу. извините.
   Вафель
 
79 - 14.07.20 - 14:59
как вариант - раскидать во внешнюю базу по табличками и уже оттуда вытягивать кусочками как нужно
   Сияющий в темноте
 
80 - 15.07.20 - 00:38
а почему Нельзя json прочитать во внешнюю sql базу и там с ним работать? тогда и грузить ничего не надо.
   rphosts
 
81 - 15.07.20 - 05:34
(75) а свой вариант?
PS тут не только АДО, тут и например в РС и подтягивать порциями предлагают, что имхо может взлететь
   Garykom
 
82 - 15.07.20 - 06:25
(81) Тогда проще создать "универсальный РС" с кучей Колонка1, Колонка2 и т.д. и его использовать.
А в какой колонке что и по какой индексированной отбирать хранить отдельно
   Конструктор1С
 
83 - 15.07.20 - 07:41
(65) аццкий код. Функционала с гулькин нос, а читать и изменять такой код чрезвычайно неудобно
   Конструктор1С
 
84 - 15.07.20 - 07:47
Автор, ты страдаешь какой-то ерундой. Погугли как устроены онлайн-карты на уровне БД, и делай что-то подобное
   Обработка
 
85 - 15.07.20 - 08:01
(0) Позови 1С-архитектора. Да просто 1Сника хотябы чуть чуть думающий над архитектурой.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.