Skip to content

Instantly share code, notes, and snippets.

@vitorenesduarte
Created April 15, 2015 16:28
Show Gist options
  • Save vitorenesduarte/24663d872b4f5dcb3d75 to your computer and use it in GitHub Desktop.
Save vitorenesduarte/24663d872b4f5dcb3d75 to your computer and use it in GitHub Desktop.
DummyDB
public class DummyDB {
private static final String URL = "remote:localhost/DummyDB";
private static final int ATTRACTION_NUMBER = 10000;
private static final int BATCH_SIZE = 1000;
public static void main(String[] args) throws IOException {
dropDBIfExists(URL, "root", "root");
createDBIfDoesNotExist(URL, "root", "root");
OrientGraphFactory pool = new OrientGraphFactory(URL, "admin", "admin").setupPool(0, 64);
createSchema(pool.getNoTx());
OrientGraph graph = pool.getTx();
try {
graph.declareIntent(new OIntentMassiveInsert());
Integer clusterID = null;
for (int i = 1; i <= ATTRACTION_NUMBER; i++) {
OrientVertex attraction = graph.addVertex("class:Attraction", "name", "Hotel " + i);
if (i % BATCH_SIZE == 0) {
System.out.println(i);
graph.commit();
}
if (i == ATTRACTION_NUMBER) {
clusterID = attraction.getIdentity().getClusterId();
}
}
List<String> attractionRIDS = new ArrayList();
for (int i = 0; i < ATTRACTION_NUMBER; i++) {
attractionRIDS.add("#" + clusterID + ":" + i);
}
for (String conceptName : conceptNames) {
System.out.println(conceptName);
OrientVertex concept = graph.addVertex("class:Concept",
"updatedAt", new Date(),
"createdAt", new Date(),
"name", conceptName,
"archive", false);
Random random = new Random();
int numberOfAttractionsWithThisConcept = random.nextInt(ATTRACTION_NUMBER / 2) + ATTRACTION_NUMBER / 2;
Collections.shuffle(attractionRIDS, random);
for (int i = 0; i < numberOfAttractionsWithThisConcept; i++) {
OrientVertex attraction = graph.getVertex(attractionRIDS.get(i));
attraction.addEdge("hasConcept", concept);
}
graph.commit();
}
} finally {
graph.declareIntent(null);
graph.shutdown();
}
}
private static void createSchema(OrientGraphNoTx graph) {
try {
OSchema schema = graph.getRawGraph().getMetadata().getSchema();
OClass vClass = schema.getClass("V");
OClass eClass = schema.getClass("E");
OClass attractionClass = schema.createClass("Attraction");
attractionClass.createProperty("name", OType.STRING);
attractionClass.setSuperClass(vClass);
OClass conceptClass = schema.createClass("Concept");
conceptClass.createProperty("updatedAt", OType.DATETIME);
conceptClass.createProperty("createdAt", OType.DATETIME);
conceptClass.createProperty("name", OType.STRING);
conceptClass.createProperty("archive", OType.BOOLEAN);
conceptClass.setSuperClass(vClass);
OClass hasConceptClass = schema.createClass("hasConcept");
hasConceptClass.setSuperClass(eClass);
} finally {
graph.shutdown();
}
}
private static void createDBIfDoesNotExist(String url, String user, String pass) throws IOException {
OServerAdmin server = new OServerAdmin(url).connect(user, user);
if (!server.existsDatabase("plocal")) {
server.createDatabase("graph", "plocal");
}
server.close();
}
private static void dropDBIfExists(String url, String user, String pass) throws IOException {
OServerAdmin server = new OServerAdmin(url).connect(user, pass);
if (server.existsDatabase("plocal")) {
server.dropDatabase("plocal");
}
server.close();
}
private static final String[] conceptNames = new String[]{
"air conditioning ",
"biking ",
"business ",
"city ",
"eco-friendly ",
"fishing ",
"fitness facilities ",
"food and wine ",
"handicap accessible rooms",
"high-speed internet ",
"hiking ",
"lgbt-friendly ",
"mountain ",
"non-smoking rooms ",
"parking ",
"pet-friendly ",
"pool ",
"spa ",
"stately ",
"weddings "
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment