Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6  ОтправитьПечать
Очень популярная тема (более 25 ответов) 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании. (число прочтений - 31196 )
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #45 - 22. Октября 2010 :: 11:14
Печать  
simply писал(а) 22. Октября 2010 :: 10:58:
... если у меня регистр движения товара занимает почти 1Гб...

На всякий случай отмечу один момент, если Вы используете vk или патч для решения проблемы 1Гб, то при использовании V7DBNet обязательно уберите его из платформы, а то подерутся Улыбка

И еще V7DBNet тестировался на 25 и 27 релизе платформы.
  
Наверх
www  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #46 - 22. Октября 2010 :: 11:30
Печать  
Wirth писал(а) 22. Октября 2010 :: 11:14:
simply писал(а) 22. Октября 2010 :: 10:58:
... если у меня регистр движения товара занимает почти 1Гб...

На всякий случай отмечу один момент, если Вы используете vk или патч для решения проблемы 1Гб, то при использовании V7DBNet обязательно уберите его из платформы, а то подерутся Улыбка

И еще V7DBNet тестировался на 25 и 27 релизе платформы.

Ничего не использую. Проблема пока проявляется только в ужасной скорости отчетов.
Релиз 27.
  
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #47 - 25. Октября 2010 :: 05:17
Печать  
simply писал(а) 22. Октября 2010 :: 10:58:
Wirth писал(а) 02. Августа 2010 :: 21:13:
Устраивает, только я так понял что вначале необходимо создать виртуальную таблицу в памяти. А если это журнал документов ~1Gb?

Я правильно понял, если у меня регистр движения товара занимает почти 1Гб, то мне 1sqlite не подходит?
А V7DBNet - то, что доктор прописал? Улыбка

Одно не исключает другого.
Это просто совершенно разные вещи.
1sqlite - просто предоставляет возможность делать SQL-запросы, которые "унутре" реализуются родными методами 1С по работе с файлами данных. Те она НАДСТРОЙКА над db-движком 1С.
V7DBNet - меняет сам db-движок 1С. А надстройка продолжает работать и на новом движке.

ЗЫ: Создание виртуальной таблицы в 1sqlite отнюдь не означает физическое перекачивание данных из таблицы 1С куда-либо.
На то она и виртуальная таблица. Когда запросу понадобятся данные из виртуальной таблицы, 1sqlite будет читать их непосредственно из таблицы 1С.
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #48 - 25. Октября 2010 :: 05:35
Печать  
Цитата:
Создание виртуальной таблицы в 1sqlite отнюдь не означает физическое перекачивание данных из таблицы 1С куда-либо.
На то она и виртуальная таблица. Когда запросу понадобятся данные из виртуальной таблицы, 1sqlite будет читать их непосредственно из таблицы 1С.

Так это здорово! Иными словами, если я правильно понял, 1sqlite будет использовать кэш V7DBNet. Тогда, по идеи, обе разработки отлично дополняют друг-друга.
  
Наверх
www  
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #49 - 25. Октября 2010 :: 06:18
Печать  
Вечером хочу попробовать потестить на скорость совместного использования 1sqlite и V7DBNet. Подскажите как переписать такой пример под 1sqlite?

     Рег=СоздатьОбъект("Справочник.Тест");
     Ном=0;
     Кол=0;

     Если _DirectRead=1 Тогда                  
           V7DBNet.DirectRead();
     КонецЕсли;
     
     Если Транзакция=1 Тогда
           НачатьТранзакцию();
     КонецЕсли;
           
     Тим=_GetPerformanceCounter();
     Рег.ПорядокНаименований();
     Рег.ВыбратьЭлементы();
     Пока Рег.ПолучитьЭлемент()>0 Цикл
           Если ( Число(Рег.Новый10) % 5 ) = 0 Тогда
                 Кол=Кол+1;                  
           КонецЕсли;
           Ном=Ном+1;
     КонецЦикла;
     Сообщить(Строка(_GetPerformanceCounter()-Тим));
     
     Если Транзакция=1 Тогда
           ЗафиксироватьТранзакцию();
     КонецЕсли;
     
     Сообщить("Всего выбрано: "+ном+", удовлетворяет условию: "+кол);

Пример использую для проверки скорости перебора большого справочника (Самый тяжёлый режим для V7DBNet, т.к. кэш роли в нем не играет).
Новый10 - строка 100
  
