2015-01-07 5 views
1

나는DBIx : Class에서 테이블을 잠글 수있는 방법은 무엇입니까?

  • Mojolicious
  • DBIx과 작은 응용 프로그램을 쓰고 있어요 : 클래스 전 분기 웹 서버입니다
  • Hypnotoad합니다.
  • MySQL을 나는 다음을 수행해야 내 응용 프로그램에서

;

  1. 일부 복잡한 처리를 수행 좀 더 처리를 수행 일부 테이블의 마지막 자동 증가를 얻기 테이블
  2. 으로 처리 위에서
  3. 삽입 결과 데이터 (완료하는 정도의 분 소요).
  4. 여기

2

지금
#step 2 
my $device = $device_rs->create(
{ 
    devicename  => $deviceName, 
    objects   => \@objects 
    object_groups => \@objectgroups, 

} 
); 

#step 3 
my $lastogid = $db->resultset('ObjectGroup')->get_column('objectgroupid')->max; 
my $lastobid = $db->resultset('Object')->get_column('objectid')->max; 

my $obgcount = scalar(@objectgroups); 
my $objcount = scalar(@objects); 

my $ogoffset = $lastogid - $obgcount; 
my $oboffset = $lastobid - $objcount; 

#now increment the object/group ids by the offset which will be inserted into the many- many table 
foreach my $hash (@childobjects) { 
$hash->{'objectgroup_objectgroupid'} += $ogoffset; 
$hash->{'object_objectid'}   += $oboffset; 
} 

#step 4 - populate the junction table 
$db->resultset('ObjectGroupHasObjects’)->populate(\@childobjects); 

인해 여러 데에 단계에서 시작하는 샘플 코드 (3)에 다른 테이블로의 삽입물의 일부 (a 접합 테이블)의 값을 사용하여 스레드가 3 단계에서 얻은 값이 올바르지 않을 수도 있습니다 (현재 '장치'의 경우).

이 문제를 해결하는 방법을 찾으려고합니다. 내가 생각할 수있는 유일한 방법은 2 단계 전에 데이터베이스 테이블에 잠금을 설정하고 4 단계 이후에 잠금을 해제하는 것입니다.

DBIx :: Class에서 어떻게 처리 할 수 ​​있습니까?이 문제가 해결 될 수 있습니까?

감사합니다.

+0

이러한 장기 실행 작업은 웹 응용 프로그램의 일부이지만 별도의 데몬 안 작업 대기열과 통신합니다. –

+0

감사합니다 abbraxa 당신이 좋은 지적을, 나는이 코드를 별도의 데몬으로 이동해야합니다,이 문제는 별도의 작업자/스레드 '장치'에 의해 처리되는 복잡한 코딩 (1 단계) 싶어요. 하지만 SQL 인서트 (2 - 4 단계)를 직렬로 수행해야합니다. – user1768233

답변