THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||||
---|---|---|---|---|
| ||||
package data_structure; import java.util.Random; import java.util.concurrent.atomic.AtomicLong; public class MultiMain { private static int timeseriesNum = 1000_00; private static int size = 100; static Random random = new Random(); static MemTable[] memtable = new MemTable[timeseriesNum]; private static int queryThreadNum = 1; static AtomicLong count = new AtomicLong(); public static void main(String[] args) { for (int i = 0; i < timeseriesNum; i++) { memtable[i] = new SkipListTable(size); } Thread[] queryThread = new Thread[queryThreadNum]; for (int i = 0; i < queryThreadNum; i++) { queryThread[i] = new Thread(MultiMain::queryThread); queryThread[i].start(); } writeThread(); } public static void writeThread(){ long curTime = System.nanoTime(); for (int i = 0; i < size; i++) { for (int j = 0; j < timeseriesNum; j++) { int cur = random.nextDouble() < 0.05 ? random.nextInt(100000) - 50000 : i; memtable[j].add(cur); } } long finishTime = System.nanoTime(); long cur = count.get(); System.out.println("Finish time: " + (finishTime - curTime) / 1_000_000 + " ms."); System.out.println("Read points: " + cur / 1000 / 1000); } private static void queryThread(){ while(true){ int loc = random.nextInt(timeseriesNum); count.addAndGet(memtable[loc].query()); } } } |
Array实现:
Code Block | ||
---|---|---|
| ||
package data_structure;
import java.util.Arrays;
public class ArrayTable implements MemTable {
int[] res;
int index;
public ArrayTable(int size){
res = new int[size];
}
@Override
public void add(int i) {
res[index] = i;
index++;
}
@Override
public int query() {
int len = index;
int[] query = new int[len];
System.arraycopy(res, 0, query,0, len);
Arrays.sort(query);
int sum = 0;
for (int i : query) {
sum += 1;
}
return sum;
}
}
|
SkipList实现:
Code Block | ||
---|---|---|
| ||
package data_structure;
import java.util.concurrent.ConcurrentSkipListSet;
public class SkipListTable implements MemTable {
ConcurrentSkipListSet<Integer> set;
public SkipListTable(int size){
set = new ConcurrentSkipListSet<>();
}
@Override
public void add(int i) {
set.add(i);
}
@Override
public int query() {
int sum = 0;
for (int i : set) {
sum += 1;
}
return sum;
}
}
|