2017-04-10 8 views
0

학위 논문에서 클라이언트와 데이터베이스 간의 선택/저장 작업을위한 REST API를 개발했습니다. 데이터는 JSON으로 센서에서 포스트되고 MongoDB에 저장됩니다. Jongo 드라이버 1.3.0, Java MongoDB 드라이버 3.4.0 및 Spring의 MongoRepository (Jackson FasterXML 포함)의 3 가지 저장 기술을 선택했습니다. 구현 후에는 JMeter를 통해 부하 테스트를 시작했습니다. - 100, 250, 500, 1000Jongo 드라이버, Java MongoDB 드라이버 및 MongoRepository 간의 부하 테스트를 통한 저장 방법 비교

진입로 기간 - 십초

루프 카운트 - 30

우리는 드라이버가 더 효과적 일 것으로 생각된다

스레드 : 테스트 케이스는 이러한 매개 변수를했다 MongoRepository는 1000 개 스레드의 경우 400 개 요청을로드하고 드라이버는 모든 요청을 처리 할 수 ​​없었습니다. 따라서 MongoRepository는 빠른 속도로 저장할 수 있습니다. MongoRepository가 왜 더 효과적이라고 말 할 수 있습니까?

편집 :

MongoRepository는 다음과 같이 : 엔티티

@Repository 
public interface EndPointsMongoRepository extends 
MongoRepository<EndPointsDataControllerEntity, String> { 
} 

방법 deseralize의 JSON은 :

private EndPointsDataControllerEntity parseDataFromJson(String json) { 

    ObjectMapper mapper = new ObjectMapper(); 
    EndPointsDataControllerEntity controller = null; 
    try { 
     controller = mapper.readValue(json, EndPointsDataControllerEntity.class); 
    } catch(JsonParseException ex){ 
     LOGGER.warn(" JsonParseException with message :" + ex.getMessage()); 
    } catch(JsonMappingException ex){ 
     LOGGER.warn("JsonMappingException with message :" + ex.getMessage()); 
    } catch(IOException ex){ 
     LOGGER.warn("IOException with message :" + ex.getMessage()); 
    } 
    LOGGER.info("Id controller: " + controller.getIdController()); 
    return controller; 
} 

그럼 난 단지 데이터를 저장합니다.

자바 MongoDB의 드라이버 구현 :

public void saveUnstructuredMeasuredData(String json) { 

    LOGGER.info("Data saved to database by second way: \n" + json); 
    com.mongodb.client.MongoCollection<Document> collection = getMongoClient().getCollection(UNSTRUCTURED_DATA); 
    Document objectFromJson = Document.parse(json); 

    objectFromJson.put(TIMESTAMP_MEASURE, createTimeMeasureAsTimestamp(objectFromJson)); 

    collection.insertOne(objectFromJson); 
} 

그리고 Jongo :

public void saveUnstructuredMeasuredDataStraightWithShell(String json) { 

    LOGGER.info("Data saved to database by third way: \n" + json); 
    Jongo jongo = new Jongo(getMongoDB()); 

    MongoCollection measuredData = jongo.getCollection(MEASURED_DATA); 
    measuredData.insert(json); 
} 

답변

0

Jongo은하지 드라이버, 그것은 하나를 사용합니다. 기본적으로 다음에 언급 한 드라이버가 "공식적인"드라이버입니다. 그리고 세 번째 인터페이스도 두 가지 구현이 있습니다. 하나는 당신 것입니까?

그래서, 방금 만든 개념적 엉망이 있습니다. 그리고 귀하의 질문에 대답하기 위해, 당신은 각 경우에 대한 구현 세부 사항에 들어가야합니다.

나는 엔터프라이즈 급이고 매우 성숙한 프레임 워크이기 때문에 Spring은 연결/작업자 풀 또는 이와 유사한 것들로보다 효과적인 동시 구현을 제공한다고 가정 할 수 있습니다.

+0

나는 "공식적인"자바 드라이버의 확장과 같은 Jongo를 이해하고 조금 더 나은 성능을 가진 결과를 얻는다. –