我的应用程序是多线程的,并且我有多个应用程序实例正在运行,这会使用事务在同一缓存上针对不同的键集触发 getAll 。
Apache Ignite 抛出“当前线程 IGNITE_ERR_TX_THIS_THREAD = 2027 已启动事务”。错误。
我的应用程序执行以下操作。
由于步骤 3 对于同一缓存上的不同键集频繁发生,因此我认为 Ignite 会抛出 IGNITE_ERR_TX_THIS_THREAD 错误。有更好的方法来处理这个错误吗?
我尝试增加 StripedPoolSize 但仍然遇到相同的错误。
哇!这里有很多事情要讨论。 1.) 每当我听说在缓存中插入然后删除条目时,我都会立即开始担心内存增长和压缩问题等问题。除了插入/删除之外,还有其他方法可以解决这个问题吗? 2.)您声明您是多线程的,其中不同的线程处理不同的消息(键)。这些不同的消息(密钥)是否位于不同的分区中?如果不是,您的架构可能会因同一分区上的事务争用而导致固有锁定或延迟? 3.)最后,您对第三项的描述根本不清楚。您启动一个事务,获取全部,更新一些内容,然后删除所有内容?抱歉,但我无法就此提供任何建议,因为“全部”的多次使用根本无法辨别正在获取的内容、更新的内容、删除的内容。可能有帮助的一件事(我不能肯定地说)是考虑使用不同的缓存?一个缓存用于确定您是否拥有正确的密钥。然后是第二个缓存来存储正确键的最终结果。这可能会减少事务争用,因为您知道确切的密钥和确切的数据,所以第二个缓存的最终状态的 TX 应该很快。希望有帮助。