-
Notifications
You must be signed in to change notification settings - Fork 5
Server Data Storing
✔사용한 DB 시스템과 라이브러리
🖥데이터베이스 시스템 : PostgreSQL
📄라이브러리 : libpqxx(c++과 PostgreSQL을 연결시켜주는 라이브러리)
💾데이터 저장
connection C("dbname = 데이터베이스명 user = 데이터베이스 사용자명 password = 비밀번호 \
hostaddr = host 주소 port = 포트번호");
데이터베이스명, 데이터베이스 사용자명, 비밀번호, host 주소, 포트번호를 수정해준다.
string path = "json 파일이 저장되어있는 위치"
json parsing 하기 위해, json 파일들이 저장되어 있는 위치를 수정해준다.
💾데이터 저장
main문에서 각각의 thread가 돌면서 json에 저장되어 있던 데이터들이 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 = 데이터베이스명 user = 데이터베이스 사용자명 password = 비밀번호 \
hostaddr = host 주소 port = 포트번호");
저장하고 싶은 Database에 연결한다.
//Create SQL statement
sql = "create table CAM_DATA(token text primary key references frame (frame_token), fileformat text, filename text);";
//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한 데이터들을 테이블에 삽입한다.
//JSON parsing & DB Storing
for(int i=0; i<Cam_datas.size(); i++){
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();
2, 3 과정이 함께 구성되어 있다.
4. Database 연결 해제
//Disconnect Database
C.disconnect ();
database의 연결을 해제시켜준다.
데이터베이스에 8개의 table이 새로 생성되고, table 안에 데이터들이 저장된다.
log, frame, scene, gps_data, imu_data, cam_data, lidar_data, can_data
PostgreSQL에 접속하여 간단한 명령어와 쿼리문으로 데이터가 저장된 것을 확인할 수 있다.
\dt
테이블 목록 확인 명령어
select * from 테이블명;
특정 테이블의 모든 데이터를 조회하는 쿼리문
If you have any questions, please email below.
- dazory: 12181851@inha.edu
- yuntreee: lewis45626@gmail.com
- airpod2: 12181774@inha.edu
- ka-yeon: 12181736@inha.edu
-
🚘 Mobile Platform
-
📊 Ground Station