Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема 1c++ и SQL Native Client (число прочтений - 8411 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
1c++ и SQL Native Client
19. Октября 2009 :: 07:51
Печать  
Все началось очень давно с прочтения статей
SQL Native Client: введение
http://www.sqlbooks.ru/readarticle.aspx?part=02&file=sql200510

Начинаем работать с SQL Native Client
http://www.sqlbooks.ru/readarticle.aspx?part=02&file=sql200511
Прочитал и забыл, а мысль осталась.




архив содержит эту же статью + тестовую обработку
  

NativeClient_Test_001.zip ( 9 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #1 - 19. Октября 2009 :: 07:52
Печать  
цитата из статьи
В двух словах, SQL Native Client - автономный программный интерфейс приложений (API) доступа к данным,
который используется как для OLE DB, так и для ODBC.
Он сочетает провайдер SQL OLE DB и драйвер SQL ODBC в одной естественной динамической библиотеке компоновки (DLL),
обеспечивая также новые дополнительные функциональные возможности по сравнению с имеющимися
в Microsoft MDAC (компоненты доступа к данным).
SQL Native Client может использоваться для создания новых приложений или обеспечения существующим
приложениям возможности использовать новые особенности SQL Server 2005, в частности,
множественные активные результирующие наборы (МАРС), определенные пользователем типы (UDT),
и поддержку типа данных XML.
Таким образом, SQL Native Client соединил OLE DB и ODBC в одной библиотеке,
расширив ее использованием новых возможностей, предлагаемых SQL Server 2005. ( от себя и SQL Server 2008 )

Принципиальное отличие SQL Native Client от ODBC
при открытии трнзакции в том числе и не явной блокировка в  SQL Native Client начитает
действовать сразуа в ODBC при первом касании даных. Для 1с77 это по моему не очень существенное
отличие т.к. после начала транзакции к данным обращаемся сразу же. Где это прочел уже не помню.

Т.е. использование SQL Native Client решает некоторые проблемы совместимости ( vista,v7 ) +
Как покажу ниже Native Client работает к тому же быстрее ( и для sql2005,2008 можно использовать новые типя данных).
При этом требуются минимальные усилия для перехода на Native Client

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #2 - 19. Октября 2009 :: 07:52
Печать  
Я взял Native Client sql2008 c сайта MS ( http://www.microsoft.com/downloads/details.aspx?FamilyId=C6C3E9EF-BA29-4A43-8D69... )
установил его. Sql Server Native Client 10.0  версия 2007.100.1600.22 файл sqlncli10.dll
Создал DSN соедениение (см статью Начинаем работать с SQL Native Client )
и стал через это DSN работать с другой внешней sql базой ( sql2000 )
Все работает.Из этой внешней базы беруться очень маленькие выборки так что оценить улучшения невозможно.


Возникла мысль, а что если заставить работать 1с77 через SQLNative Client



Сначала попробовал поколдовать с заменой библиотек  но там гдето в 1c.exe cтоит
ограничение  не та версия библиотеки -программа 1с не запускается - хотя
если в этом направлении покопать, то тоже можно добиться результата.
Мы пойдем другим путем. Все уже придумано ( и сделано)  до нас.
Надо исправить всего одну строчку и золотой ключик у нас в кармане.
Дадим так сказать новую жизнь методу ReconnectNative();
меняем одну строчку в исходниках

Код
Выбрать все
//	  ConnectionString.Format("Driver={SQL Server};Server=%s;UID=%s;PWD=%s;",
	    ConnectionString.Format("Driver={SQL Server Native Client 10.0};Server=%s;UID=%s;PWD=%s;",
 



пересобираем 1cpp.dll
В будущем можно будет облагородить передавая имя драйвера через
текстовый параметр  тогда можно будет переключаться когда нужно.
Еще замечу в качестве эксперемента я специально искажал имя драйвера -  Windows ругался. На основании этого
я сделал вывод что после ReconnectNative(); я работаю с 1с через SQL Native Client 10.0
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #3 - 19. Октября 2009 :: 07:53
Печать  
в 1с в глоб модуле при начале работы системы
Код
Выбрать все
Функция Включить_1срр()
....................
Флаг_sql_native = 0;
Если ФС.СуществуетФайл("c:\1CPP_native.dll") > 0  Тогда
   Флаг_sql_native = 1;
   имя1 = "c:\1CPP_native.dll"; // Такое имя пока поставил только для себя
КонецЕсли;

Фл1 = ЗагрузитьВнешнююКомпоненту(имя1);
Если Фл1 = 0 Тогда
    Сообщить("Не найдена " + имя1);
return 0;
Иначе
	Глоб_УжеЗагружена_1срр = 1;
КонецЕсли;
Если Флаг_sql_native = 1 Тогда
   База=СоздатьОбъект("ODBCDatabase");
   База.ReconnectNative();
КонецЕсли;
return 1;
КонецФункции
 



Все это работает сейчас на 1сv7 25 релиз с бд на sql 2000 sp3a 1cpp улучшенная 2.0.3.3
Я работаю так уже месяц.
Субъективно все работает чуть чуть быстрее,
особенно ускорение чуствуется где работают прямые запросы.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #4 - 19. Октября 2009 :: 07:53
Печать  
Вроде бы все.Надеюсь что все это воплотиться в жизнь.
Также есть мысли для следущей статьи на эту же тематику.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #5 - 19. Октября 2009 :: 07:54
Печать  
Также ,чтобы не быть голословным прилагается небольшой тест который тоже показывает
что sql native работает быстрее чем odbc.
Все тесты запускались так.
Входил в 1с открывал отчет вызывал тест 3 раза.Копировал показания.
Закрывал 1с.Все тесты выполнял с одного и того же компьютера.
Тесты делал в субботу чтобы  исключить влияние работы других пользователей 1с с серверами .
Эти два теста не претендуют на универсальность и  если есть желание то можно
придумать еще какой либо тест.
test2 будет работать у всех без какой либо переделки.
в test1 надо подставить Ваш справочник вместо моего.

Обычный кли
test1  4751
test1  4755
test1  4741

test2  16889
test2  17129
test2  17543

Обычный кли + RPC
test1  4746
test1  4753
test1  4763

test2  16698
test2  17028
test2  17429

Native
test1  4724
test1  4740
test1  4725

test2  17185
test2  17442
test2  17822

Native + RPC
test1  4709
test1  4728
test1  4696

test2  16276
test2  16496
test2  16612


Другой сервер Гораздо более мощный
Обычный кли
test1  4631
test1  4630
test1  4623

Обычный кли + RPC
test1  4626
test1  4619
test1  4585

Native
test1  4567
test1  4583
test1  4615

Native + RPC
test1  4599
test1  4553
test1  4549

Обычный кли
test2  16355
test2  16669
test2  17162

Обычный кли + RPC
test2  16721
test2  17008
test2  17358

Native
test2  15894
test2  16224
test2  16517

Native + RPC
test2  15881
test2  16194
test2  16501
  
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #6 - 22. Октября 2009 :: 07:32
Печать  
Поискал в BkEnd.dll строчку "SQL Server"
Есть текст такого содержания DRIVER=SQL Server;SERVER=%s;UID=%s;PWD=%s;DATABASE=master;APP=1CV7
По идее если переписать название на другое, то будет использоваться другой драйвер, только проблемка с длиной строки, она должна быть не больше len(SQL SERVER)
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1c++ и SQL Native Client
Ответ #7 - 22. Октября 2009 :: 08:45
Печать  
quick писал(а) 22. Октября 2009 :: 07:32:
Поискал в BkEnd.dll строчку "SQL Server"
Есть текст такого содержания DRIVER=SQL Server;SERVER=%s;UID=%s;PWD=%s;DATABASE=master;APP=1CV7
По идее если переписать название на другое, то будет использоваться другой драйвер, только проблемка с длиной строки, она должна быть не больше len(SQL SERVER)

Речь не идет о  BkEnd.dll
Так как если исправить в BkEnd.dll то там сразу же всплывет
проверка на несоответствие версии драйвера.Дальше я не
проверял (хотя там тоже все получится), а стал думать и придумал и реализовал subj.
Я же предлагаю либо изменить метод
ReconnectNative() либо создать аналогичный в 1c++.
Плюсы этого :
1.не надо изменять BkEnd.dll
2.можно программно управлять с какой библиотекой работает 1с
3.если в будущем появятся другие библиотеки sql клиента
то их легко будет подключить ( эти библиотеки с той же идеалогией).

sql nature client работает с sql сервером начиная с ms sql7 и выше
т.е. для любой 1c sql базы данных.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать