Сериализатор JSON для произвольных HashMaps в Voldemort - PullRequest
3 голосов
/ 05 декабря 2010

Я пытаюсь настроить конфигурацию хранилища ключей Voldemort. Теперь я хотел бы иметь возможность хранить произвольные хеш-карты в нем, но я не нашел способа сделать это (или, если это возможно).

Согласно документации, я должен использовать этот синтаксис:

{"fname":"string", "lname":"string", "id":"int32", "emails":["string"]}

Чтобы указать, что я хочу сохранить представление HashMap Java-бина, но с ограничениями на разрешенные ключи (только fname, lname, id и emails) и их типы.

Мне нужно было бы иметь возможность хранить произвольную карту, например:

{"name":"fred", "id":15}

или как это:

{"apples":"50$", "oranges":"15€"}

(Значения карты не имеют смысла, просто иллюстрация карт с разными именами ключей и типами значений)

Есть ли способ определить схему, которая бы принимала произвольную хэш-карту?

1 Ответ

3 голосов
/ 06 декабря 2010

Что мне показалось полезным, так это просто использовать общее сырое хранилище (где передается byte []) и предварительно сериализовать вещи на стороне клиента.Это тривиально для использования (я использую Джексон ):

  ObjectMapper mapper = new ObjectMapper();
  // to store:
  byte[] data = mapper.writeValueAsBytes(myMap);
  // and when retrieving back:
  Map<String,Object> data = mapper.readValue(data, Map.class);

Хотя Voldemort поддерживает свое "JSON-подобное" хранилище (это не JSON, а простые двоичные словари, насколько язнаю), по моему мнению, нет особой пользы от его использования, поскольку вы не можете запрашивать его или запрашивать подмножества документов.

...