gpt4 book ai didi

entity-framework - 如何让 Appstats 同时显示小操作和读取操作?

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:38 25 4
gpt4 key购买 nike

我正在本地分析我的应用程序(使用开发服务器)以获取有关 GAE 工作原理的更多信息。我的测试正在比较常见的完整实体查询和投影查询。在我的测试中,两个查询都执行相同的查询,但投影指定了 2 个属性。测试种类有 100 个属性,每个 Entity 都具有相同的值,总共有 10 个 Entities。下面显示了带有 Datastore 查看器和 Appstats 生成数据的图像。在 Appstats 图像中,请求 4 是 memcache 刷新,请求 3 是测试数据库创建(它已经创建,所以这里没有成本),请求 2 是完整的实体查询,请求 1 是投影查询。

enter image description here

Test statistics.

令我惊讶的是,这两个查询产生了相同的读取量。我的猜测是小型和读取操作与 Appstats 报告的相同。如果是这种情况,我想在报告中将它们分开。这是查询相关的功能:

// Full Entity Query
public ReturnCodes doQuery() {
DatastoreService dataStore = DatastoreServiceFactory.getDatastoreService();

for(int i = 0; i < numIters; ++i) {
Filter filter = new FilterPredicate(DBCreation.PROPERTY_NAME_PREFIX + i,
FilterOperator.NOT_EQUAL, i);
Query query = new Query(DBCreation.ENTITY_NAME).setFilter(filter);
PreparedQuery prepQuery = dataStore.prepare(query);
Iterable<Entity> results = prepQuery.asIterable();

for(Entity result : results) {
log.info(result.toString());
}
}

return ReturnCodes.SUCCESS;
}

// Projection Query
public ReturnCodes doQuery() {
DatastoreService dataStore = DatastoreServiceFactory.getDatastoreService();

for(int i = 0; i < numIters; ++i) {
String projectionPropName = DBCreation.PROPERTY_NAME_PREFIX + i;
Filter filter = new FilterPredicate(DBCreation.PROPERTY_NAME_PREFIX + i,
FilterOperator.NOT_EQUAL, i);
Query query = new Query(DBCreation.ENTITY_NAME).setFilter(filter);
query.addProjection(new PropertyProjection(DBCreation.PROPERTY_NAME_PREFIX + 0, Integer.class));
query.addProjection(new PropertyProjection(DBCreation.PROPERTY_NAME_PREFIX + 1, Integer.class));
PreparedQuery prepQuery = dataStore.prepare(query);
Iterable<Entity> results = prepQuery.asIterable();

for(Entity result : results) {
log.info(result.toString());
}
}

return ReturnCodes.SUCCESS;
}

有什么想法吗?

编辑:为了更好地了解问题,我创建了另一个测试,它执行相同的查询但只使用键查询。对于这种情况,Appstats 在报告中正确显示了 DATASTORE_SMALL 操作。我仍然对投影查询的行为感到困惑,它也应该报告 DATASTORE_SMALL 操作。请帮忙!

最佳答案

[我写了appstats的go端口,所以这是根据我的经验和记忆。]

我猜这是 appstats 中的一个错误,它是一个相对未维护的程序。投影查询是新的,因此 appstats 可能不知道它们,并将它们视为正常的读取查询。

对于某些背景,计算成本很困难。对于写入操作,成本与结果一起返回,因为它们必须如此,因为应用程序无法知道发生了什么变化(这是写入成本发生的地方)。然而,对于读取和小型操作,有一个 formula。来计算成本。每个 appstats 实现(python、java、go)都必须实现此计算,包括反射或请求对象上需要的任何东西以确定发生了什么。这样做的 API 不是很明显,而且有很多小东西,所以很容易弄错,弄对也很烦人。

关于entity-framework - 如何让 Appstats 同时显示小操作和读取操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com