summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwanglihui <[email protected]>2020-08-20 09:56:39 +0800
committerwanglihui <[email protected]>2020-08-20 09:56:39 +0800
commit5be662f89886049f538e710eddc56707be3284fe (patch)
tree9634b2b7000985b469f6e3d693548e5d4a78b789
parent1750549c7d811bec1e4cf472c57f5af6e7d79fda (diff)
修改读取arangoDb方式为分页读取。
-rw-r--r--IP-learning-graph/src/main/java/cn/ac/iie/dao/BaseArangoData.java30
1 files changed, 28 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..d28519f 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);
@@ -81,6 +83,30 @@ 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 String getQuerySql(long[] timeRange,int threadNumber,String table){
long minTime = timeRange[0];
long maxTime = timeRange[1];