Нужна распределенная система поиска по ключевым значениям
-
10-07-2019 - |
Вопрос
Мне нужен способ выполнять поиск по ключевым значениям в (потенциально) сотнях ГБ данных.В идеале что-то, основанное на распределенной хэш-таблице, что прекрасно работает с Java.Он должен быть отказоустойчивым и с открытым исходным кодом.
Хранилище должно быть постоянным, но в идеале должно кэшировать данные в памяти, чтобы ускорить процесс.
Он должен быть способен поддерживать одновременное чтение и запись с нескольких компьютеров (хотя чтение будет в 100 раз более распространенным).По сути, цель состоит в том, чтобы выполнить быстрый начальный поиск пользовательских метаданных для веб-сервиса.
Кто-нибудь может что-нибудь порекомендовать?
Решение
Возможно, вы захотите проверить Лесной орех.Он распространяется / разделен на разделы, суперлегкий, простой и бесплатный.
java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");
С уважением,
-talip
Другие советы
Open Chord является реализацией CHORD в Java. Это протокол распределенной хеш-таблицы, который должен идеально соответствовать вашим потребностям.
В зависимости от варианта использования, терракота может быть именно тем, что вам нужно. Р>
Вы, вероятно, должны указать, должен ли он быть постоянным или нет, в памяти или нет, и т. д. Вы можете попробовать:
Распределенные хеш-таблицы включают в себя Tapestry, Chord и Pastry. Один из них должен соответствовать вашим потребностям.
OpenChord звучит многообещающе; но я бы также подумал о BDB или любом другом -Hashtable, сделать его распределенным может быть очень просто (если количество узлов хранения является (почти) постоянным, по крайней мере), просто хешируйте ключ на клиенте, чтобы получить соответствующий сервер.
Решения с открытым исходным кодом для кэширования в Java
Oracle Coherence (раньше назывался Tangosol)
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 ГБ тонн небольших данных?), но это может сработать.