Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
themeConfluence
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
languagejava
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
languagejava
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;
  }
}