16

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

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

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

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

+0

Что вы оптимизации для?Например, пропускная способность чтения (одновременное считывание с нескольких компьютеров), отказоустойчивость в отношении того, что машины становятся недоступными, низкое количество машин ... Вам также нужны записи? – Alexander 2008-10-13 15:38:07

+0

Спасибо, я отредактировал вопрос с этой информацией. – sanity 2008-10-13 15:41:38

+0

Как вы хотите, чтобы ваши данные распространялись? Должны ли все данные быть доступны/в/из каждого узла или нет? В первом случае следующий вопрос: «Почему распределенный поиск?». – Alexander 2008-10-13 15:56:36

ответ

12

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

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

С уважением,

-talip

1

Вы, вероятно, следует указать, если он должен быть стойким или нет, в памяти или нет, и т.д. Вы можете попробовать: http://www.danga.com/memcached/

-1

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

8

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

0

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

0

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

2

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

0

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

0

Постарайся распределенную структуру Карта из 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();