Является ли Lucene хорошим выбором для HashMap Key / Value? - PullRequest
1 голос
/ 12 января 2011

Я столкнулся с проблемой.Я делаю мини веб-сканер.Прямо сейчас важно иметь эффективный HashMap.Мне просто нужна структура данных ключ / значение только со вставками и поисками.

Я знаю, что Lucene может выполнять эту работу, просто имея два поля: ключ и значение;но эффективно ли это?Есть ли другие решения, более простые?

Ps: это может быть на PHP или Java, но я бы предпочел PHP.

Примечание: мне нужно, чтобы он сохранялся.И он будет открыт и закрыт несколько раз.

Ответы [ 5 ]

5 голосов
/ 19 января 2011

Если все, что вам нужно, - это быстрое и постоянное хранилище значений ключей для не огромного набора данных, то Lucene, вероятно, не лучшее решение - Berkeley DB будет очевидным выбором.Тем не менее, Грант Ингерсолл выступил с докладом на конференции Lucene Revolution в этом году именно об этом.Он преднамеренно пришел к этому вопросу с предвзятым отношением к про-Lucene и начал обсуждать с несколькими участниками аудитории то, что современные базы данных документов (такие как CouchDB) предоставляют, что Lucene не делает.Для любого небольшого набора данных, который в конечном итоге может нуждаться во вторичных индексах, я думаю, что это отличное решение.Производительность Lucene для поиска по ключу / значению не будет такой высокой, как у Berkeley DB, CouchDB, Tokyo Tyrant и т. П., Но она все еще довольно быстрая, более чем достаточная для многих приложений.Я думаю, что он измерял примерно 50 мс для поиска ключа / значения на недавнем ноутбуке.И если позже вам понадобится добавить вторичные индексы (как это может показаться в результатах веб-сканирования), вам будет намного проще работать с Lucene, чем с этими продуктами.

Другие инструменты,как BDB, будет проще для кода, чем Lucene.Но если это проблема, просто используйте Solr, который упрощает добавление документов и поиск с помощью простых HTTP-вызовов (вам нужно изменить поля в конфигурационном файле schema.xml, но в противном случае Solr должен быть готов киспользовать из коробки).

Теперь, если ваш набор данных слишком велик для разумного размещения на одном компьютере, распределенные хранилища значений ключей, такие как Project Voldemort или Riak, могут быть проще в настройке и администрировании.Но Lucene поможет вам продвинуться далеко на одной машине, особенно если вы не индексируете много полей - по крайней мере, ТБ, я думаю.

Если вы используете Lucene, я бы задумался о том,действительно, нет никаких свойств, кроме ключа, по которому вы хотели бы искать, а также сохранить их в первый раз, так как Lucene облегчает это.

2 голосов
/ 24 марта 2012

Я (ab) несколько раз использовал solr в качестве хранилища значений ключей с десятками миллионов записей. Кроме того, у нас есть производственный индекс, который включает в себя полную копию индексированных данных в формате json, и мы выполняем запросы, которые возвращают это значение, чтобы мы могли избежать избыточного и намного более медленного поиска в базе данных.

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

Pros.

1) Если вы уже используете solr или lucene, удобно не использовать другую технологию.

2) Lucene довольно хорош в поиске отдельных строк и должен хорошо масштабироваться для этой цели.

3) С помощью нескольких дополнительных столбцов вы также получаете возможность запроса.

Против 1) Lucene не предназначен для транзакционного магазина. Обычно вы добавляете несколько строк, а затем фиксируете их. Таким образом, записи не являются атомарными в смысле ACID. Обычно это плохо, если вы храните важные данные. (почти) индексация в реальном времени возможна в эти дни, но она все еще требует много усилий, чтобы получить право.

2) Поскольку между добавлением и фиксацией существует задержка, это означает, что чтение ваших собственных записей может быть проблематичным.

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

4) В то время как lucene превосходит запросы, большие наборы результатов проблематичны. Например, запрос, который производит все ключи ваших значений, может оказаться очень дорогим для индекса solr с десятками миллионов строк.

0 голосов
/ 16 апреля 2013

Вы можете взглянуть на документно-ориентированную базу данных, такую ​​как Couchdb или MongoDB .

0 голосов
/ 12 января 2011

Lucene - неподходящий инструмент для работы, которую вы описываете.

Самое простое решение - это HashMap, и оно довольно эффективно.Есть ли какая-то конкретная причина, по которой вы думаете, что HashMap был бы плохим решением?

Если вам нужно масштабировать до кластера, я бы переключился на Memcached.

0 голосов
/ 12 января 2011

Возможно, вы захотите взглянуть на Solr , это лучшая практика реализации Lucene. Это интерфейс, основанный на REST, и он довольно прост в настройке, и вы можете использовать PHP-клиент .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...