Как получить все пары ключ-значение сразу из магазина voldemort? - PullRequest
2 голосов
/ 26 ноября 2011
int maxThreads = 300;
ClientConfig clientConfig = new ClientConfig();
clientConfig.setMaxThreads(maxThreads);
clientConfig.setMaxConnectionsPerNode(maxThreads);
clientConfig.setConnectionTimeout(500, TimeUnit.MILLISECONDS);
clientConfig.setBootstrapUrls(env.getVoldemortAddress());

StoreClientFactory factory = new SocketStoreClientFactory(clientConfig);
StoreClient<String, String> client = factory.getStoreClient(env.getPrefixStoreName());

Что теперь делать, чтобы получить все пары ключ-значение из магазина сразу?

1 Ответ

3 голосов
/ 26 ноября 2011

Вы должны использовать AdminClient, чтобы получить все ключи. Этот класс предназначен для административной функциональности, которая полезна и часто необходима, но должна использоваться экономно (если вообще) на уровне приложения. Смотри здесь.

public static void main(String [] args) {

    String bootStrapUrl = "tcp://localhost:6666";
    String storeName = "test";

    int maxThreads = 300;
    ClientConfig clientConfig = new ClientConfig();
    clientConfig.setMaxThreads(maxThreads);
    clientConfig.setMaxConnectionsPerNode(maxThreads);
    clientConfig.setConnectionTimeout(500, TimeUnit.MILLISECONDS);
    clientConfig.setBootstrapUrls(bootStrapUrl);

    StoreClientFactory factory = new SocketStoreClientFactory(clientConfig);
    StoreClient<String, String> client = factory.getStoreClient(storeName);

    int nodeId = 0;
    List<Integer> partitionList = new ArrayList<Integer>();
    partitionList.add(0);
    partitionList.add(1);
    AdminClient adminClient = new AdminClient(bootStrapUrl, new AdminClientConfig());
    Iterator<ByteArray> iterator = adminClient.fetchKeys(nodeId, storeName, partitionList, null);

    String key = null;
    String value = null;
    while (iterator.hasNext()) {
        key = new String(iterator.next().get());
        value = client.getValue(key);
        System.out.println("Key-Value-Pair::" + key + ":" + value);
    }

}
...