Update stress test with DTO

This commit is contained in:
Dmitry Pisklov
2020-06-04 17:05:28 +01:00
parent 84a17e8cb3
commit 8ad372f4d1
@@ -4,19 +4,21 @@ import net.openhft.chronicle.map.ChronicleMap;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
public class MapStress {
private static final File file = new File("./StressTested.cm3");
private static final int N_WRITE_THREADS = 100;
private static final int N_READ_THREADS = 20;
private ChronicleMap<String, String> map = ChronicleMap.of(String.class, String.class).averageKeySize(50).averageValueSize(500).entries(100_000).createOrRecoverPersistedTo(file);
private ChronicleMap<String, String> readerMap = ChronicleMap.of(String.class, String.class).averageKeySize(500).averageValueSize(500).entries(100_000).createOrRecoverPersistedTo(file);
private ChronicleMap<String, Security> map = ChronicleMap.of(String.class, Security.class).averageKeySize(500).averageValueSize(500).entries(100_000).createOrRecoverPersistedTo(file);
private ChronicleMap<String, Security> readerMap = ChronicleMap.of(String.class, Security.class).averageKeySize(50).averageValueSize(500).entries(100_000).createOrRecoverPersistedTo(file);
private ExecutorService executor = Executors.newFixedThreadPool(N_WRITE_THREADS + N_READ_THREADS);
private ThreadLocal<Random> randomTL = ThreadLocal.withInitial(Random::new);
@@ -25,6 +27,73 @@ public class MapStress {
}
public void stress() throws ExecutionException, InterruptedException {
Security[] secs = new Security[5];
secs[0] = new Security();
secs[0].region = "EMEA";
secs[0].countryCode = "UK";
secs[0].currency = "GBP";
secs[0].industryGroup = "ASDFH";
secs[0].issuer = "ASDF";
secs[0].otc = "kajsdf";
secs[0].securityTicker = "ASJDF";
secs[0].securityType = "DFGH";
secs[0].sector = "askdf";
secs[0].securityUltimateUnderlyingTicker = "RTYU";
secs[0].securityUnderlyingTicker = "WERT";
secs[1] = new Security();
secs[1].region = "APAC";
secs[1].countryCode = "CN";
secs[1].currency = "CNY";
secs[1].industryGroup = "&^*$";
secs[1].issuer = "ASDF";
secs[1].otc = "kajsdf";
secs[1].securityTicker = "ASJDF";
secs[1].securityType = "DFGH";
secs[1].sector = "askdf";
secs[1].securityUltimateUnderlyingTicker = "RTYU";
secs[1].securityUnderlyingTicker = "WERT";
secs[2] = new Security();
secs[2].region = "EMEA";
secs[2].countryCode = "FR";
secs[2].currency = "EUR";
secs[2].industryGroup = "ASDFH";
secs[2].issuer = "ASDF";
secs[2].otc = "kajsdf";
secs[2].securityTicker = "ASJDF";
secs[2].securityType = "DFGH";
secs[2].sector = "askdf";
secs[2].securityUltimateUnderlyingTicker = "RTYU";
secs[2].securityUnderlyingTicker = "TYUIO";
secs[3] = new Security();
secs[3].region = "NAM";
secs[3].countryCode = "US";
secs[3].currency = "USD";
secs[3].industryGroup = "ASDFH";
secs[3].issuer = "ASDF";
secs[3].otc = "kajsdf";
secs[3].securityTicker = "ASJDF";
secs[3].securityType = "DFGH";
secs[3].sector = "askdf";
secs[3].securityUltimateUnderlyingTicker = "RTYU";
secs[3].securityUnderlyingTicker = "QEDFW";
secs[4] = new Security();
secs[4].region = "LATAM";
secs[4].countryCode = "PA";
secs[4].currency = "REL";
secs[4].industryGroup = "ASDFH";
secs[4].issuer = "ASDF";
secs[4].otc = "kajsdf";
secs[4].securityTicker = "ASJDF";
secs[4].securityType = "DFGH";
secs[4].sector = "askdf";
secs[4].securityUltimateUnderlyingTicker = "RTYU";
secs[4].securityUnderlyingTicker = "RTYU";
Future<?>[] futures = new Future[N_WRITE_THREADS + N_READ_THREADS];
for (int i = 0; i < N_WRITE_THREADS; i++) {
String id = i + " -> ";
@@ -32,13 +101,16 @@ public class MapStress {
final long started = System.currentTimeMillis();
long written = 0;
do {
long time = System.currentTimeMillis();
IntStream.range(0, 10).forEach(x -> {
final int keyIdx = randomTL.get().nextInt(N_WRITE_THREADS);
map.put("valuekdljashjgffkljakljsdffhh" + keyIdx, "aksjdfhljkhadfjklahfjkladshfjklahdsljkfch aljiocufoipreyuvoiurywcoriucy8oiuxrauoi;dajfhadsih" + System.nanoTime() + System.currentTimeMillis());
Security sec = secs[x%5];
sec.calculationTimeMillis = time;
map.put("valuekdljashjgffkljakljsdffhh" + keyIdx, sec);
});
written += 10;
if (written % 100_000 == 0)
if (written % 50_000 == 0)
System.err.println(id + "Wrote " + written);
} while (System.currentTimeMillis() - started < 100_000);
});
@@ -48,14 +120,11 @@ public class MapStress {
String id = i + " -> ";
futures[i + N_WRITE_THREADS] = executor.submit(() -> {
final long started = System.currentTimeMillis();
long got = 0;
AtomicInteger got = new AtomicInteger(0);
do {
final int keyIdx = randomTL.get().nextInt(N_WRITE_THREADS);
if (null != readerMap.get("valuekdljashjgffkljakljsdffhh" + keyIdx)) {
got++;
}
readerMap.values().forEach(s -> got.incrementAndGet());
} while (System.currentTimeMillis() - started < 100_000);
System.err.println(id + "Read total: " + got);
System.err.println(id + "Read total: " + got.get());
});
}
@@ -70,4 +139,21 @@ public class MapStress {
// file.delete();
new MapStress().stress();
}
public static class Security implements Serializable {
String securityTicker;
String securityType;
String currency;
String securityUnderlyingTicker;
String sector;
String industryGroup;
String countryCode;
String issuer;
String securityUltimateUnderlyingTicker;
String otc;
String region;
long calculationTimeMillis;
}
}