Более быстрый способ запуска запросов на шифрование из Java - PullRequest
0 голосов
/ 24 октября 2018

У меня есть файл, содержащий около 1 миллиона запросов шифрования.Я прочитал файл построчно и выполнил их, используя интерфейс болта.Есть ли более быстрый способ сделать это?Один запрос выглядит так:

OPTIONAL MATCH (n:Location{SureName:'9143146669213334465'}) 
WITH n, n IS NULL as notLoaded 
RETURN CASE WHEN notLoaded THEN 'Location: ' + 9143146669213334465 + ' was NOT loaded' 
            WHEN n.SubType IS NULL THEN 'Rack' + ' is missing' 
            WHEN n.SubType = 'Rack' THEN 'Attribute: ' + 'Rack' + ' was loaded successfully' 
            ELSE 'Different value for attribute was loaded: ' + n.SubType +'/'+'Rack' 
            END AS result 
UNION 
OPTIONAL MATCH (n:Location{SureName:'9143146669213334465'}) 
WITH n, n IS NULL as notLoaded 
RETURN CASE WHEN notLoaded THEN 'Location: ' + 9143146669213334465 + ' was NOT loaded' 
            WHEN n.Category IS NULL THEN 'INFRASTRUCTURE' + ' is missing' 
            WHEN n.Category = 'INFRASTRUCTURE' THEN 'Attribute: ' + 'INFRASTRUCTURE' + ' was loaded successfully' 
            ELSE 'Different value for attribute was loaded: ' + n.Category +'/'+'Rack' 
            END AS result 
UNION 
OPTIONAL MATCH (n:Location{SureName:'9143146669213334465'}) 
WITH n, n IS NULL as notLoaded 
RETURN CASE WHEN notLoaded THEN 'Location: ' + 9143146669213334465 + ' was NOT loaded' 
            WHEN n.DisplayName IS NULL THEN 'NAME/O2OR_HUIB_04 / O2OR_HUIN_04 - IP DSLAM Type 5 - Model B' + ' is missing' 
            WHEN n.DisplayName = 'NAME/O2OR_HUIB_04 / O2OR_HUIN_04 - IP DSLAM Type 5 - Model B' THEN 'Attribute: ' + 'NAME/O2OR_HUIB_04 / O2OR_HUIN_04 - IP DSLAM Type 5 - Model B' + ' was loaded successfully' 
            ELSE 'Different value for attribute was loaded: ' + n.DisplayName +'/'+'Rack' 
            END AS result 
UNION 
OPTIONAL MATCH (n:Location{SureName:'9143146669213334465'}) 
WITH n, n IS NULL as notLoaded 
RETURN CASE WHEN notLoaded THEN 'Location: ' + 9143146669213334465 + ' was NOT loaded' 
            WHEN n.Latitude IS NULL THEN '' + ' is missing' 
            WHEN n.Latitude = '' THEN 'Attribute: ' + '' + ' was loaded successfully' 
            ELSE 'Different value for attribute was loaded: ' + n.Latitude +'/'+'Rack' 
            END AS result 
UNION 
OPTIONAL MATCH (n:Location{SureName:'9143146669213334465'}) 
WITH n, n IS NULL as notLoaded 
RETURN CASE WHEN notLoaded THEN 'Location: ' + 9143146669213334465 + ' was NOT loaded' 
            WHEN n.Longitude IS NULL THEN '' + ' is missing' 
            WHEN n.Longitude = '' THEN 'Attribute: ' + '' + ' was loaded successfully' 
            ELSE 'Different value for attribute was loaded: ' + n.Longitude +'/'+'Rack' 
            END AS result 
UNION 
OPTIONAL MATCH (n:Location{SureName:'9143146669213334465'}) 
WITH n, n IS NULL as notLoaded 
RETURN CASE WHEN notLoaded THEN 'Location: ' + 9143146669213334465 + ' was NOT loaded' 
            WHEN n.UUID IS NULL THEN '' + ' is missing' 
            WHEN n.UUID = '' THEN 'Attribute: ' + '' + ' was loaded successfully' 
            ELSE 'Different value for attribute was loaded: ' + n.UUID +'/'+'Rack' 
            END AS result

Спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете разделить их на группы и выполнять группы параллельно, используя несколько потоков.

Что-то вроде:

package com.r39.ws.cns.services.graphSync.neo4j;

import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.Session;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Example {

    public void runQueries(Driver driver) {
        int numThreads = 10;
        int bulkSize = 1000;

        ExecutorService executorService = Executors.newFixedThreadPool(numThreads);
        try {
            List<String> queries = readNextBulkFromFile(bulkSize);
            while (queries.size() > 0) {
                Worker worker = new Worker(driver, queries);
                executorService.submit(worker);
                queries = readNextBulkFromFile(bulkSize);
            }
        } finally {
            executorService.shutdown();
        }
    }

    private List<String> readNextBulkFromFile(int bulkSize) {
        // TODO read next bulk of queries
        return new ArrayList<>();
    }

    private static class Worker implements Runnable {

        private Driver driver;
        private List<String> queries;

        public Worker(Driver driver, List<String> queries) {
            this.driver = driver;
            this.queries = queries;
        }

        @Override
        public void run() {
            try (Session session = driver.session()) {
                for (String query : queries) {
                    session.run(query);
                }
            }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...