Наверх
www  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #50 - 25. Октября 2010 :: 06:44
Печать  
orefkov писал(а) 25. Октября 2010 :: 05:17:
ЗЫ: Создание виртуальной таблицы в 1sqlite отнюдь не означает физическое перекачивание данных из таблицы 1С куда-либо.
На то она и виртуальная таблица. Когда запросу понадобятся данные из виртуальной таблицы, 1sqlite будет читать их непосредственно из таблицы 1С.

Спасибо!
Это радует Улыбка
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #51 - 25. Октября 2010 :: 06:48
Печать  
Wirth писал(а) 25. Октября 2010 :: 06:18:
ЗафиксироватьТранзакцию();

Эй, Изверг, ты почто животинку мучаешь?
Где ж это видано, чтобы фиксировать транзакцию при проведении запросов только на чтение? - это раз ... а два - нафига тут вообще транзакция?
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #52 - 25. Октября 2010 :: 06:52
Печать  
Фиксирую транзакцию по флажку, т.е. не всегда. Тест не мой - идея Владимира Ходакова, немного мной модифицированная.
Тест для сравнения разных режимов: обычного доступа, доступа по транзакции, по DirectRead.
В реальной программе транзакция конечно противопоказана.
  
Наверх
www  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #53 - 25. Октября 2010 :: 06:56
Печать  
Wirth писал(а) 25. Октября 2010 :: 06:52:
Фиксирую транзакцию по флажку, т.е. не всегда. Тест не мой - идея Владимира Ходакова, немного мной модифицированная.
Тест для сравнения разных режимов: обычного доступа, доступа по транзакции, по DirectRead.
В реальной программе транзакция конечно противопоказана.

Если движок грамотный, то многое зависит от настроек режима изоляции транзакций.
Хотя, я ни разу не встречал реального случая, когда было бы выгодно использовать что-либо, кроме ReadCommited.
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #54 - 25. Октября 2010 :: 07:05
Печать  
Результаты выглядят примерно так (все хочу видео-ролик сделать про тестирование, руки не доходят):
Два сеанса, в одном выполняется обработка, второй просто открыт.
1С:
Простой режим ~90 сек
Режим транзакции ~17-20 сек
V7DBNet:
Простой режим ~6-7 сек
Режим транзакции ~6-7 сек
DirectRead (специально увеличен кэш) ~3 сек

Вот думаю оформить в виде статьи с видео роликами (скринами с экрана) и заодно посмотреть как 1sqlite поведет себя.

PS. Сеансы открыты на разных компьютерах в реальной сети.
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #55 - 25. Октября 2010 :: 07:08
Печать  
Wirth писал(а) 25. Октября 2010 :: 06:18:
Вечером хочу попробовать потестить на скорость совместного использования 1sqlite и V7DBNet. Подскажите как переписать такой пример под 1sqlite?
//

Пример использую для проверки скорости перебора большого справочника (Самый тяжёлый режим для V7DBNet, т.к. кэш роли в нем не играет).
Новый10 - строка 100

Примерно так:
Код
Выбрать все
Процедура Сформировать()
	Транзакция=1;

	База = СоздатьОбъект("SQLiteBase");
	База.Открыть(":memory:");
	Запрос = База.НовыйЗапрос();

	Если Транзакция = 1 Тогда
		Запрос.ВыполнятьВТранзакции = 1;
	КонецЕсли;

	ТекстЗапроса = "
	|SELECT SUM(1) Всего
	|	,SUM(case
	|			when (CAST(Тест.Новый10 as REAL) % 5) = 0 then 1
	|			ELSE 0
	|		end) ПоУсловию
	|FROM [Справочник.Тест] Тест
	|ORDER BY Descr
	|";

	//Запрос.Отладка(1);
	т1 = _GetPerformanceCounter();
	тзРезультат = Запрос.ВыполнитьЗапрос(ТекстЗапроса);
	т2 = _GetPerformanceCounter();
	Если тзРезультат.КоличествоСтрок()>0 Тогда
		Сообщить("Время выполнения 1SQLITE = "+((т2-т1)));
		Сообщить("Всего элементов = "+тзРезультат.получитьЗначение(1,"Всего")+", удовлетворяют условию = "+тзРезультат.получитьЗначение(1,"ПоУсловию"));
	Иначе
		Сообщить("Нет результата!","!");
	КонецЕсли;
