Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как обрабатывают транзакции во взрослых системах? (число прочтений - 6738 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #15 - 20. Августа 2010 :: 09:13
Печать  
Да я ж вообще не про то.
Давайте отвлечемся от 1С. Создаем свою Систему, которая тоже пишет некие данные в СУБД MS SQL.
Как я должен разрулить проблемы транзакций в своей новой системе, не используя промежуточное звено?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #16 - 20. Августа 2010 :: 09:20
Печать  
artbear писал(а) 20. Августа 2010 :: 09:06:
Вроде Саша Орефков b/или romix делали свои ВК, которые решали проблему загрузки проца.

Там делалась замена цикла на sleep. Для автора можно и так, тем более он в первом посту так и планирует Цитата:
но еще добавить "засыпание" системы в исключении

Через Система.Уснуть(100); загрузки процессора не будет. Вот, например, как было у меня в конфе от Астор-а:
Код
Выбрать все
Процедура Ждать(Секунд,НомерПопытки,НомерСерии,Сост) Экспорт
	Для С=1 По Секунд Цикл
		Вр=ТекущееВремя();
		Состояние(Строка(Секунд-С+1)+" Пауза перед попыткой №"+НомерПопытки+" серия "+НомерСерии+" ("+Сост+")");
		Пока Вр=ТекущееВремя() Цикл КонецЦикла;
	КонецЦикла;
КонецПроцедуры
 


Сейчас так:
Код
Выбрать все
Процедура Ждать(Секунд,НомерПопытки,НомерСерии,Сост) Экспорт
	ПД_СохранитьЛог();
	Для С=1 По Секунд Цикл
		Состояние(Строка(Секунд-С+1)+" Пауза перед попыткой №"+НомерПопытки+" серия "+НомерСерии+" ("+Сост+")");
		глСервис.Уснуть(1000);
	КонецЦикла;
КонецПроцедуры
 

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #17 - 20. Августа 2010 :: 09:28
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 09:13:
Да я ж вообще не про то.
Давайте отвлечемся от 1С. Создаем свою Систему, которая тоже пишет некие данные в СУБД MS SQL.
Как я должен разрулить проблемы транзакций в своей новой системе, не используя промежуточное звено?

Так ведь для этого и используется время ожидания захвата таблиц. Т.е. запрос ушел на сервер, если сервер не может обработать данные, то они стоят в очереди. При простаивании больше некоторого времени - происходит отказ в выполнении запроса. Таким образом решить проблему можно несколькими путями:
1) Трехзвенка, тогда пишет лишь один процесс
2) Изменение режима блокировки, чтобы блокировалась не таблица целиком, а только строка
3) Сокращение времени на запись в таблицу (например не расчет каждый раз новой строки, и после этого запись, а создание, например, временной таблицы на сервере, запись туда значений и вызов хранимой процедуры для быстрой записи)
можно наверно еще что-то придумать...
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #18 - 20. Августа 2010 :: 09:33
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 08:41:
Да, sqlite изначально как бы не предназначена для таких целей. Но сейчас я просто хочу понять как это делается. Что поменялось бы если б я использовал MS SQL Server?

Там есть способы рулить этим процессом. К примеру, ожидание блокировки процедурой sp_getapplock не занимает процессор.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #19 - 20. Августа 2010 :: 10:15
Печать  
berezdetsky писал(а) 20. Августа 2010 :: 09:33:
JohnyDeath писал(а) 20. Августа 2010 :: 08:41:
Да, sqlite изначально как бы не предназначена для таких целей. Но сейчас я просто хочу понять как это делается. Что поменялось бы если б я использовал MS SQL Server?

Там есть способы рулить этим процессом. К примеру, ожидание блокировки процедурой sp_getapplock не занимает процессор.

А можешь прям на пальцах показать как это делается для вставки записей в одну табличку?

Или расскажите как сделать так, чтобы блокировалась одна запись, а не вся табличка в MS SQL.

СтоИт MS SQL Server 2008 express with Adv. На него планирую перегонять некоторые данные роботом-автоматом из 1С для последующего построения OLAP кубиков, ну и логгирование изменений можно (скорее даже нужно) перетащить туда.
Вот только знаний пока не хватает. Поэтому при му в дар любую помощь по просветлению.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #20 - 20. Августа 2010 :: 10:34
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 10:15:
А можешь прям на пальцах показать как это делается для вставки записей в одну табличку?

