2014-01-27 2 views
0

У меня есть огромная база данных, в которой я должен найти определенные ключевые слова в столбце «keywords». Если я найду слово, которое я ищу в столбце «ключевые слова», то я обновляю (увеличиваю на 1) еще один столбец «Счетчик» в одном кортеже. Что я хочу сделать, поиск нескольких ключевых слов в то же время с помощью потоков, которые увеличивают значение счетчика, как только он находит ключевое слово.Обновление mongodb с использованием нескольких потоков в java

Например: Я хочу найти «аутентификацию» и «отказ». Я запустил 2 потока для этого В конце кортеж с столбцом «Ключевые слова» как «Аутентификация, Сбой» должен иметь значение «Счетчик» как 2 И кортеж со значением столбца «Ключевые слова» «Аутентификация, проходы» должен иметь " Counter "значение равно 1. И кортеж со значением столбца« Ключевые слова »« Безопасность, проходы »должен иметь значение« Счетчик »как 0.

Заранее за помощь.

ответ

1

Если вы используете $inc в своих потоках, вы должны получить то, что хотите.

EDIT:

Тема 1:

coll.update({ keywords: "authentification" }, { $inc: { counter: 1 } }); 

Тема 2:

coll.update({ keywords: "failure" }, { $inc: { counter: 1 } }); 

То, что вы должны быть уверены в том, что свойство keywords либо установить с string или array , Если ваши исходные данные выглядят как "Authentication, Passes", вы должны разобрать его и сделать из него array, как [ "authentification", "passes" ].

+0

Все потоки работают над БД одновременно. И все потоки читают значения кортежа, прежде чем кто-либо обновит значение «Счетчик». Например: если один кортеж состоит из «Аутентификации» и «Сбой». 2 потока, работающие с БД, читают значение столбца «Счетчик» как 0. И оба из них обновляют его до 1, от 0 до 1 и от 1 до 2 –

+0

. Перед обновлением вам не нужно читать кортеж. вы можете указать условие для обновления в первом параметре 'update'. См. Мое редактирование. – heinob

Смежные вопросы