Удаленное хранилище значений ключей, разрешающее индексы? - PullRequest
0 голосов
/ 03 декабря 2010

В нашем проекте у нас уже есть встроенное хранилище значений ключей в памяти, и оно очень удобно, потому что позволяет нам создавать индексы для него и запрашивать хранилище на его основе.Итак, если у нас есть коллекция «Student» и составной индекс для student.group и student.sex, то мы можем найти всех студентов мужского пола из группы «ABC».То же самое для удаления и т. Д.

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

Есть ли другой способ иметь удаленный кеш, такой же, как у memcashed, но с индексами?

Спасибо.

1 Ответ

4 голосов
/ 20 декабря 2010

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

Использование очень просто.Просто добавьте Hazelcast.jar и начните кодировать.Он может быть как встроенным, так и удаленным.

Вот индекс и использование запроса

добавить индекс

IMap<Integer, Student> myDistributedMap = Hazelcast.getMap("students")
myDistributedMap.addIndex("group", false);
myDistributedMap.addIndex("sex", false);

сохранить в imdg

myDistributedMap.put(student.id, student)

;

Collection<Student> result = myDistributedMap.values(new SqlPredicate("sex=male AND group=ABC"));

Наконец-то все отлично работает в облаке.Пример: EC2

...