Мне нужно выполнить распределенный поиск по большому набору небольших файлов (~ 10M), каждый из которых представляет собой набор key: value
пар. Для этого у меня есть набор серверов с 56 ядрами ЦП - в основном это двухъядерные и четырехъядерные процессоры, а также большой DL785 с 16 ядрами.
Система должна быть разработана для онлайн-запросов, в идеале я хочу реализовать веб-сервис, который возвращает вывод JSON по требованию из внешнего интерфейса.
Чтобы еще больше усложнить ситуацию, для любого конкретного поиска иногда я захочу посмотреть только последнюю версию каждого файла, но другие поиски могут относиться только к тем версиям файлов, которые существовали в определенном дата.
Я смотрел на Hadoop, но администрирование довольно ужасное, и методы отправки заданий по умолчанию медленные. Похоже, что он предназначен для очень крупномасштабной обработки в автономном режиме, а не для оперативной обработки данных.
CouchDB прекрасно выглядит как хранилище документов и знает о документах в стиле key: value
, а также о версиях и MapReduce, но я не могу ничего найти о том, как его можно использовать в качестве распределенной системы MapReduce. Вся документация по кластеризации рассказывает об использовании кластеризации и репликации базы данных whole для балансировки нагрузки , тогда как мне нужно распределение нагрузки .
Я также исследовал различные DHT, и, хотя они хороши для фактического хранения и извлечения отдельных записей, они, как правило, плохо справляются с частью MapReduce по «карте». Итерации по всему набору документов имеют решающее значение.
Следовательно, моя идеальная система должна включать распределенную файловую систему, такую как HDFS Hadoop, с возможностями веб-сервиса CouchDB.
Может ли кто-нибудь указать мне, что может помочь? Язык реализации не слишком важен, за исключением того, что он должен работать в Linux.