From 985649040f5d68ad01a411220626449dea603839 Mon Sep 17 00:00:00 2001 From: DvirDukhan Date: Wed, 23 Dec 2020 16:03:51 +0200 Subject: [PATCH] latency tests --- .../impl/api/AbstractRedisGraph.java | 3 + .../impl/api/ContextedRedisGraph.java | 10 +- .../impl/graph_cache/GraphCacheList.java | 10 +- .../impl/graph_cache/RedisGraphCaches.java | 3 + .../com/redislabs/redisgraph/LatencyTest.java | 91 +++++++++++++++++++ 5 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/redislabs/redisgraph/LatencyTest.java diff --git a/src/main/java/com/redislabs/redisgraph/impl/api/AbstractRedisGraph.java b/src/main/java/com/redislabs/redisgraph/impl/api/AbstractRedisGraph.java index 982bca5..499d99d 100644 --- a/src/main/java/com/redislabs/redisgraph/impl/api/AbstractRedisGraph.java +++ b/src/main/java/com/redislabs/redisgraph/impl/api/AbstractRedisGraph.java @@ -74,7 +74,10 @@ public ResultSet callProcedure(String graphId, String procedure, List ar public ResultSet callProcedure(String graphId, String procedure, List args , Map> kwargs){ + long startTime = System.nanoTime(); String preparedProcedure = Utils.prepareProcedure(procedure, args, kwargs); + long stopTime = System.nanoTime(); + System.out.println("Prepare procedure " + procedure + " " + (stopTime - startTime)/1000000); return query(graphId, preparedProcedure); } } diff --git a/src/main/java/com/redislabs/redisgraph/impl/api/ContextedRedisGraph.java b/src/main/java/com/redislabs/redisgraph/impl/api/ContextedRedisGraph.java index 9d4478d..8cd71ff 100644 --- a/src/main/java/com/redislabs/redisgraph/impl/api/ContextedRedisGraph.java +++ b/src/main/java/com/redislabs/redisgraph/impl/api/ContextedRedisGraph.java @@ -47,10 +47,18 @@ protected Jedis getConnection() { */ @Override protected ResultSet sendQuery(String graphId, String preparedQuery) { + long startTime = System.nanoTime(); Jedis conn = getConnection(); try { List rawResponse = (List) conn.sendCommand(RedisGraphCommand.QUERY, graphId, preparedQuery, Utils.COMPACT_STRING); - return new ResultSetImpl(rawResponse, this, caches.getGraphCache(graphId)); + long stopTime = System.nanoTime(); + System.out.println("Server response time " + preparedQuery + " " + (stopTime - startTime)/1000000); + + startTime = System.nanoTime(); + ResultSet rs = new ResultSetImpl(rawResponse, this, caches.getGraphCache(graphId)); + stopTime = System.nanoTime(); + System.out.println("result set parsing " + preparedQuery + " " + (stopTime - startTime)/1000000); + return rs; } catch (JRedisGraphRunTimeException rt) { throw rt; diff --git a/src/main/java/com/redislabs/redisgraph/impl/graph_cache/GraphCacheList.java b/src/main/java/com/redislabs/redisgraph/impl/graph_cache/GraphCacheList.java index 55035d1..c5d32a2 100644 --- a/src/main/java/com/redislabs/redisgraph/impl/graph_cache/GraphCacheList.java +++ b/src/main/java/com/redislabs/redisgraph/impl/graph_cache/GraphCacheList.java @@ -16,7 +16,7 @@ class GraphCacheList { private final String graphId; private final String procedure; - private final List data = new CopyOnWriteArrayList<>(); + private final List data; /** * @@ -26,6 +26,7 @@ class GraphCacheList { public GraphCacheList(String graphId, String procedure) { this.graphId = graphId; this.procedure = procedure; + this.data = new CopyOnWriteArrayList<>(); } @@ -36,11 +37,14 @@ public GraphCacheList(String graphId, String procedure) { */ public String getCachedData(int index, RedisGraph redisGraph) { if (index >= data.size()) { + long startTime = System.nanoTime(); synchronized (data){ if (index >= data.size()) { getProcedureInfo(redisGraph); } } + long stopTime = System.nanoTime(); + System.out.println("Schema retrival" + (stopTime - startTime)/1000000); } return data.get(index); @@ -50,7 +54,10 @@ public String getCachedData(int index, RedisGraph redisGraph) { * Auxiliary method to parse a procedure result set and refresh the cache */ private void getProcedureInfo(RedisGraph redisGraph) { + long startTime = System.nanoTime(); ResultSet resultSet = redisGraph.callProcedure(graphId, procedure); + long stopTime = System.nanoTime(); + System.out.println("getProcedureInfo " + procedure + " " + (stopTime - startTime)/1000000); List newData = new ArrayList<>(); int i = 0; while (resultSet.hasNext()) { @@ -61,5 +68,6 @@ private void getProcedureInfo(RedisGraph redisGraph) { i++; } data.addAll(newData); + } } diff --git a/src/main/java/com/redislabs/redisgraph/impl/graph_cache/RedisGraphCaches.java b/src/main/java/com/redislabs/redisgraph/impl/graph_cache/RedisGraphCaches.java index 528ed34..e7237ba 100644 --- a/src/main/java/com/redislabs/redisgraph/impl/graph_cache/RedisGraphCaches.java +++ b/src/main/java/com/redislabs/redisgraph/impl/graph_cache/RedisGraphCaches.java @@ -11,7 +11,10 @@ public class RedisGraphCaches { public GraphCache getGraphCache(String graphId){ if (!graphCaches.containsKey(graphId)){ + long startTime = System.nanoTime(); graphCaches.putIfAbsent(graphId, new GraphCache(graphId)); + long stopTime = System.nanoTime(); + System.out.println("Graph Cache Create" + (stopTime - startTime)/1000000); } return graphCaches.get(graphId); } diff --git a/src/test/java/com/redislabs/redisgraph/LatencyTest.java b/src/test/java/com/redislabs/redisgraph/LatencyTest.java new file mode 100644 index 0000000..0fe3092 --- /dev/null +++ b/src/test/java/com/redislabs/redisgraph/LatencyTest.java @@ -0,0 +1,91 @@ +package com.redislabs.redisgraph; + +import com.redislabs.redisgraph.impl.api.ContextedRedisGraph; +import com.redislabs.redisgraph.impl.api.RedisGraph; +import com.redislabs.redisgraph.impl.graph_cache.GraphCache; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.concurrent.CopyOnWriteArrayList; + +public class LatencyTest { + + private RedisGraphContextGenerator api; + +// @Before +// public void createApi(){ +// api = new RedisGraph("172.26.81.242", 7000); +// } +// @After +// public void deleteGraph() { +// +// api.deleteGraph("social"); +// api.close(); +// } + + @Test + public void testLatency(){ + api.query("social", "CREATE(:N {a:1})-[:E]->(:N2{b:2})"); + + long startTime = System.nanoTime(); + api.query("social", "MATCH(n1)-[e]->(n2) RETURN *"); + long stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + + + startTime = System.nanoTime(); + api.query("social", "MATCH(n1)-[e]->(n2) RETURN *"); + stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + } + + @Test + public void testContextLatency() { + api.query("social", "CREATE(:N {a:1})-[:E]->(:N2{b:2})"); + ContextedRedisGraph context = (ContextedRedisGraph) api.getContext(); + long startTime = System.nanoTime(); + context.query("social", "MATCH(n1)-[e]->(n2) RETURN *"); + long stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + + startTime = System.nanoTime(); + context.query("social", "MATCH(n1)-[e]->(n2) RETURN *"); + stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + + api.query("social2", "CREATE(:N {a:1})-[:E]->(:N2{b:2})"); + context = (ContextedRedisGraph) api.getContext(); + startTime = System.nanoTime(); + context.query("social2", "MATCH(n1)-[e]->(n2) RETURN *"); + stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + + startTime = System.nanoTime(); + context.query("social2", "MATCH(n1)-[e]->(n2) RETURN *"); + stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + } + + @Test + public void testCacheCreationLatency(){ + long startTime = System.nanoTime(); +// CopyOnWriteArrayList[] lists = new CopyOnWriteArrayList[6]; +// for (int i=0; i < 3; i++){ +// lists[i] = new CopyOnWriteArrayList<>(); +// } + new GraphCache("1"); + long stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + + startTime = System.nanoTime(); +// for (int i=0; i < 3; i++){ +// lists[i+3] = new CopyOnWriteArrayList<>(); +// } + new GraphCache("2"); + + stopTime = System.nanoTime(); + System.out.println((stopTime - startTime)/1000000); + } + +}