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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Как обрабатывают транзакции во взрослых системах?
20. Августа 2010 :: 06:43
Печать  
Как известно, 1С 7.7 если напарывается на заблокированную табличку, то начинает гонять цикл с попыткой записать в эту табличку. Что-то типа:
Код
Выбрать все
флЗаписали=0;
Пока флЗаписали=0 Цикл
   Попытка
	ЗаписатьДанные();
	флЗаписали=1;
   Исключение
   КонецПопытки;
КонецЦикла 



А как нужно делать правильно? Тот же цикл, но еще добавить "засыпание" системы в исключении?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #1 - 20. Августа 2010 :: 07:02
Печать  
Луше ничего не делать..
В своё время ПБ-ники использовали такую конструкцию, воткнутую в исключение (в конфах с МОД-ом):

Код
Выбрать все
Стр=ТекущееВремя();
Пока Стр=ТекущееВремя() Цикл
КонецЦикла; 



что приводило к 100% загрузке проца только одним пользователем.

После убирания этой шняги  - всё "полетело"
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #3 - 20. Августа 2010 :: 07:14
Печать  
нет, оставить как у тебя и не втыкать никакую паузу.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #4 - 20. Августа 2010 :: 07:21
Печать  
И всё-таки... Как разруливают эту ситуацию в нормальных системах?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #5 - 20. Августа 2010 :: 07:33
Печать  
Эм-м-м, трехзвенную систему не предлагать?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #6 - 20. Августа 2010 :: 07:39
Печать  
Клиент кидает на "сервер приложения" данные, которые надо записать. (клиент работает дальше)
Сервер приложения ставит эту заявку в очередь на запись в сервер БД.
Так?

Да, так, конечно, красиво, но как поступают с 2-мя звеньям?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #7 - 20. Августа 2010 :: 07:46
Печать  
Да примерно так же, как в 1С. Только ожидание блокировки ресурса не загружает процессор. Тебе это в 1С нужно?
  

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



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

Я сейчас пытаюсь сделать логгирование изменений. События записи объектов пишутся во внешнюю базу sqlite.
Пока сделал так:
Код
Выбрать все
Пока 0=0 Цикл
Попытка
  ЗаписатьДанные();
  прервать;
Исключение
  Система.Уснуть(10);
КонецПопытки;
КонецЦикла 


Но чё-т не нравится..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #9 - 20. Августа 2010 :: 08:12
Печать  
выстави всем время ожидание захвата таблиц в 0, и оставь код как в (0) ... и проверь.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



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

Ну и попутно. Если всем поставлю этот параметр = 0, то им же будет сразу вываливать ошибку транзакции при записи/проведении.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как обрабатывают транзакции во взрослых системах?
Ответ #11 - 20. Августа 2010 :: 08:21
Печать  
Зато не будет 100% загрузки проца никогда.
ЗЫ: + я ж не знаю, в какой момент ты эту запись делаешь..
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



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

Ну и попутно. Если всем поставлю этот параметр = 0, то им же будет сразу вываливать ошибку транзакции при записи/проведении.

Цитата:
События записи объектов пишутся во внешнюю базу sqlite.

Хм... вроде она не предназначена для одновременной записи в таблицы, так что рекомендовал бы сделать на манер трехзвенной архитектуры при помощи Робота на сервере. Т.е. клиенты пишут в таблицы с именами "ИмяПользователя", а потом передают эту информацию Роботу (например пишут в справочник "Лог"), а робот по обработке ожидания если находит там информацию, то переносит данные из пользовательских таблиц в общую.
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



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


Эх, дайте что-нибудь новенькое
да полезное потести

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

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать