Nexmark simulates an online auction setting and was originally designed as an benchmark for the Niagara streaming system (see http://datalab.cs.pdx.edu/niagara/NEXMark/).

In this scenario there are three streams Person, Auction and Bid and stored information (Category). At every time, new users can register themself in the system and create new auctions. Each user can also generate bids for auction. The Schema can be found in the picture above.

As default: Each time a client connects new (to one of the four streams) a new simulation is started (with reproducable data). To get consisten data, connections to the other three streams, will use the same simulation. So e.g., if you connect to a person stream and have no other connections to the server, the simulation start from the beginning. If you connect to another stream, e.g., bid, and you are still connected to the person stream, the bid stream fits to the person stream. If you connect to the bid stream after you disconnected from the person stream, a new simulation will be started. This behavior can be changed with an start up optoin.

We adapted this scenario for Odysseus and allow to configure the scenario.

Get and Start Nexmark Generator

Go to http://odysseus.informatik.uni-oldenburg.de/download/nexmark/ and download a version that fits to your operatoring system (e.g. nexmark.win32.win32.x86_64.zip for a 64bit Windows).

Nexmark needs at least Java 11.

Unzip the archive and start the "nexmark.exe" within the nexmark folder. This should look like in the following:

You may see that the benchmark opens 4 servers on ports 65440 - 65443 where you can connect to.Now Odysseus can use the nexmark sources. Each time an Odysseus query connects to one of the servers a new scenario is started, i.e. the same users and the same auctions are generated, so the same queries will always create the same results.The created events are consistent, e.g. there will be no bid for an auction that has not been created.

MacOS Problems

If you have Problems starting Nexmark (e.g. in MacOS) try the following command directly:

java -Xms40m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -jar plugins/org.eclipse.equinox.launcher_1.5.500.v20190715-1310.jar --launcher.library plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.1100.v20190907-0426 -console -clean -debug -nl en -data @noDefault -noExit -gcf /config/NEXMarkGeneratorConfiguration.properties -useNIO -pr 65440 -Dosgi.requiredJavaVersion=1.5 -Dorg.eclipse.swt.internal.carbon.smallFonts

or for older versions:

java -Xms40m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XstartOnFirstThread -jar plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar --launcher.library plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.101.v20120109-1504 -console -clean -debug -nl en -data @noDefault -noExit -gcf /config/NEXMarkGeneratorConfiguration.properties -useNIO -pr 65440 -Dosgi.requiredJavaVersion=1.5 -Dorg.eclipse.swt.internal.carbon.smallFonts

DOCKER

You could download nexmark from dockerhub

docker pull odysseusol/nexmark
docker run  -d -p65440:65440 -p65441:65441 -p65442:65442 -p65443:65443 odysseusol/nexmark


Optional: Configure Nexmark

Nexmark has some standard configuration that will be used in our examples.The configuration can be changed in nexmark.ini.

The following parameters can be adapted:

Nexmark Configuration File

In the following code block is an example of a nexmark configuration (/config/NEXMarkGeneratorConfiguration_SLOW.properties). All time elements are in milliseconds.

The following elements can be used:


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>

<!-- Konfiguration des NEXMarkGenerators -->
<!-- Zeitangaben in MS -->

<entry key="minDistBetweenPersons">5000</entry>
<entry key="maxDistBetweenPersons">5000</entry>

<entry key="minDistBetweenAuctions">2000</entry>
<entry key="maxDistBetweenAuctions">2000</entry>

<entry key="minDistBetweenBids">500</entry>
<entry key="maxDistBetweenBids">500</entry>

<!-- Faktor um den die Zeit beschleunigt werden soll. -->
<entry key="accelerationFactor">1</entry>

<!-- wie lange Auktionen offen bleiben sollen -->
<entry key="minAuctionDuration">600000</entry>
<entry key="maxAuctionDuration">600000</entry>


<!-- Zeit zwischen zwei Bursts (MIN und MAX) in ms -->
<!-- Ein Wert von 0 bei beiden simuliert ohne Bursts. -->
<!-- Diese Zeit wird nicht vom "accelerationFactor" beeinflusst -->
<entry key="minTimeBetweenBursts">0</entry>
<entry key="maxTimeBetweenBursts">0</entry>

<!-- Dauer eines Bursts --> 
<!-- Ein Wert von 0 bei beiden simuliert ohne Bursts. -->
<!-- Diese Zeit wird nicht vom "accelerationFactor" beeinflusst -->
<entry key="minBurstDuration">0</entry>
<entry key="maxBurstDuration">0</entry>

<!-- Beschleunigungsfaktor waehrend eines Bursts -->
<entry key="burstAccelerationFactor">0</entry>

</properties>