Последние сообщения

#1
7.7 / Re: Алгоритм формирования CDX
Последний ответ от Ветер в поле - Сегодня в 11:01
Сорри, что немного не по теме...
Ускорение индексирования актуально для больших баз. Но я в упор не вижу смысла в файловых базах при размере больше нескольких ГБ. Нет возможности бэкапа в течении дня, производительность существенно ниже, чем у SQL, нет многих возможностей, которые есть у того. У ДБФ только пара преимуществ - более быстрый доступ к единичным объектам (доступ через точку) и более быстрая запись. А еще у ДБФ отвратительная безопасность - всякие шифровальщики прекрасно шифруют файлы базы (проверено, к сожалению).
Да, необходимо часть функционала переписывать, чтобы перейти на SQL. У меня на это пара месяцев ушло. Необходимо было получить ускорение для доступа к множеству справочников. Я написал класс ЗапросКСправочнику, который радикально увеличил скорость и удобство работы со справочниками. Причем ускорение было даже для ДБФ, пусть и не столь радикальное. В этом решении я как и в Прямом Запросе использовал 1С++ для SQL и SQLite для ДБФ. Но из-за процедурного способа управления запросом, а не разбора текста запроса, я радикально снизил затраты на подготовку. В итоге даже тупое использование по типу создал объект, наложил условия, выполнил запрос, обработал результат поднял скорость до 1500 запросов в секунду. А ведь оптимизация (создать один раз объект и использовать параметрический запрос) позволяет в 3 раза поднять скорость.

Вот пример использования параметрического запроса:
НачВремя = _GetPerformanceCounter();
	
	НачДатаРождения = '15.12.1978';
	
	оСпр = СоздатьОбъект("ЗапросКСправочнику");
	оСпр.Инит("Пациенты");
	оСпр.ДобавитьРеквизиты("ТекущийЭлемент,Код");
	
	Для К = 0 По ВыбКолвоЭлем - 1 Цикл
		оСпр.ДобавитьУсловие("ДатаРождения", НачДатаРождения + К, "=", , 1);
		тзЭлем = оСпр.ВыполнитьЗапрос();	
		
		тзЭлем.ВыбратьСтроки();
		Пока тзЭлем.ПолучитьСтроку() = 1 Цикл
			
		КонецЦикла;
	КонецЦикла;
	
	КонВремя = _GetPerformanceCounter();
	
	Предупреждение("Отработано за " + (КонВремя - НачВремя) / 1000 + " с.");
	
КонецПроцедуры
#2
7.7 / Re: Алгоритм формирования CDX
Последний ответ от alyuev - 12 августа 2026, 18:00
Кое-что вот тут обсуждалось:
https://www.1cpp.ru/forum/YaBB.pl?num=1241013307/0#0 - " Кодировка и Порядок сортировки в 1С ДБФ"
https://www.1cpp.ru/forum/YaBB.pl?num=1240102224/all - "Индексы при вставке записей"

Из тещих результатов:

ЧАСТЬ 7. Измеренные показатели
[th] Показатель [/th]
[th] Значение [/th]


 Таблиц  344 
 Объём DBF  31,14 ГБ 
 Объём CDX  ~4 ГБ 
 Записей  218 460 937 
 Ключей  ~405 800 000 
 Скорость сборки  1,46 с на миллион ключей на ядро 
 Штатная переиндексация 1С  ~1800 с 
 Наша, 8 потоков  151 с 
 Ускорение  12x 


Узкое место — чтение диска: 211 МБ/с при восьми потоках против 364 МБ/с в
один поток. Самая долгая таблица
SC8135
(22 тега, 45,9 млн ключей) занимает
102 с и задаёт нижнюю границу, пока распараллеливание идёт по таблицам.


Но самое главное - пока это больше эвристика, нежели четкий алгоритм. Т.е. ИИ вывел алгоритм эмпирически по существующим данным + кое-что с форумов + файлы заголовков, как писал выше. Тестирую. Индексы создаются, в 1С заходит, не ругается; справочники, журналы - открываются без вопросов. Отборы работают. Но еще нужны тесты...
#3
7.7 / Алгоритм формирования CDX
Последний ответ от alyuev - 10 августа 2026, 14:15
Всем привет. Всё в отпусках? Никто ничего не пишет.... :-)

Такой вопрос - есть ли где-то расписанный алгоритм, как 1С формирует индексы при переиндексации?
Есть возможность ускорить процесс в 10 раз за счет распараллеливания процесса. Вместо 30минут будет делать 3.
Но при анализе разбор всё время натыкался на разные нюансы.

Сначала ИИ пытался проанализировать некоторые базы и CDX, которые я ему давал. Он что-то распарсил, сделал сверщик. Но потом я подумал и дал ему определения функций, которые есть в 1С-ных родных DLL и там он нашел в двух файлах dbeng32.h и bkend.h (из 1CHEADERS) полезное - нашел там таблицы кодировок, подключился к библиотекам, выгрузил их все, определил, что есть файл 1CV7.ORD - там 2 таблицы символов для правил сортировки. У нас в конфигураторе стоит кодировка базы как CUSTOM - но как оказалось, сверщик всё равно после переиндексции находил расхождения с оригинальными CDX при использовании этих таблиц. И всё равно пришлось ему допиливать алгоритм построения индекса, чтобы не было расхождений. И это завязка только на текущую базу. На другой - надо будет опять искать алгоритм сортировки.

Вот и хотелось бы узнать, может кто уже ковырял в этом направлении?
#4
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от cr - 20 июля 2026, 15:59
Цитата: trdm от 17 июля 2026, 09:17НАДО БЫ КУДА-НИТЬ ЗАКИНУТЬ ИНТЕЛЛОВСКИЙ КОМПЙЛЕР, рядом положить.
а то его непонятно как качать
Нужен репозитарий для всего наследства 7.7. На гитхабе и гитлабе.
#5
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от alyuev - 17 июля 2026, 13:56
Можно с rutracker качать. Например, - https://rutracker.org/forum/viewtopic.php?t=3021912 - ISO образ
#6
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от trdm - 17 июля 2026, 09:17
НАДО БЫ КУДА-НИТЬ ЗАКИНУТЬ ИНТЕЛЛОВСКИЙ КОМПЙЛЕР, рядом положить.
а то его непонятно как качать
#7
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от alyuev - 16 июля 2026, 14:51
Спасибо
#8
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от ADirks - 16 июля 2026, 13:53
Вот, у меня есть.  Возможно, максимально актуальное.

https://disk.yandex.ru/d/PyFHlplM4VCFnA
#9
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от alyuev - 15 июля 2026, 12:18
Цитата: trad от 23 сентября 2025, 09:14https://www.dropbox.com/scl/fi/9dz75sifg1iep7sh7l8fa/icpp.zip?rlkey=tudkcp4w4ygaj58u9ancsv0wk&dl=0
не уверен что самое последнее
В этом архиве есть битые имена папок и файлов вот тут icpp\Testing\Config\ - есть у кого-то другой архив с целыми папками и файлами?
#10
Дружественные проекты / Re: Реанимация сборки 1С++
Последний ответ от alyuev - 15 июля 2026, 11:51
Выложил на гит - https://github.com/alyuev/1cpp