Правильное использование Волдеморта в качестве пары ключ-значение? - PullRequest
4 голосов
/ 01 апреля 2010

Я пытаюсь понять, как можно использовать Волдерморт? Скажем, у меня есть такой сценарий:

С тех пор Волдеморт является парой ключ-значение. Мне нужно получить значение (скажем, некоторый текст) на основе 3 параметров.

Итак, что будет ключом в этом случае? Я не могу использовать 3 ключа для 1 правильного значения, но это значение должно быть в состоянии поиска на основе этих 3 параметров.

Имею ли я смысл?

Спасибо

EDIT1

Например: система блогов. Пользователь публикует блог: Данные пользователя хранятся: имя, возраст и пол Содержимое блога (текст) сохраняется.

Теперь мне нужно использовать Волдеморта здесь, если пользователь ищет во внешнем интерфейсе все сообщения в блоге по полу: Мужской

Затем мой код должен запросить voldemort и вернуть все "содержимое блога (текст)", в котором есть Sex as Male.

Итак, согласно моему пониманию:

Key = Name, Age and Sex
Value = Text

Я использую Java.

Ответы [ 2 ]

5 голосов
/ 01 апреля 2010

Отредактированный ответ в соответствии с примером, добавленным к вопросу:

Что нужно понять о Волдеморте, так это то, что это очень простое хранилище ключей. Насколько я знаю об этом, only вещь, которую вы можете сделать, это сохранить значение под ключом, а затем извлечь эти значения по ключу. Так что для вашего примера, если вы действительно хотите использовать Voldemort, у вас есть несколько вариантов.

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

Key = user-Chad
Value = Name:Chad Birch, Age:26, Sex:Male

Теперь, если я хочу опубликовать новое сообщение в блоге, вам также нужно сохранить его под ключом. Таким образом, вы можете сделать что-то вроде этого:

Key = blog-Chad1
Value = Here is my very first blog post.

Теперь ваша проблема в том, что вам нужен какой-то способ поиска всех сообщений в блоге, сделанных пользователями с Sex: Male, но нет способа получить эти данные напрямую. На этом этапе вы должны либо:

  1. Вытащите всех пользователей, проверьте, являются ли они мужчинами, и если они есть, вытащите их сообщения в блоге.
  2. Начните хранить больше вещей в других парах ключ-значение, чтобы вы могли посмотреть это.

Чтобы реализовать # 2, вы можете добавить еще одну пару, например:

Key = search-Sex:Male
Value = Chad1 Chad2 Steve1 ...

Затем, когда кто-то выполняет поиск по запросу «Пол: мужчина», вы извлекаете значение для этого, разделяете его и затем извлекаете все эти сообщения в блоге.

Это имеет смысл? Использование k-v хранилища несколько отличается от базы данных, потому что вы теряете все эти реляционные способности.

1 голос
/ 02 апреля 2010

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

Например, у вас есть сопоставление значения ключа пользователя со списком сообщений в блоге. У вас также есть сопоставление возраста со списком пользователей. Также пол к списку пользователей. Теперь, если вы хотите выполнить поиск по возрасту или полу, вы берете соответствующий список пользователей, а затем извлекаете все их сообщения в блоге.

Одной из причин, по которой может работать хранилище ключей-значений, такое как Voldemort, является то, что хранилище и запросы достаточно дешевы, чтобы вы могли выполнять дополнительные.

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

...