Нужна распределенная система поиска по ключевым значениям

StackOverflow https://stackoverflow.com/questions/198006

Вопрос

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

Хранилище должно быть постоянным, но в идеале должно кэшировать данные в памяти, чтобы ускорить процесс.

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

Кто-нибудь может что-нибудь порекомендовать?

Это было полезно?

Решение

Возможно, вы захотите проверить Лесной орех.Он распространяется / разделен на разделы, суперлегкий, простой и бесплатный.

java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");

С уважением,

-talip

Другие советы

Open Chord является реализацией CHORD в Java. Это протокол распределенной хеш-таблицы, который должен идеально соответствовать вашим потребностям.

В зависимости от варианта использования, терракота может быть именно тем, что вам нужно.

Вы, вероятно, должны указать, должен ли он быть постоянным или нет, в памяти или нет, и т. д. Вы можете попробовать:

Распределенные хеш-таблицы включают в себя Tapestry, Chord и Pastry. Один из них должен соответствовать вашим потребностям.

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

nmdb звучит именно так, как вам нужно. Распределяется в кэш-памяти с постоянным хранением на диске. Текущие бэк-энды включают qdbm, berkeley db и (недавно добавленные после короткого электронного письма разработчику) кабинет Токио . Размер ключа / значения ограничен, но я считаю, что его можно снять, если вам не нужна поддержка TICP.

Попробуйте распределенную структуру карты из Redisson , основанной на сервер Redis . Используя конфигурацию кластера Redis, вы можете разделить данные на 1000 серверов.

Пример использования:

Redisson redisson = Redisson.create();

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap");
map.put("123", new SomeObject());
map.putIfAbsent("323", new SomeObject());
map.remove("123");

...

redisson.shutdown();

DNS имеет возможность сделать это, я не знаю, насколько велика каждая из ваших записей (8 ГБ тонн небольших данных?), но это может сработать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top