Я пытаюсь создать коллекцию подсчета совпадений для обработанного простого текстового дампа Википедии. Я использую API Java для MongoDB и моя структура документа довольно проста:Количество слов в MongoDB
{ш: word1 # word2, с: число}
У меня есть индекс на «ш» и я обновление счетчиков для каждая пара встретить при использовании запроса:
coll2.update(new BasicDBObject("w",word), new BasicDBObject("$inc",new BasicDBObject("c",1)),true,false);
существуют ли какие-либо другие оптимизации я мог бы сделать, чтобы ускорить мое слово процесс подсчета? Я нахожусь в ~ 27 миллионах пар слов, а с терминала «mongod» я вижу бесконечный поток запросов, берущих от 100-1000 мс (что, я думаю, «медленное»). Благодаря моему Google'у подход MapReduce кажется обычным способом решения проблем с большим количеством слов. Но я не очень много знаю о MapReduce и, исходя из моего основного понимания, мне потребуется больше одной машины (чего у меня нет).
Спасибо, Энтони
Если я правильно вас понимаю, я считаю, что делаю точное совпадение в своем поле «w», когда каждый раз я создаю пару слов (word1 # word2, где word1 лексикографически предшествует word2). И мне нравится идея сначала хранить отсчеты на карте, а затем вставлять! Это должно сократить количество запросов. –
Также, как я могу проверить, соответствует ли весь мой индекс «w» в ОЗУ? –
Вы можете видеть каждый размер индекса из db.collection.stats() – ajg