Нужна распределенная система поиска значения ключа
Мне нужен способ поиска значений ключей на (потенциально) сотнях ГБ данных. В идеале это что-то, основанное на распределенной хеш-таблице, которое прекрасно работает с Java. Он должен быть отказоустойчивым и открытым исходным кодом.
Хранилище должно быть постоянным, но в идеале должно кэшировать данные в памяти, чтобы ускорить процесс.
Он должен поддерживать одновременное чтение и запись с нескольких компьютеров (однако чтение будет в 100 раз более распространенным). По сути, цель заключается в быстром начальном поиске метаданных пользователя для веб-службы.
Кто-нибудь может порекомендовать что-нибудь?
10 ответов
Вы можете проверить Hazelcast. Он распределен / разбит на разделы, супер облегченный, простой и бесплатный.
java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");
С Уважением,
-talip
Open Chord - это реализация протокола CHORD в Java. Это протокол распределенной хеш-таблицы, который должен идеально соответствовать вашим потребностям.
В зависимости от варианта использования терракота может быть именно тем, что вам нужно.
Вам, вероятно, следует указать, должен ли он быть постоянным или нет, в памяти или нет, и т. Д. Вы можете попробовать: http://www.danga.com/memcached/
NMDB звучит как то, что вам нужно. Распределенный, в кэш-памяти, с постоянным хранением на диске. Текущие бэк-энды включают qdbm, berkeley db и (недавно добавленный после короткого письма разработчику) кабинет в Токио. Размер ключа / значения ограничен, но я считаю, что его можно снять, если вам не нужна поддержка TICP.
OpenChord звучит многообещающе; но я бы также рассмотрел BDB или любую другую хеш-таблицу, отличную от SQL, поэтому его распространение может быть очень простым (если количество узлов хранения является (почти) постоянным, по крайней мере), просто хешируйте ключ на клиенте, чтобы получить соответствующий сервер.
Распределенные хеш-таблицы включают Гобелен, Аккорд и Кондитерские изделия. Один из них должен соответствовать вашим потребностям.
Попробуйте распределенную структуру Map от 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 ГБ тонн небольших данных?), Но это может сработать.