大丰做网站需要多少钱,商城网站建设net2006,服务器和网站维护,高大上网站建设公司几周前#xff0c;我正在尝试将约6000万位数据最初导入Neo4j#xff0c;但我们一直遇到一个问题#xff0c;即导入过程似乎停滞了#xff0c;什么也没导入。 很难分辨该过程中发生了什么—采取线程转储只是告诉我们它正在尝试处理CSV行中的一行#xff0c;并且以某种方式… 几周前我正在尝试将约6000万位数据最初导入Neo4j但我们一直遇到一个问题即导入过程似乎停滞了什么也没导入。 很难分辨该过程中发生了什么—采取线程转储只是告诉我们它正在尝试处理CSV行中的一行并且以某种方式无法执行。 一种帮助调试的方法是在处理过程中打印出CSV的每一行然后观察它被卡在哪里但这似乎有点过头了。 理想情况下我们只希望打印出按需处理的行。 幸运的是我们可以通过向我们的导入过程发送一个终止信号并将其打印出到达的位置来完成此操作。 我们必须确保选择了一个尚未由JVM处理的信号并决定使用SIGTRAP即kill -5 [pid] 我们遇到了一个简洁的博客文章该文章解释了如何将所有内容连接起来 然后创建自己的版本 class Kill3Handler implements SignalHandler
{private AtomicInteger linesProcessed;private AtomicReferenceMapString, Object lastRowProcessed;public Kill3Handler( AtomicInteger linesProcessed, AtomicReferenceMapString, Object lastRowProcessed ){this.linesProcessed linesProcessed;this.lastRowProcessed lastRowProcessed;}Overridepublic void handle( Signal signal ){System.out.println(Last Line Processed: linesProcessed.get() lastRowProcessed.get());}
} 然后我们将其连接如下 AtomicInteger linesProcessed new AtomicInteger( 0 );
AtomicReferenceMapString, Object lastRowProcessed new AtomicReference( );
Kill3Handler kill3Handler new Kill3Handler( linesProcessed, lastRowProcessed );
Signal.handle(new Signal(TRAP), kill3Handler);// as we iterate each line we update those variableslinesProcessed.incrementAndGet();
lastRowProcessed.getAndSet( properties ); // properties a representation of the row were processing 这对我们来说确实非常有效并且我们能够得出结论我们的CSV文件中的某些数据存在轻微问题导致数据处理不正确。 由于CSV文件只有几GB的大小因此我们无法通过肉眼观察到。 因此我们仅略过几行作为健全性检查。 我什至不知道您可以做到这一点但是请牢记这是一个巧妙的技巧–我确信它会再次有用。 翻译自: https://www.javacodegeeks.com/2014/07/java-determining-the-status-of-data-import-using-kill-signals.html