Я понял что-то не так в многопоточном использовании 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();;
}
}
}