Как улучшить производительность в многопоточном режиме для использования OrientDB? - PullRequest
0 голосов
/ 17 октября 2018

Я понял что-то не так в многопоточном использовании OrientDB.

У них всего 20 тыс. Записей в базе данных, и я хочу получить 200 лучших записей на поток.

Если использовать один поток за раз, я могу получить результат за 0,5 секунды, но когда я использую 10 потоков за раз, я получу весь результат за 5 секунд.

Больше потоковбудет стоить больше раз, 50 потоков будет стоить 50 сек.Слишком много времени для ответа API.

Как я могу улучшить производительность использования OrientDB?

Я уже прочитал документ OrientDB о настройке производительности.Я попытался обновить параметры пула сетевых подключений, но это было бесполезно.

Версия OrientDB - 2.2.37 с одним экземпляром.

Там есть пример кода, просто прочитайте запись.

public class Test3 {
public static void main(String[] args) {
    try {
        OServerAdmin serverAdmin = new OServerAdmin("remote:localhost").connect("root", "root");

        if (!serverAdmin.existsDatabase("metadata", "plocal")) {
            serverAdmin.createDatabase("metadata", "graph", "plocal");
        }
        serverAdmin.close();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    OrientGraphFactory factory= new OrientGraphFactory("remote:localhost/metadata", "root", "root");
    factory.setAutoStartTx(false);
    factory.setProperty("minPool", 5);
    factory.setProperty("maxPool", 50);
    factory.setupPool(5, 50);;

   int threadCount = 5;
   for (int i = 0; i < threadCount; i++) {
       new Thread(() -> {
           long start = System.currentTimeMillis();
           OrientGraph orientGraph = factory.getTx();
           String sql = "select * from mytable skip 0 limit 100";
           Iterable<Vertex> vertices = orientGraph.command(new OCommandSQL(sql.toString())).execute();
           System.out.println(Thread.currentThread().getName() + "===" + "execute sql cost:" + (System.currentTimeMillis() - start));
       }).start();;
   }
}
}
...