package org.wikibrain.cookbook.core; import org.apache.commons.collections.IteratorUtils; import org.wikibrain.conf.ConfigurationException; import org.wikibrain.core.cmd.Env; import org.wikibrain.core.cmd.EnvBuilder; import org.wikibrain.core.dao.DaoException; import org.wikibrain.core.dao.DaoFilter; import org.wikibrain.core.dao.LocalLinkDao; import org.wikibrain.core.dao.LocalPageDao; import org.wikibrain.core.lang.LocalId; import org.wikibrain.core.model.LocalLink; import org.wikibrain.core.model.LocalPage; import org.wikibrain.utils.WpThreadUtils; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; /** * @author Shilad Sen * Times the speed of the sparse matrix. */ public class LocalLinkTimer { private static final AtomicInteger numRows = new AtomicInteger(); private static final AtomicLong numCells = new AtomicLong(); private static final List<LocalId> localIds = new ArrayList<LocalId>(); private static LocalLinkDao dao; private static Random random = new Random(); public static void main(String args[]) throws ConfigurationException, DaoException, InterruptedException { Env env = EnvBuilder.envFromArgs(args); dao = env.getConfigurator().get(LocalLinkDao.class); LocalPageDao lpDao = env.getConfigurator().get(LocalPageDao.class); for (LocalPage p : (Iterable<LocalPage>)lpDao.get(new DaoFilter().setRedirect(false).setDisambig(false))) { localIds.add(p.toLocalId()); if (localIds.size() % 100000 == 0) { System.err.println("added page " + localIds.size()); } } List<Worker> workers = new ArrayList<Worker>(); long start = System.currentTimeMillis(); for (int i = 0; i < WpThreadUtils.getMaxThreads(); i++) { Worker worker = new Worker(); worker.start(); workers.add(worker); } for (Worker worker : workers) { System.out.println("joining " + worker); worker.join(); } System.out.println("elapsed is " + (System.currentTimeMillis() - start) + " rows is " + numRows.get() + " cells is " + numCells.get()); } public static class Worker extends Thread { @Override public void run() { while (true) { LocalId id = localIds.get(random.nextInt(localIds.size())); try { Iterable<LocalLink> cursor = dao.getLinks(id.getLanguage(), id.getId(), random.nextBoolean()); if (numRows.incrementAndGet() > 10000000) { return; } numCells.addAndGet(IteratorUtils.toList(cursor.iterator()).size()); } catch (DaoException e) { e.printStackTrace(); } } } } }