【问题标题】:Implementing Custom Cache Store实现自定义缓存存储
【发布时间】:2021-10-23 20:50:47
【问题描述】:

刚刚基于官方现有的 RocksDb 为不同的后端存储实现了一个自定义缓存存储。

这让我产生了一些担忧/问题:

  • 发现 PersistenceContextInitializerImpl 是自动生成的,并添加了从 Eclipse 导入来解决问题。现在我必须让它不导入并在 Eclipse 中显示为错误,是否有最佳实践方法来处理这个问题?
  • 为什么 RocksDBDbStoreTest#testSegmentsRemovedAndAdded 在分段时调用为 false,因为此调用的 removeSegments 如果不分段,则按合同规定不应调用?
  • 同一个类,为什么非分段测试用例的 buildConfig numSegments 设置或大于 1?
  • 任何实现 NonBlockingStore 事务方法的商店示例?主要是想确保所有调用都来自同一个线程?
  • 想要禁用兼容性测试,因为以前的版本不支持。将组更改为不稳定或手动,并且始终会被调用,这似乎与文档不匹配。从构建时运行中禁用它的正确方法是什么?
  • 是否有任何可以执行或调整的持久存储性能/压力测试?

【问题讨论】:

    标签: infinispan


    【解决方案1】:

    发现 PersistenceContextInitializerImpl 是自动生成的,并且添加了从 Eclipse 的导入来解决问题。现在我必须让它不导入并在 Eclipse 中显示为错误,是否有最佳实践方法来处理这个问题?

    应该有办法让它运行注释处理器。我们使用 IntelliJ,它在 OOTB 中运行良好。

    为什么当分段为 false 时调用 RocksDBDbStoreTest#testSegmentsRemovedAndAdded,因为这调用了如果不分段则按合同不应该调用的 removeSegments?

    这只是进行这样的参数化测试的副作用。在实际运行时它不会被调用。如果它是分段的,你可以让测试忽略它。

    if (segmented) return;
    

    同一个类,为什么非分段测试用例的 buildConfig numSegments 设置或大于 1?

    在运行任何集群模式时,Infinispan 数据容器始终是分段的。但是,在这些情况下,不需要对商店进行分段。如果商店没有分段,您可以忽略文档中的任何分段参数。

    任何实现 NonBlockingStore 事务方法的商店示例?主要是想确保所有调用都来自同一个线程?

    您可以在https://github.com/infinispan/infinispan/blob/main/persistence/jdbc/src/main/java/org/infinispan/persistence/jdbc/stringbased/JdbcStringBasedStore.java#L724 看到一些。这些方法可以并且将从不同的方法中调用,因此它存储了一个由 Transaction 键入的 Map。

    想要禁用兼容性测试,因为以前的版本不支持。将组更改为不稳定或手动,并且始终会被调用,这似乎与文档不匹配。从构建时运行中禁用它的正确方法是什么?

    不确定我是否理解这个问题。对于您的商店,您不需要任何兼容性测试,所以不要复制该测试文件。

    是否有任何可以执行或调整的持久存储性能/压力测试?

    我们有 https://github.com/infinispan/infinispan-benchmarks/blob/main/cachestores/src/main/java/org/infinispan/jmhbenchmarks/InfinispanHolder.java 应该可以工作。

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2015-07-16
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多