【问题标题】:Which is better: setDefaultHighRepJobPolicyUnappliedJobPercentage(100) vs. CustomHighRepJobPolicy哪个更好: setDefaultHighRepJobPolicyUnappliedJobPercentage(100) 与 CustomHighRepJobPolicy
【发布时间】:2014-12-31 23:50:54
【问题描述】:

我正在尝试在最恶劣的条件下测试我的应用,以确保最终的一致性。看来我可以使用两种方法:

方法 A1:setDefaultHighRepJobPolicyUnappliedJobPercentage(100)

private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
            .setDefaultHighRepJobPolicyUnappliedJobPercentage(100));    

来源:https://cloud.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests

方法 A2:CustomHighRepJobPolicy

private static final class CustomHighRepJobPolicy implements HighRepJobPolicy {
    @Override
    public boolean shouldApplyNewJob(Key arg0) {
        return false;
    }
    @Override
    public boolean shouldRollForwardExistingJob(Key arg0) {
        return false;
    }   
}
private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
        .setAlternateHighRepJobPolicyClass(CustomHighRepJobPolicy.class));

来源:https://groups.google.com/forum/#!topic/google-appengine-java/JLu29LTZPV4(来自 Broc Seib 的评论)

问题 A

这两种方法似乎都产生了从不更新任何索引的预期效果,因此没有祖先的查询永远不会返回结果。但是这两种方法有什么区别吗?

问题 B

当测试相反的情况时(没有最终的一致性,索引会立即更新),似乎有三种方法......是否应该有任何区别?

方法 B1:setDefaultHighRepJobPolicyUnappliedJobPercentage(0)

private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
            .setDefaultHighRepJobPolicyUnappliedJobPercentage(0));  

来源:https://cloud.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests

方法 B2:CustomHighRepJobPolicy

private static final class CustomHighRepJobPolicy implements HighRepJobPolicy {
    @Override
    public boolean shouldApplyNewJob(Key arg0) {
        return true;
    }
    @Override
    public boolean shouldRollForwardExistingJob(Key arg0) {
        return true;
    }   
}
private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
        .setAlternateHighRepJobPolicyClass(CustomHighRepJobPolicy.class));

来源:https://groups.google.com/forum/#!topic/google-appengine-java/JLu29LTZPV4(来自 Broc Seib 的评论)

方法 B3:setApplyAllHighRepJobPolicy

private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
            .setApplyAllHighRepJobPolicy());    

来源:https://cloud.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests

【问题讨论】:

  • 在现实/悲观的负载测试模拟工作负载下测量每个选择怎么样?这将比我们任何人仅仅通过思考就可以更好地回答您的合理怀疑很多! “你不衡量的东西,你就无法管理”和“数据roolz”!
  • 谢谢@AlexMartelli。由于这是用于单元测试,因此我不确定要测量什么负载测试。我正在寻找的是了解这两种方法之间的任何不同的副作用,这对我来说可能并不明显。
  • 我不知道有什么实质性的区别——这并不意味着没有任何区别(唉,Java 不是我最擅长的领域,所以我可能有一些 Java 特有的微妙之处知道!),这意味着我会在你的鞋子里做的正是我推荐的——将一些繁重的负载测试工作负载组合在一起,并通过相同的一组单元测试运行它们,只改变策略,看看在测试结果和运行时间方面会发生什么(我希望相同的测试结果和大致相同的运行时间,任何差异都会告诉我我需要深入挖掘的地方)。
  • 感谢@AlexMartelli,请随时将其发布为答案,我会接受它,因为没有发布其他答案。
  • 现在根据 OP 的要求作为答案发布。

标签: google-app-engine google-cloud-datastore


【解决方案1】:

我推荐的方法是在现实/悲观的负载测试模拟工作负载下衡量每个选择。这将比我们任何人通过思考来更好地回答您的合理怀疑! “你不衡量的东西,你无法管理”和“数据roolz”!

我不知道这些方法之间有任何实质性差异——这并不意味着 没有 任何(唉,Java 不是我最擅长的领域,所以我可能有一些 Java 特定的微妙之处不知道!)...

相反,这意味着我在你的立场上所做的正是我在这里所推荐的——将一些繁重的负载测试工作负载组合在一起,并通过相同的一组单元测试运行它们,只改变策略,并且看看测试结果和运行时间会发生什么。

我希望观察到相同的测试结果和大致相同的运行时间,任何差异都会告诉我需要深入挖掘的地方!-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-02
    • 2013-11-28
    • 2010-10-11
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多