|
14 | 14 | @Ignore
|
15 | 15 | public class TestDataGenerator {
|
16 | 16 |
|
17 |
| - private static int NODES = 1 * 1000 * 1000; |
| 17 | + private static final int NODES = 1 * 1000 * 1000; |
18 | 18 | private static final int RELS_PER_NODE = 50;
|
19 | 19 | private static final String[] TYPES = {"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN"};
|
20 |
| - public static final int NUM_TYPES = 10; |
21 | 20 |
|
22 | 21 | public static void main(String...args) throws IOException {
|
| 22 | + System.out.println("Usage: TestDataGenerator NODES RELS_PER_NODE TYPE1,TYPE2,TYPE3 sorted"); |
23 | 23 | long relCount=0, time = System.currentTimeMillis();
|
| 24 | + |
| 25 | + int nodes = args.length > 0 ? Integer.parseInt(args[0]) : NODES; |
| 26 | + int relsPerNode = args.length > 1 ? Integer.parseInt(args[1]) : RELS_PER_NODE; |
| 27 | + String[] types = args.length > 2 ? args[2].split(",") : TYPES; |
| 28 | + final boolean sorted = args.length > 0 && args[args.length-1].equalsIgnoreCase("sorted"); |
| 29 | + System.out.println("Using: TestDataGenerator "+nodes+" "+relsPerNode+" "+ Utils.join(types, ",")+" "+(sorted?"sorted":"")); |
| 30 | + |
24 | 31 | BufferedWriter nodeFile = new BufferedWriter(new FileWriter("nodes.csv"));
|
25 | 32 | nodeFile.write("Node\tRels\tProperty\tCounter:int\n");
|
26 | 33 | BufferedWriter relFile = new BufferedWriter(new FileWriter("rels.csv"));
|
27 | 34 | relFile.write("Start\tEnde\tType\tProperty\tCounter:long\n");
|
28 |
| - final boolean sorted = args.length > 0 && args[0].equalsIgnoreCase("sorted"); |
| 35 | + |
29 | 36 | if (sorted) {
|
30 |
| - relCount = generateSortedRels(relCount, nodeFile, relFile); |
| 37 | + relCount = generateSortedRels(relCount, nodeFile, relFile, nodes, relsPerNode, types); |
31 | 38 | } else {
|
32 |
| - relCount = generateRandomRels(relCount, nodeFile, relFile); |
| 39 | + relCount = generateRandomRels(relCount, nodeFile, relFile, nodes, relsPerNode, types); |
33 | 40 | }
|
34 | 41 | nodeFile.close();
|
35 | 42 | relFile.close();
|
36 |
| - System.out.println("Creating " + NODES + " Nodes and " + relCount + (sorted? " sorted " : "") + " Relationships took " + ((System.currentTimeMillis() - time) / 1000) + " seconds."); |
| 43 | + long seconds = (System.currentTimeMillis() - time) / 1000; |
| 44 | + System.out.println("Creating " + nodes + " Nodes and " + relCount + (sorted? " sorted " : "") + " Relationships took " + seconds + " seconds."); |
37 | 45 | }
|
38 | 46 |
|
39 |
| - private static long generateRandomRels(long relCount, BufferedWriter nodeFile, BufferedWriter relFile) throws IOException { |
| 47 | + private static long generateRandomRels(long relCount, BufferedWriter nodeFile, BufferedWriter relFile, int nodes, int relsPerNode, String[] types) throws IOException { |
40 | 48 | Random rnd = new Random();
|
41 |
| - for (int node = 0; node < NODES; node++) { |
42 |
| - final int rels = rnd.nextInt(RELS_PER_NODE); |
| 49 | + int numTypes = types.length; |
| 50 | + for (int node = 0; node < nodes; node++) { |
| 51 | + final int rels = rnd.nextInt(relsPerNode); |
43 | 52 | nodeFile.write(node+"\t"+rels+"\tTEST\t"+node+"\n");
|
44 | 53 | for (int rel = rels; rel >= 0; rel--) {
|
45 | 54 | relCount++;
|
46 |
| - final int node1 = rnd.nextInt(NODES); |
47 |
| - final int node2 = rnd.nextInt(NODES); |
48 |
| - relFile.write(node1 + "\t" + node2 + "\t" + TYPES[rel % NUM_TYPES] + "\t" + "Property"+"\t" + relCount+ "\n"); |
| 55 | + final int node1 = rnd.nextInt(nodes); |
| 56 | + final int node2 = rnd.nextInt(nodes); |
| 57 | + relFile.write(node1 + "\t" + node2 + "\t" + types[rel % numTypes] + "\t" + "Property"+"\t" + relCount+ "\n"); |
49 | 58 | }
|
50 | 59 | }
|
51 | 60 | return relCount;
|
52 | 61 | }
|
53 |
| - private static long generateSortedRels(long relCount, BufferedWriter nodeFile, BufferedWriter relFile) throws IOException { |
| 62 | + private static long generateSortedRels(long relCount, BufferedWriter nodeFile, BufferedWriter relFile, int nodes, int relsPerNode, String[] types) throws IOException { |
54 | 63 | Random rnd = new Random();
|
55 |
| - for (int node = 0; node < NODES; node++) { |
56 |
| - final int rels = rnd.nextInt(RELS_PER_NODE); |
| 64 | + int numTypes = types.length; |
| 65 | + for (int node = 0; node < nodes; node++) { |
| 66 | + final int rels = rnd.nextInt(relsPerNode); |
57 | 67 | nodeFile.write(node+"\t"+rels+"\tTEST\t"+node+"\n");
|
58 | 68 | for (int rel = rels; rel >= 0; rel--) {
|
59 | 69 | relCount++;
|
60 |
| - final int target = node + rnd.nextInt(NODES-node); |
| 70 | + final int target = node + rnd.nextInt(nodes -node); |
61 | 71 | final boolean outgoing = rnd.nextBoolean();
|
62 | 72 | if (outgoing) {
|
63 |
| - relFile.write(node + "\t" + target + "\t" + TYPES[rel % NUM_TYPES] + "\t" + "Property"+"\t" + relCount+ "\n"); |
| 73 | + relFile.write(node + "\t" + target + "\t" + types[rel % numTypes] + "\t" + "Property"+"\t" + relCount+ "\n"); |
64 | 74 | } else {
|
65 |
| - relFile.write(target + "\t" + node + "\t" + TYPES[rel % NUM_TYPES] + "\t" + "Property"+"\t" + relCount+ "\n"); |
| 75 | + relFile.write(target + "\t" + node + "\t" + types[rel % numTypes] + "\t" + "Property"+"\t" + relCount+ "\n"); |
66 | 76 | }
|
67 | 77 | }
|
68 | 78 | }
|
|
0 commit comments