Как передать массив строк в voldemort - PullRequest
2 голосов
/ 23 ноября 2010

Я использую Волдеморт для хранения своих данных.Мой ключ - это слово, а значения - номер вхождения слова и URL.Например:

key :question
value: 10, www.stackoverflow.com

Я использую string[] для передачи значений.Но пока я пытался использовать client.put ("xxxx", valuePair);, я получаю java.lang.ClassCastException: [Ljava.lang.String;не может быть преобразован в java.lang.String. Мой код выглядит следующим образом

public class ClientExample { 
  public static void main (String [] args) { 
    String bootstrapUrl = "tcp://localhost:6666";

    ClientConfig cc = new ClientConfig (); 
    cc.setBootstrapUrls (bootstrapUrl); 
    String[] valuePair = new String[2];
    int val = 1;
    String value = new Integer(val).toString();
    valuePair[0]=value;
    valuePair[1] = "www.cnn.com";
    System.out.println("Executed one");
    StoreClientFactory factory = new SocketStoreClientFactory (cc); 
    StoreClient <String, String[]> client = factory.getStoreClient ("test"); 
    System.out.println("Executed two");

    client.put ("xxxx", valuePair); 
    System.out.println("Executed three");
    String[] ans = client.getValue("key");
    System.out.println("Executed four");
    System.out.println ("value " +ans[0] +ans[1]); 
    System.out.println("Executed 5");
  } 
} 

1 Ответ

0 голосов
/ 05 декабря 2010

Вам необходимо отредактировать store.xml, чтобы изменить настройку сериализатора значений.Прямо сейчас это должно выглядеть примерно так:

<stores>
  <store>
    <name>test</name>
    <persistence>bdb</persistence>
    <routing>client</routing>
    <replication-factor>1</replication-factor>
    <required-reads>1</required-reads>
    <required-writes>1</required-writes>
    <key-serializer>
      <type>string</type>
    </key-serializer>
    <value-serializer>
      <type>string</type>
    </value-serializer>
  </store>
</stores>

Теперь вам нужно изменить value-serializer на:

<value-serializer>
      <type>json</type>
      <schema-info>["string"]</schema-info>
</value-serializer>

Обратите внимание, что это не будет отображатьсяв массив Java, но в список Java.Если это то, к чему вы действительно не хотите, это настолько близко, насколько я знаю.

Однако вы могли бы захотеть что-то вроде этого:

<value-serializer>
      <type>json</type>
      <schema-info>{"occurences":"int32", "site":"string"}</schema-info>
</value-serializer>

Тогда вы можете (фрагмент):

Map<String, Object> pair = new HashMap<String,Object>();
pair.put("occurences", 10);
pair.put("site", "www.stackoverflow.com");

client.put("question",pair);

System.out.println(client.get("question"));

Надеюсь, это было полезно!Вы можете посмотреть документацию по этому адресу:

http://project -voldemort.com / design.php

Подробности типа сериализации JSON

...