diff options
| author | wanglihui <[email protected]> | 2020-08-20 10:00:07 +0800 |
|---|---|---|
| committer | wanglihui <[email protected]> | 2020-08-20 10:00:07 +0800 |
| commit | 233cf20d50eb4db74293d6c532cdda95c6867d4c (patch) | |
| tree | 1fb102c954ba9cd9d4e4c597b4d93cc46bbfcc38 | |
| parent | b13fc2bce1c2dd711170e973e7341a71248862fa (diff) | |
修改读取arangoDb方式为分页读取。
| -rw-r--r-- | IP-learning-graph/src/main/java/cn/ac/iie/dao/BaseArangoData.java | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/IP-learning-graph/src/main/java/cn/ac/iie/dao/BaseArangoData.java b/IP-learning-graph/src/main/java/cn/ac/iie/dao/BaseArangoData.java index 759e5b2..841c32b 100644 --- a/IP-learning-graph/src/main/java/cn/ac/iie/dao/BaseArangoData.java +++ b/IP-learning-graph/src/main/java/cn/ac/iie/dao/BaseArangoData.java @@ -41,9 +41,11 @@ public class BaseArangoData { map.put(i,new ConcurrentHashMap<>()); } CountDownLatch countDownLatch = new CountDownLatch(ApplicationConfig.THREAD_POOL_NUMBER); - long[] timeRange = getTimeRange(table); +// long[] timeRange = getTimeRange(table); + Long countTotal = getCountTotal(table); for (int i = 0; i < ApplicationConfig.THREAD_POOL_NUMBER; i++) { - String sql = getQuerySql(timeRange, i, table); +// String sql = getQuerySql(timeRange, i, table); + String sql = getQuerySql(countTotal, i, table); ReadHistoryArangoData<T> readHistoryArangoData = new ReadHistoryArangoData<>(arangoDBConnect, sql, map,type,table,countDownLatch); threadPool.executor(readHistoryArangoData); @@ -56,6 +58,29 @@ public class BaseArangoData { } } + private Long getCountTotal(String table){ + long start = System.currentTimeMillis(); + Long cnt = 0L; + String sql = "RETURN LENGTH("+table+")"; + try { + ArangoCursor<Long> longs = arangoDBConnect.executorQuery(sql, Long.class); + while (longs.hasNext()){ + cnt = longs.next(); + } + }catch (Exception e){ + LOG.error(sql +"执行异常"); + } + long last = System.currentTimeMillis(); + LOG.info(sql+" 结果:"+cnt+" 执行时间:"+(last-start)); + return cnt; + } + + private String getQuerySql(Long cnt,int threadNumber, String table){ + long sepNum = cnt / ApplicationConfig.THREAD_POOL_NUMBER + 1; + long offsetNum = threadNumber * sepNum; + return "FOR doc IN " + table + " limit "+offsetNum+","+sepNum+" RETURN doc"; + } + private long[] getTimeRange(String table){ long minTime = 0L; long maxTime = 0L; |
