1
4

1 に答える 1

1

CassandraConnection クラスを便利なクラスとして使用します。

import me.prettyprint.cassandra.connection.DynamicLoadBalancingPolicy;
import me.prettyprint.cassandra.service.CassandraHostConfigurator;
import me.prettyprint.cassandra.service.ExhaustedPolicy;
import me.prettyprint.cassandra.service.OperationType;
import me.prettyprint.hector.api.Cluster;
import me.prettyprint.hector.api.HConsistencyLevel;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.factory.HFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * lazy connect
 */
final class CassandraConnection {

    // Constants -----------------------------------------------------

    private static final String HOSTS = "localhost";
    private static final int PORT = "9160";
    private static final String CLUSTER_NAME = "myCluster";
    private static final int TIMEOUT = 500);
    private static final String KEYSPACE = "Keyspace1";
    private static final ConsistencyLevelPolicy CL_POLICY = new ConsistencyLevelPolicy();

    // Attributes ----------------------------------------------------

    private Cluster cluster;
    private volatile Keyspace keyspace;

    // Constructors --------------------------------------------------

    CassandraConnection() {}

    // Methods --------------------------------------------------------

    Cluster getCluster() {
        if (null == cluster) {
            CassandraHostConfigurator config = new CassandraHostConfigurator();
            config.setHosts(HOSTS);
            config.setPort(PORT);
            config.setUseThriftFramedTransport(true);
            config.setUseSocketKeepalive(true);
            config.setAutoDiscoverHosts(false);
            // maxWorkerThreads provides the throttling for us. So hector can be let to grow freely...
            config.setExhaustedPolicy(ExhaustedPolicy.WHEN_EXHAUSTED_GROW);
            config.setMaxActive(1000); // hack since ExhaustedPolicy doesn't work
            // suspend hosts if response is unacceptable for web response
            config.setCassandraThriftSocketTimeout(TIMEOUT);
            config.setUseHostTimeoutTracker(true);
            config.setHostTimeoutCounter(3);
            config.setLoadBalancingPolicy(new DynamicLoadBalancingPolicy());

            cluster = HFactory.createCluster(CLUSTER_NAME, config);

        }
        return cluster;
    }

    Keyspace getKeyspace() {
        if (null == keyspace) {
            keyspace = HFactory.createKeyspace(KEYSPACE, getCluster(), CL_POLICY);
        }
        return keyspace;
    }

    private static class ConsistencyLevelPolicy implements me.prettyprint.hector.api.ConsistencyLevelPolicy {

        @Override
        public HConsistencyLevel get(final OperationType op) {
            return HConsistencyLevel.ONE;
        }

        @Override
        public HConsistencyLevel get(final OperationType op, final String cfName) {
            return get(op);
        }
    }
}

使用例:

private final CassandraConnection conn = new CassandraConnection();

SliceQuery<String, String, String> sliceQuery = HFactory.createSliceQuery(
                conn.getKeyspace(), StringSerializer.get(), StringSerializer.get(), StringSerializer.get());
sliceQuery.setColumnFamily("myColumnFamily");
sliceQuery.setRange("", "", false, Integer.MAX_VALUE);
sliceQuery.setKey("myRowKey");
ColumnSlice<String, String> columnSlice = sliceQuery.execute().get();
于 2012-06-30T12:36:14.773 に答える