1
나는DBIx : Class에서 테이블을 잠글 수있는 방법은 무엇입니까?
- Mojolicious
- DBIx과 작은 응용 프로그램을 쓰고 있어요 : 클래스 전 분기 웹 서버입니다
- Hypnotoad합니다.
- MySQL을 나는 다음을 수행해야 내 응용 프로그램에서
;
- 일부 복잡한 처리를 수행 좀 더 처리를 수행 일부 테이블의 마지막 자동 증가를 얻기 테이블
- 으로 처리 위에서
- 삽입 결과 데이터 (완료하는 정도의 분 소요).
- 여기
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에서 어떻게 처리 할 수 있습니까?이 문제가 해결 될 수 있습니까?
감사합니다.
이러한 장기 실행 작업은 웹 응용 프로그램의 일부이지만 별도의 데몬 안 작업 대기열과 통신합니다. –
감사합니다 abbraxa 당신이 좋은 지적을, 나는이 코드를 별도의 데몬으로 이동해야합니다,이 문제는 별도의 작업자/스레드 '장치'에 의해 처리되는 복잡한 코딩 (1 단계) 싶어요. 하지만 SQL 인서트 (2 - 4 단계)를 직렬로 수행해야합니다. – user1768233