1 / 26

CUBRIDSUS-10123, 10355

CUBRIDSUS-10123, 10355. 요구사항. CUBRIDSUS-10123 사용자 ( 드라이버 ) 에서 SHARD 메타 정보를 알 수 있어야 함 CQB 에서 SAHRD 메타 정보를 조회할 수 있어야 함.

terri
Download Presentation

CUBRIDSUS-10123, 10355

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CUBRIDSUS-10123, 10355

  2. 요구사항

  3. CUBRIDSUS-10123사용자(드라이버)에서 SHARD 메타 정보를 알 수 있어야 함 CQB 에서 SAHRD 메타 정보를 조회할 수 있어야 함

  4. CUBRIDSUS-10355사용자가 요청한 질의가 어느 SHARD 에서 처리되었는지 확인할 수 있는 방법이 필요함. CQB SQL Execution Results panel 에서 modify 수행하는 경우, Result가 어느 shard에서 수행된 결과인지를 알 수 있어야 적절한 SHARD 식별자를HINT로 추가하여 UPDATE 수행 가능함.

  5. JDBC

  6. getMetaData CUBRIDDatabaseMetaDatagetMetaData() JDBC 표준에 정의된 인터페이스로서, SHARD가 지원되는 경우 SHARD #0 의 DatabaseMetaData를 반환 parametervoid returnsCUBRIDDatabaseMetaData throwsSQLException < cubrid.jdbc.drive.CUBRIDConnection > 

  7. getShardMetadata CUBRIDShardMetadatagetShardMetaData() connection 으로부터 CUBRIDShardMetaData를 생성하여 반환 parametervoid returnsCUBRIDShardMetaData throwsSQLException < cubrid.jdbc.drive.CUBRIDConnection > 

  8. getShardId intgetShardId() 해당 SHARD DB의 SHARD 식별자를 반환 parameter void returnsSHARD 식별자 (0 < SHARD_ID) - 유효하지 않은 SHARD 식별자 < cubrid.jdbc.drive.CUBRIDDatabaseMetaData> 

  9. getShardDBName StringgetShardDBName() 해당 SHARD DB의 실제 DB 이름을 반환 parametervoid returns실제 SHARD DB 이름 < cubrid.jdbc.drive.CUBRIDDatabaseMetaData> 

  10. getShardDBServer StringgetShardDBServer() 해당 SHARD DB연결 설정 정보를 반환 parametervoid returnsSHARD DB Server connection info CUBRID - hostnameMYSQL - hostname:portORACLE - tns string  < cubrid.jdbc.drive.CUBRIDDatabaseMetaData> 

  11. getShardId intgetShardId() 해당 Connection 에서 마지막으로 요청 처리한 SHARD 식별자를 반환 parametervoid returnsSHARD 식별자 < cubrid.jdbc.drive.CUBRIDConnection >

  12. isShard boolisShard() 해당 Connection의 sharding여부 parametervoid returnsshard 가능 여부 (true) – shard 가능 (false) – shard 불가능 < cubrid.jdbc.drive.CUBRIDConnection >

  13. getShardId intgetShardId() 해당 Statement를 마지막으로 처리한 SHARD 식별자를 반환 parameter void returns SHARD 식별자 < cubrid.jdbc.drive.CUBRIDStatement>

  14. getShardCount intgetShardCount() SHARD DB 의 개수를 반환 parametervoid returnsSHARD 식별자 < cubrid.jdbc.drive.CUBRIDShardMetaData>

  15. getMetaData CUBRIDDatabaseMetaDatagetMetaData(intsharId) 각 SHARD DB의 CUBRIDDatabaseMetaData를 반환 parametervoid returnsCUBRIDDatabaseMetaData < cubrid.jdbc.drive.CUBRIDShardMetaData>

  16. try { COnnection = DriverManager.getConnection(url, dbUser, dbPasswd); if (Connection.isShard()) { CUBRIDShardMetadatasmd = Connection.getShardMetaData(); intshardCount = smd.getCount(); for (inti=0; i < shardCount; i++) { CURBIDDatabaseMetaData md = smd.getDataBaseMetadata(); // print shard metadata System.out.printf("[%d] DBMAME:%s, SERVER:%s \n", md.getShardId(), md.getShardDBName(), md.getShardDBServer()); // get tables ResultSet res = md.getTables(null, null, null, new String[] {"TABLE"}); while(res.next()) {} } } } catch (SQLException e) { ;; } 예제 #1 : 각 SHARD DB 의 schema 조회

  17. try { connection = DriverManager.getConnection(url, dbUser, dbPasswd); String query = "SELECT * FROM STUDENT WHERE SHARD_KEY = /*+ SHARD_KEY */ ?"; PreparedStatementqueryStmt = connection.preparedStatement(query); // bind parameter // ... queryStmt.executeQuery(); // fetch result // ... // get shard identifier if (connection.isShard()) { intshardId = ((CUBRIDPreparedStmt)queryStmt).getShardId(); System.out.printf("SHARD_ID:%d \n", shardId); } // close stmt and connection // ... } catch (SQLException e) { ;; } 예제 #2 : 실행한 statement 의 SHARD 식별자 확인

  18. CCI

  19. cci_get_shard_info intcci_get_shard_info(intcon_handle, T_CCI_SHARD_INFO ** shard_info, T_CCI_ERROR * err_buf) SHARD 메타 정보를 반환 parametercon_handle(IN) : connection handleshard_info(OUT) : SHARD 메타데이터err_buf(OUT) : CCI_ERROR returnsCCI_ER_SHARD_NOT_SUPPORTED 또는 그 외 에러 코드

  20. cci_shard_info_free voidcci_shard_info_free(T_CCI_SHARD_INFO * shard_info) SAHRD 메타 정보 메모리 해제 parameter shard_info(IN) : SHARD 메타데이터 returnsvoid

  21. cci_schema_info intcci_schema_info(intcon_handle, T_CCI_SCHEMA_TYPE type, char * class_name, char * attr_name, charflag, T_CCI_ERROR * err_buf) SHARD 환경에서는 SHARD #0 의 schema 정보를 반환 parameter returnsCCI 에러 코드

  22. cci_shard_schema_info intcci_shard_schema_info(intcon_handle, intshard_id, T_CCI_SCHEMA_TYPE type, char * class_name, char * attr_name,char flag, T_CCI_ERROR * err_buf) 해당 SHARDDB의 schema 정보를 반환 parameter shard_id(IN) : SHARD 식별자 returnsCCI 에러 코드

  23. cci_get_shard_id_with_con_handle intcci_get_shard_id_with_con_handle (intconn_handle, int * shard_id, T_CCI_ERROR * err_buf) 해당 connection handle 에서 마지막으로 처리한 SHARD 식별자를 반환 cci_execute_batch처리를 위함 parametercon_handle(IN) : connection handleshard_id(OUT) : SHARD 식별자err_buf(OUT) : CCI ERROR returnsCCI 에러 코드

  24. cci_get_shard_id_with_req_handle intcci_get_shard_id_with_req_handle (intreq_handle, int * shard_id, T_CCI_ERROR * err_buf) 해당 request handle 에서 마지막으로 처리한 SHARD 식별자를 반환 parameterreq_handle(IN) : request handleshard_id(OUT) : SHARD 식별자err_buf(OUT) : CCI ERROR returnsCCI 에러 코드

  25. cci_is_shard intcci_is_shard (intcon_handle, T_CCI_ERROR * err_buf) 해당 connection handle 의 shard 여부 parametercon_handle(IN)err_buf(OUT) returns (1) shard 가능 (0) shard 불가능

  26. inti, ret; intconn_handle; T_CCI_SAHRD_INFO * shard_info = NULL; T_CCI_ERROR err_buf; // create cci connection // ... if (cci_is_shard(con_handle, &err_buf)) { // get shard info ret = cci_get_shard_info(con_handle, &shard_info, &err_buf); if (ret < 0) { return ret; } for (i=0;i<shard_info.shard_count; i++) { // print shard info printf("SHARD_ID:%d, SHARD_DB:%s, SHARD_SERVER:%s \n", shard_info.shard[i].shard_id, shard_info.shard[i].db_name, shard_info.shard[i].shard_server); // get table schema { T_CCI_SCHEMA_TYPE type = CCI_SCH_CLASS; char * class_name = NULL; char * attr_name = NULL; ret = cci_shard_schema_info(con_handle, shard_info.shard[i].shard_id, type, class_name, attr_name, NULL, &err_buf); // ... } } // release shard info cci_shard_info_free(shard_info); } 예제 #1 : 각 SHARD DB 의 schema 조회

More Related