Server 9.2:在并行循环中编写代码会导致存储库结构的缺陷

土地土地 RapidMiner认证分析师,RapidMiner认证专家,成员职位:2531年独角兽
你好,
如果将Store操作符放入并行循环中,可能会出现目录和条目多次以相同名称重复的情况。因此,Store操作符需要写入一个不存在的存储库目录。根据时间,目录被创建两次甚至更多(取决于线程数/时间)。在本例中,您有一个多次使用相同名称的目录。这在访问数据时产生了非常有趣的效果……
似乎条目的创建不是同步的,所以两个线程并行地检查存在,都得到一个不存在的返回,然后都创建相同的条目。
这个问题极大地限制了并行性,因为我们必须为所有写数据的循环切换并行执行!
BalazsBarany
1
1票

拒绝·最后一次更新

将此标记为“已拒绝”,因为它将成为RM 9.5中回购结构完全重建的一部分。如果之后有问题,请重新打开。ra - 1386

评论

  • mmichelmmichel 员工,成员职位:129RM工程
    嗨,塞巴斯蒂安,

    谢谢你的报告。我已经创建了一个内部票据,我们将检查潜在的解决方案。
    与此同时,一个潜在的解决方法可能是在并行循环操作符之前创建所需的文件夹结构——因此store操作符只需要持久化对象本身。

    希望这能帮到你,
    马塞尔
  • mwalochamwalocha 员工,成员职位:1RM工程
    2019年3月编辑
    嗨,塞巴斯蒂安,
    我目前正在研究这个问题,可以在那里提出两个意见:

    1. 如果文件夹结构不存在,有时会抛出“文件夹已经存在”异常,但不会出现重复项。
    2. 如果文件夹结构存在,并且我尝试在并行循环中存储相同的文件,则该文件有时会在Studio的文件树中出现两次甚至更多。

    关于1。)你真的有重复的文件夹(不是文件)和/或你遇到了同样的异常吗?
    关于2。)这似乎是Studio中文件树中的渲染问题,但文件在物理上只存在一次。当我用F5更新文件树时,重复项消失了。您是否可以尝试刷新文件树,看看重复是否真的存在,还是只是呈现问题?

    了解并行执行使用的操作系统和设置也会很好:
    设置>首选项>常规>并行执行

    最好的
    马克
  • 土地土地 RapidMiner认证分析师,RapidMiner认证专家,成员职位:2531年独角兽
    嗨,马克,
    对我来说,它还创建了两次文件夹。我非常确信这直接发生在存储库结构的JPA内部的服务器上,尽管我没有检入底层数据库。这些条目在Studio和Server web视图中显示了两次。重新振作一点用都没有。当我删除最高复制级别上的目录时,另一个副本保留了下来,但是删除了两个目录中的所有数据条目。所以剩下的目录是空的。之后我也可以删除它。

    无论如何,通过同步存储库上的CRUD操作,应该可以避免我们在这里看到的所有三种错误:无论何时创建新的子文件夹、重命名或删除,都可能会锁定父文件夹。如果您已经这样做了,那么实现似乎存在问题。如果不在某个地方同步代码,则可能发生任意错误,这取决于并行线程或并行进程的实际计时。

    关于设置。我不知道设置是什么,它是在服务器上的某个队列中执行的。操作系统应该是Linux,但我怀疑它与此有任何关系。
    但是,它可以帮助您了解,此错误不是使用新的存储库实现创建的。它至少从7.1开始是持久的,所以我相信它来自存储在数据库中的存储库的元数据/ JPA部分。

    问候,
    塞巴斯蒂安。
  • mmichelmmichel 员工,成员职位:129RM工程

    嗨,塞巴斯蒂安,

    感谢您的详细回复!

    遗憾的是,我们现在无法提供这个修复,因为正确的同步需要进行重大的重构。一般来说,我们目前正在研究其他选项来覆盖这类用例。

    欢呼,

    马塞尔

  • 土地土地 RapidMiner认证分析师,RapidMiner认证专家,成员职位:2531年独角兽
    嗨,烫发,
    你能否详细介绍一下原因和解决方案?如果你遇到一个不高兴的客户,他每年为一个刚刚失去信任的系统支付6万欧元,因为包含50万欧元项目预算的工作工件的存储库在常规操作下崩溃了,那么最好手头有一个真正好的解释。令人惊讶的是,在这种情况下,“太难”并不是一个被普遍接受的解释。更重要的是,如果客户是IT相关人员,那么很难争辩简单的Studio存储库是否可以毫无问题地处理这些问题,因为每个常用的文件系统都是线程安全的。

    问候,
    塞巴斯蒂安。
  • MartinLiebigMartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3362年RM数据科学家
    @land

    愚蠢的问题,难道在Store中设置“不创建目录”不行吗?这将要求您预先创建结构,并且在不存在目录的情况下会引发用户错误。

    最好的
    马丁
    - RapidMin乐鱼平台进入er数据科学服务主管
    德国多特蒙德
  • 土地土地 RapidMiner认证分析师,RapidMiner认证专家,成员职位:2531年独角兽

    嗯……是的。如果客户考虑检查它并且没有并行创建相同的条目。后者显然没有任何意义。
    但是这个想法很好,我认为它甚至可以得到改进:我将简单地使我成为一个同步的Store操作符。如果一个JVM实例中的每个Store操作符都是同步的,那么这种情况就不太可能发生,因为不同的进程无论如何都会写入不同的文件夹。
    开发团队多久向你征求一次想法?希望这是值得的。

    在RapidMiner开发者想出一个真正的解决方案之前,我们将在下一个Jackhammer版本中为所有遇到同样问题的人提供一个古怪的解决方案。

  • MartinLiebigMartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3362年RM数据科学家

    如你所知,不从我这里得到任何反馈比从我这里得到任何反馈要难得多:)所以每周都是。


    最好的
    马丁

    - RapidMin乐鱼平台进入er数据科学服务主管
    德国多特蒙德
  • mmichelmmichel 员工,成员职位:129RM工程
    嗨,塞巴斯蒂安,

    因为我们还想支持RapidMiner服务器的高可用性设置,所以文件夹或条目的同步/锁定需要在JVM之外执行,例如在共享DB中。锁定经常使用的条目将降低外部执行器使用的存储库操作的性能。由于我们正在对存储库进行一些更改,我们将合并一些新技术,这些技术应该可以在不降低性能的情况下解决并发问题。但是这类东西不能通过补丁发布来交付,需要一个新的主版本。

    欢呼,
    马塞尔
  • 土地土地 RapidMiner认证分析师,RapidMiner认证专家,成员职位:2531年独角兽
    叫喊声。我已经解决了99.9%的案子,到那时就够了。
登录注册置评。