Запуск Solr в память?
Однажды ночью я пил пинту в местном баре и заговорил с парнем рядом со мной. Как оказалось, он не только был разработчиком, но и использовал Солра. Когда мы добрались до разговоров о том, как удивительный Солр, он упомянул то, что я никогда не мог понять. Он сказал: "Способ сделать Solr действительно выполненным - это запустить его в память".
Увы, я не получил его имени и, несмотря на поиск в Google, я никогда не нашел ничего конкретного. Как вы думаете, что он имел в виду под этим?
Ответы
Ответ 1
Запуск SOLR в памяти действительно бессмыслен. SOLR предназначен для веб-сервера, где клиенты могут запрашивать с помощью RESTless api. Вы можете настроить репликацию, чтобы компенсировать высокий трафик. SOLR обертывает Луцен. Если вы хотите запустить SOLR в памяти, вы в основном используете Lucene в памяти. Поэтому я бы предложил просто запустить экземпляр Lucene и иметь диск в памяти. Мне любопытно узнать, что думают другие, но запуск SOLR в памяти действительно не предназначен для использования. С Lucene существует Directory, реализованная в памяти под названием RAMDirectory.
В то же время был аналогичный вопрос о запуске встроенного режима SOLR, но через некоторое время Apache устарел от встроенного сервера, потому что на самом деле это была Lucene.
Ответ 2
Для тех, кто хочет сделать это с целью ускорения тестов:
Если у вас есть отдельный ядро для вашего тестового индекса, вы можете изменить атрибут directoryFactory
в solrconfig.xml
на:
<directoryFactory name="DirectoryFactory" class="solr.RAMDirectoryFactory"/>
Излишне говорить, что не рекомендуется хранить производственные данные только в памяти.
Ответ 3
Возможно, он имел в виду наличие достаточного дискового кэша для хранения всего индекса. Это очень рекомендуемый способ обеспечения быстрых небольших случайных IO-считываний (и объемных записей при индексировании), что необходимо для хорошей производительности Solr: https://wiki.apache.org/solr/SolrPerformanceProblems#OS_Disk_Cache
Для меньших индексов, где дополнительная стоимость ОЗУ относительно низкая, это прекрасный совет. По мере того, как индексы растут, вероятно, лучше инвестировать больше времени на тестирование и экспериментировать с другими аппаратными настройками, поскольку SSD являются очевидной возможностью.
Ответ 4
Хотя скорость является хорошей причиной для запуска RAMDirectory, вам придется в конечном итоге сохранить каталог на диск. Вероятно, вы могли бы написать простую оболочку, чем обернуть RAMDirectory и FSDirectory и зеркально отразить вызовы для обоих. Все запросы будут выходить из RAMDirectory, но изменения будут применены к обоим.
Но еще одна очень хорошая причина сделать это будет для шифрования в покое. Шифрование данных отстой, если вы действительно хотите использовать его, потому что вам нужно оплатить накладные расходы на дешифрование, чтобы запросить его. Нецелесообразно использовать зашифрованные данные в покое, но если вы расшифровали содержимое в память и закрепили его, это было бы очень быстро.