在我的毕业论文中,我为客户端和数据库之间的选择/保存操作开发了 REST API。数据将以 JSON 格式从传感器发布并存储在 MongoDB 中。我们选择了三种不同的存储技术:Jongo 驱动程序 1.3.0、Java MongoDB 驱动程序 3.4.0 和 Spring 的 MongoRepository(使用 Jackson FasterXML)。实施后,我们开始通过 JMeter 进行负载测试。测试用例有以下参数:
线程 - 100、250、500、1000
加速期 - 10 秒
循环计数 - 30
我们假设驱动程序会比 MongoRepository 更有效,但在 1000 个线程的情况下,MongoRepository 每秒加载 400 个请求,驱动程序无法处理所有请求。所以 MongoRepository 可以快速快速存储。谁能说出为什么 MongoRepository 更有效?
编辑:
MongoRepository 看起来像这样:
@Repository
public interface EndPointsMongoRepository extends
MongoRepository<EndPointsDataControllerEntity, String> {
}
方法将 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;
}
然后我只保存数据。
Java 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);
}
和钟哥:
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);
}