RE: Design pattern for processing a huge directory tree of files using GPars

Bob Brown <[email protected]>
Newsgroups gmane.comp.lang.groovy.user
Message-ID <SY4P282MB1883F07D66C8C74E7AB034B5EDC99@SY4P282MB1883.AUSP282.PROD.OUTLOOK.COM>
If you are able to use a modern Java implementation, you can use pure-Java streams, eg:

https://stackoverflow.com/a/66044221

///
Files.walk(Paths.get("/path/to/root/directory")) // create a stream of paths
    .collect(Collectors.toList()) // collect paths into list to better parallize
    .parallelStream() // process this stream in multiple threads
    .filter(Files::isRegularFile) // filter out any non-files (such as directories)
    .map(Path::toFile) // convert Path to File object
    .sorted((a, b) -> Long.compare(a.lastModified(), b.lastModified())) // sort files date
    .limit(500) // limit processing to 500 files (optional)
    .forEachOrdered(f -> {
        // do processing here
        System.out.println(f);
    });
///

also read : https://www.airpair.com/java/posts/parallel-processing-of-io-based-data-with-java-streams

Hope this helps some.

BOB


From: Merlin Beedell <[email protected]>
Sent: Monday, 9 May 2022 8:12 PM
To: users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected]
Subject: Design pattern for processing a huge directory tree of files using GPars

I am trying to process millions of files, spread over a tree of directories.  At the moment I can collect the set of top level directories into a list and then process these in parallel using GPars with list processing (e.g. .eachParallel).
But what would be more efficient would be a 'parallel' for the File handling routines, for example:

               withPool() {
                              directory.eachFileMatchParallel (FILES, ~/($fileMatch)/) {aFile ->  ...

then I would be a very happy bunny!

I know I could copy the list of matching files into an Array list and then use the withPool { filesArray.eachParallel { ... - but this does not seem like an efficient solution - especially if there are several hundred thousand files in a directory.

What design pattern(s) might be better to consider using?

Merlin Beedell
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.