Skip to content

Server Data Storing

ka-yeon edited this page Jul 4, 2021 · 7 revisions

Data Storing

경로 수정

💾데이터 저장

DBStoring/~StoringThread.cpp

connection C("dbname = 데이터베이스명 user = 데이터베이스 사용자 
password =  비밀번호 \hostaddr = host 주소 port = 포트번호");

데이터베이스명, 데이터베이스 사용자, 비밀번호, host 주소, 포트번호를 수정해준다.


string path = "json 파일이 저장되어있는 위치"

json parsing 하기 위해, json 파일들이 저장되어 있는 위치를 수정해준다.


동작 방식

💾데이터 저장

main문에서 각각의 thread가 돌면서 PostgreSQL DB에 저장된다.

int main(int argc, char *argv[]){

    // LOG
    LogStoringThread mLogStoringThread;
    thread logThread(&LogStoringThread::run, &mLogStoringThread);
    logThread.join();

    // FRAME
    FrameStoringThread mFrameRawStoringThread;
    thread frameThread(&FrameStoringThread::run, &mFrameRawStoringThread);
    frameThread.join();

    // SCENE
    SceneStoringThread mSceneStoringThread;
    thread SceneThread(&SceneStoringThread::run, &mSceneStoringThread);
    SceneThread.join();

    // Lidar
    LidarStoringThread mLidarStoringThread;
    thread lidarThread(&LidarStoringThread::run, &mLidarStoringThread);
    lidarThread.join();

    // CAM
    CamStoringThread mCamStoringThread;
    thread camThread(&CamStoringThread::run, &mCamStoringThread);
    camThread.join();

    // GPS
    GpsStoringThread mGpsStoringThread;
    thread gpsThread(&GpsStoringThread::run, &mGpsStoringThread);
    gpsThread.join();

    // IMU
    ImuStoringThread mImuStoringThread;
    thread imuThread(&ImuStoringThread::run, &mImuStoringThread);
    imuThread.join();

    // CAN
    CanStoringThread mCanStoringThread;
    thread canThread(&CanStoringThread::run, &mCanStoringThread);
    canThread.join();
        
}

thread 코드 구성

예시 : CamStoringThread.cpp

나머지 Thread도 같은 방식으로 코드가 구성되어 있다.


1. DB connect & create table

connection C("dbname = diva2db user = diva2 password = 1234 \
      hostaddr = 127.0.0.1 port = 5432");

저장하고 싶은 Database에 연결한다.


sql = "create table CAM_DATA(token text primary key references frame (frame_token), fileformat text, filename text);";
      // foreign key (token) references frame (frame_token)
      
      /* Create a transactional object. */
      work W(C);

      /* Execute SQL query */
      W.exec( sql );
      W.commit();

json 파일 이름에 해당하는 테이블을 생성한다.


2. json file parsing

Server/DIVA2_DATA/YYYYMDD_0/JSON에 있는 json 파일들을 parsing한다.


3. insert data in table

parsing한 데이터들을 테이블에 삽입한다.

for(int i=0; i<Cam_datas.size(); i++){
	     cout<<"for start"<<endl;
         temp1=std::string((Cam_datas[i]["token"].asString()).c_str());
         temp2=std::string((Cam_datas[i]["fileformat"].asString()).c_str());
         temp3=std::string((Cam_datas[i]["filename"].asString()).c_str());

         /* Create a transactional object. */
         work W(C);
	      std::string query_string;
         query_string.append("insert into CAM_DATA values('"); 
            
         // *****Set table*****
         query_string.append(temp1);
         query_string.append("','");
         query_string.append(temp2);
         query_string.append("','");
         query_string.append(temp3);
         query_string.append("');");
         
         /* Execute SQL query */
         W.exec(query_string);
         W.commit();
	      cout<<"for end"<<endl;
      }

2, 3 과정이 함께 구성되어 있다.


4. Database 연결 해제

cout << "[DBStoring] cam successfully" << endl;
C.disconnect ();

database의 연결을 해제시켜준다.