Или расскажите как сделать так, чтобы блокировалась одна запись, а не вся табличка в MS SQL.


Ну, если только вставка, то можно особо и не заморачиваться.. А так, не зная в точности, что нужно, посоветовал бы пройтись в указателе BOL по словам "блокировки" и "транзакции". BOL у 2008 - на русском.

Про одну запись - есть хинт rowlock. Ну и эскалацию блокировок придумали не для того, чтобы кому-то сделать хуже.  Подмигивание
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #21 - 20. Августа 2010 :: 10:50
Печать  
как раз сейчас и читаю про блокировки и транзакции в компоненте Database Engine, но чё-т туговато доходит  Нерешительный и непонятно самое главное как и где это применять.
А если только вставка, то там автоматом идет блокировка записи?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #22 - 20. Августа 2010 :: 11:03
Печать  
Да, но, если блокировок слишком много, сервер может повышать степень гранулярности блокировок (Lock Escalation в английском BOL). Этот механизм автоматический, влиять на него можно указанием хинтов.

Если чё, на блокировки ресурсов приложения (sp_getapplock, sp_releaseapplock) механизм эскалации не влияет.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #23 - 20. Августа 2010 :: 11:12
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 10:50:
как раз сейчас и читаю про блокировки и транзакции в компоненте Database Engine, но чё-т туговато доходит  Нерешительный и непонятно самое главное как и где это применять.
А если только вставка, то там автоматом идет блокировка записи?


(JohnyDeath) читал статью
http://www.rsdn.ru/article/db/mssqllocks.xml

Если у тебя уникальный кластерный индекс на таблице
( например по полю Id bigint  IDENTITY(1,1) )
и эту таблицу ты пишешь
а остальные только читают как (nolock) ( или читают без хинтов блокирования)  то у тебя при insert
будет только блокировка key на строку и записи с разный процессов будут записываться паралельно.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #24 - 20. Августа 2010 :: 11:28
Печать  
Всем спасибо.
Z1, статья самое оно. Вот только думаю, не поменялось ли что-то в 2005-2008 сервере в этом плане.


Позвольте всем задать еще один вопрос, который меня дано мучает.
Как говорил выше, хочу некоторые данные из файловой 1С перекидывать на SQL Server. Только не пойму как выявлять обновленные/новые записи. Например, хочу перекидывать данные таблицы движения регистра.
сейчас вижу только два пути:
1. перекидывать всю таблицу, предварительно очищая старую
2. Если будут перекидваться только движения регистров, то можно добавить реквизит регистра, куда будет пихаться дата последнего обновления записи. Но такая схема применима только для регистра, да и править конфу надо.
Есть еще одни, на мой взгляд самый удачный, способ - использовать перехватчик событий ПослеЗаписи и Обработка проведений. Но на текущий момент ПослеЗаписи не перехватывается, а перехват проведения - валит 1С  Печаль

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #25 - 20. Августа 2010 :: 11:50
Печать  
помяняться не может это базовые понятия.

В sql2005 расширилось появились дополнительно
версионные блокировки. Т.е. режим моментальных снимков,
но судя по описанию для subj  это не нужно.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #26 - 20. Августа 2010 :: 11:54
Печать  
по поводу #24

сделай для своей файловой УРБД
переферийная база ms sql
на изменяемые таблицы пиши тригеры которые будут куда либо складывать изменения
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #27 - 20. Августа 2010 :: 12:02
Печать  
УРБД нету.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #28 - 20. Августа 2010 :: 12:17
Печать  
JohnyDeath писал(а) 20. Августа 2010 :: 12:02:
УРБД нету.

так в чем проблема? я же тебе предложил вариант решения.
Одно дело это решение тебя не устраивает а другое дело что
отсутсnвие УРБД останавливает от такого решения.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #29 - 20. Августа 2010 :: 12:41
Печать  
Решение очень хорошее. В сегодняшнем прайсе от 1С его стоимость составляет 30000 руб. Думаю, что приобрести стОит. Тем более планируется обмен с доп офисами, которые скоро должны открыться.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать