CI 묻고 답하기

제목 데이타베이스 트랜젝션에 관한질문입니다.
카테고리 CI 4 관련
글쓴이 오민 작성시각 2020/01/08 14:17:41
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 10265   RSS

언제나 좋은 대답들 감사드리고

오랜만에 질문이 하나 있어서 찾아왔습니다.

 

성격이 다른 db 가 여러개있습니다.

예를들면 1. main 2. log 3. user 관한것

 

뭐이런식인데

가입에 관한것을 말하자면

1,2,3 데이터를

foreach를 돌면서 

 저 데이터들을 main, log ,user db에 다 넣어 주어야하는데 

trans_begin의 경우 db 3개를 다 걸어주어야하나요?

 

ex)

foreach ( a as a){

try{

$this->model->trans_begin();

$this->model->db_insert(a,a,'main');

$this->model->db_insert(a,a,'user');

$this->model->db_insert(a,a,'log');

 

}catch(dsaf){

  $this->model->trans_rollback();

}

  $this->model->trans_commit();

어떤 좋은방법이 있을가요?

 다음글 codeigniter rc 버전을 적용해도될까요? (4)
 이전글 model에서 조건거는 방법이 안먹히네요 ㅠ (6)

댓글

변종원(웅파) / 2020/01/08 14:41:34 / 추천 1

foreach 상위에 걸면 어디선가 1개라도 실패하면 액션 전체가 원복됩니다.

foreach 안에서는 해당 1 사용자에 대한 실패시 원복이 되겠죠.

원하는 형태에 따라 처리하시면 됩니다.

오민 / 2020/01/08 20:17:21 / 추천 0
감사합니다 근데 포이치 위에해도 db가 다른경우에도 여러종류의 전체디비가 트렌젝션이 걸리나용?
한대승(불의회상) / 2020/01/09 08:46:14 / 추천 1
@오민 DB가 다르다는게 어떤건가요?
오민 / 2020/01/09 16:42:35 / 추천 0

보통 database 를 성격다르게 여러개 만들자나여 

mysql root 로 들어가면 information_schema 아래 데이터베이스 여러개 있자나여 

예를들면  하나의 계정으로 mysql 로그인을하면

            information_schema     

            a_log database 

             b_master database

             c_login database 

             performance_schema

이런식으로 있어요 저걸 db 말고 모라고 표현해야할지 모르겠네요 ㅎㅎ; ㅠ

kaido / 2020/01/10 18:51:04 / 추천 1

보통은 멀티세션이라 하며, 검색엔진이나 블록체인에서는 샤드 혹은 샤딩 이라고도 합니다.  

정확하게는 한종류의 데이터가 여러 저장소에 나눠서 저장된 형태, 혹은 그 블록을 지칭합니다.

팔콘에서는 샤딩이라고 표현한적이 있습니다.

 

이해하기는 멀티세션으로 이해하시면 될것같습니다. 

실제 ci db driver를 보시면 캐시 시스템이 오브젝트로 떠서 비교구분 합니다. 이 방법은 실제 mysql 캐시 옵션과 하는 방법이 같습니다.

즉 여러개의 db 커넥션을 호출하시면 그 커넥션에 오브젝트를 각각 가지고 있다는 의미가 됩니다.

Rdb를 계속 연구해보시면 본문의 질문이 자연스럽게 해소되실것입니다.

실제 mysql에도 옵션을 주면 exe 실행을 한다고 바로 적용되진 않습니다. commit 까지 해야 적용되는 구조가 디폴트이며 옵션에서 기본적으로 오토커밋이 들어가 있는것 입니다.

커밋롤백의 원리는 사실 특수한 옵션이 아니라 db의 원래 사용 방법이라고 생각하시면 편합니다. 단지 중간에 오류 체크가 있다면, 블록으로 지정된 영역은 전부 롤백으로 커밋을 하지 않겠다 정도의 차이입니다.