КонецПроцедуры 



Но тестировать, как мне кажется, лучше на задачах с хитрожопыми условиями, приближенными к реальности, где будет попадание/не попадание в индекс и т.п.
В данном примере идет такой же тупой перебор и, думаю, вряд ли получится быстрее твоего кода.

И еще одно примечание. При конверации строки в число получится 0, если там "слово".
Цитата:
When casting a BLOB value to a REAL, the value is first converted to TEXT.

When casting a TEXT value to REAL, the longest possible prefix of the value that can be interpreted as a real number is extracted from the TEXT value and the remainder ignored. Any leading spaces in the TEXT value are ignored when converging from TEXT to REAL. If there is no prefix that can be interpreted as a real number, the result of the conversion is 0.0.
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #56 - 25. Октября 2010 :: 07:12
Печать  
JohnyDeath:
Спасибо!
Можно и похитрее. Но идея протестить именно прокачку данных.
Собственно предложите тест, интересно по всякому погонять.

Цитата:
И еще одно примечание. При конверации строки в число получится 0, если там "слово".

Там числа Улыбка
  
Наверх
www  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #57 - 25. Октября 2010 :: 07:17
Печать  
Wirth писал(а) 25. Октября 2010 :: 06:18:
Вечером хочу попробовать потестить на скорость совместного использования 1sqlite и V7DBNet. Подскажите как переписать такой пример под 1sqlite?

     Рег=СоздатьОбъект("Справочник.Тест");
     Ном=0;
     Кол=0;

     Если _DirectRead=1 Тогда                  
           V7DBNet.DirectRead();
     КонецЕсли;
     
     Если Транзакция=1 Тогда
           НачатьТранзакцию();
     КонецЕсли;
           
     Тим=_GetPerformanceCounter();
     Рег.ПорядокНаименований();
     Рег.ВыбратьЭлементы();
     Пока Рег.ПолучитьЭлемент()>0 Цикл
           Если ( Число(Рег.Новый10) % 5 ) = 0 Тогда
                 Кол=Кол+1;                  
           КонецЕсли;
           Ном=Ном+1;
     КонецЦикла;
     Сообщить(Строка(_GetPerformanceCounter()-Тим));
     
     Если Транзакция=1 Тогда
           ЗафиксироватьТранзакцию();
     КонецЕсли;
     
     Сообщить("Всего выбрано: "+ном+", удовлетворяет условию: "+кол);

Пример использую для проверки скорости перебора большого справочника (Самый тяжёлый режим для V7DBNet, т.к. кэш роли в нем не играет).
Новый10 - строка 100


Наверное так:

Код
Выбрать все
Процедура Сформировать()
	ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
	база = СоздатьОбъект("SQLiteBase");
	база.Открыть(":memory:");
	запрос = база.НовыйЗапрос();
	Если Транзакция=1 Тогда
		НачатьТранзакцию();
	КонецЕсли;

	Тим=_GetPerformanceCounter();
	тз = запрос.ВыполнитьЗапрос("
	|select
	|	count(*) [ном],
	|	sum(case when cast(ст.Новый10 as integer) % 5 = 0 then 1 else 0 end) [кол]
	|from [Справочник.Тест] ст
	|");
	Сообщить(Строка(_GetPerformanceCounter()-Тим));

	Если Транзакция=1 Тогда
		ЗафиксироватьТранзакцию();
	КонецЕсли;

	Сообщить("Всего выбрано: "+тз.ном+", удовлетворяет условию: "+тз.кол);
КонецПроцедуры
 


  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #58 - 25. Октября 2010 :: 07:32
Печать  
JohnyDeath писал(а) 25. Октября 2010 :: 07:08:
В данном примере идет такой же тупой перебор и, думаю, вряд ли получится быстрее твоего кода.

Ну, за счет того, что интерпретатор sqlite наверняка работает побыстрее интерпретатора 1С, все же будет чуть быстрее.
  
Наверх
 
IP записан
 
Wirth
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 01. Марта 2010
Re: 1C 7.7 DBF Клиент-сервер. Нужна помощь в тестировании.
Ответ #59 - 27. Октября 2010 :: 01:31
Печать  
Оформил тестирование в статью:
http://www.wirth.ru/publ/test_1_v7dbnet/1-1-0-1
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 
ОтправитьПечать