Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Нужен совет (число прочтений - 2505 )
U_zer
Экс-Участник


Нужен совет
10. Апреля 2009 :: 05:48
Печать  
Всем привет!
Задача вроде-бы тривиальная, перенести некоторые данные из одной базы в другую. Базы идентичные. Нечто типа автообмена.
Механизм автообмена написан и работает, но через текстовые файлы.
Хочется же, чтобы он переносил данные напрямую, подключаясь к базе через ПрисоединитьИБ(). Проблема в том, что базы удаленные, и данная процедура ПрисоединитьИБ() занимает около 30- 40 сек, при которой база подвисает, а там подключены ФР и др. оборудование, поэтому подвисание недопустимо. Возникла идея использовать еще одну - промежуточную базу, в которую встроить процедуры автообмена и другие регламентные вещи, которая будет управлять всем этим хозяйством сама по расписанию.  Так вот, может кто делал уже такие вещи, или есть уже готовые решения, чтоб не изобретать велосипед. Вообще, как лучше это все организовать?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #1 - 10. Апреля 2009 :: 06:05
Печать  
надеюсь речь об sql 1c базах.
выигрыша от 1с++ для обновления данных или внесения новых не получишь потому что если база сильно не загружена то и так все быстро работает если же наоборот нагрузка на базу большая тогда
тебе при переписывании на 1с++ придеться учитывать блокировки, откат транзакций и.т.д.
Мое мнение сделай хороший ftp сервер. Текстовый файлы при выкладывании надо сжимать архиватором. также сделай обмены по расписанию ( или есть всякие программы синхронизирующие файлы ).
Раз конфигурации одинаковые то почему-то напрашивается УРБД.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Нужен совет
Ответ #2 - 10. Апреля 2009 :: 06:30
Печать  
Нет, УРБД нельзя, все же базы не совсем идентичные по функционалу. По структуре - почти. Меня интересует именно механизм связи через буфер - 3-юю базу.  Базы все 1с SQL.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #3 - 10. Апреля 2009 :: 06:37
Печать  
Какое качество каналов ?
Если структура документов редко меняется то можно и не парсить удаленную md  а писать сразу нужные sql запросы или переводить
их - идея чтобы в рабочей версии были окончательные родные запросы уже на t-sql.
Выигрыш от третей базы sql как хранилище текстовых файлов (ИХМО ) - сомнительный. Что ты хочешь выиграть таким решением?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Нужен совет
Ответ #4 - 10. Апреля 2009 :: 07:27
Печать  
Z1 писал(а) 10. Апреля 2009 :: 06:37:
Какое качество каналов ?
Если структура документов редко меняется то можно и не парсить удаленную md  а писать сразу нужные sql запросы или переводить
их - идея чтобы в рабочей версии были окончательные родные запросы уже на t-sql.
Выигрыш от третей базы sql как хранилище текстовых файлов (ИХМО ) - сомнительный. Что ты хочешь выиграть таким решением?


Я хочу избавиться от тормозов при использовании ПрисоединитьИБ() из базы - получателя.
Данная процедура работает мгновенно, при условии, что подключаемая база лежит тут же. Поэтому и вариант - Буферная база получает данные из удаленной базы - тормоза при подключении некритичны в данном варианте, а потом она же инициирует процесс подкачки этих данных в рабочую.
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нужен совет
Ответ #5 - 22. Апреля 2009 :: 10:45
Печать  
Как вариант - настрогать хп в удаленной базе (их можно писать с использованием метапарсера и просто обновлять при каждом изменении метаданных) и вызывать их  из локальной, не используя парсинг md ?

второй вариант настроить регламентное копирование отдельных таблиц между базами (таблицы будут заполнятся по расписанию из обработок конфигурации или хп)

третий вариант - перенести md удаленной базы в локальный каталог, и настроить на использование удаленного sql сервера (не знаю насколько я понятно излагаю ?). Тут я не знаю, проверяет ли 1сpp соотвествие количества залогинившихся пользователей в базу и каталог (как делает сама 1С).
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Нужен совет
Ответ #6 - 22. Апреля 2009 :: 11:26
Печать  
mash писал(а) 22. Апреля 2009 :: 10:45:
третий вариант - перенести md удаленной базы в локальный каталог, и настроить на использование удаленного sql сервера (не знаю насколько я понятно излагаю ?). Тут я не знаю, проверяет ли 1сpp соотвествие количества залогинившихся пользователей в базу и каталог (как делает сама 1С).


Работае я проверял.
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Нужен совет
Ответ #7 - 22. Апреля 2009 :: 11:30
Печать  
Код
Выбрать все
path = ?(Прав(Путь, 1) <> "\", Лев(Путь, СтрДлина(Путь) - 1), СокрЛП(Путь));
Содинние = "Driver={SQL Server};Server=ччч.ннн.яяя.000;Database=test;Uid=sa;Pwd=****;";
MD = СоздатьОбъект("MetaDataWork");
DB = СоздатьОбъект("ODBCDatabase");
RS = СоздатьОбъект("ODBCRecordset");
MD.ПрисоединитьМД(MDpath);
DB.ПрисоединитьИБ(path,"","",Содинние);
RS.УстБД(DB);

 

  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Нужен совет
Ответ #8 - 22. Апреля 2009 :: 12:01
Печать  
Присоединюсь.
От чего планируешь получить выигрыш?

Если нужно переслать 10 тыс единиц информации, будет переслано 10 тыс единиц информации сколько бы
промежуточных серверов не ставить . Чудес не бывает.
Если выгрузка при помощи прямых в текстовый  - выигрыша не получишь.

Исключение - запросы одновременно к 2 базам.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать