2014-01-24 4 views
0

Я создал следующую схему в MongoDB:Как часто обновлять все документы со случайным числом в MongoDB

{ 
    "_id" : ObjectId("52d5c71be4b0a5cd12da5e8b"), 
    "edges" : [ 
     { 
      "edge_id" : "0", 
      "dst" : NumberLong(1), 
        "score" : ***Numeric Value*** 

     }, 
     { 
      "edge_id" : "1", 
      "dst" : NumberLong(6), 
        "score" : ***Numeric Value*** 

     } 
    ], 
    "src" : NumberLong(0) 
} 

выше коллекция MongoDB есть миллионы записей. Мое требование: 1. Обновите поле «Оценка» со случайным числовым значением. 2. Все обновления должны завершаться через несколько секунд (1-10 секунд). 2. Выполните описанную выше процедуру обновления бесконечно.

Я хотел бы выполнить вышеупомянутую задачу либо с использованием mongodb, либо с использованием комбинации mongodb и Java.

Что было бы лучшим способом выполнить вышеуказанную задачу ..?

+0

Я создал миллионы случайных чисел, используя генератор случайных чисел XORShift (код JAVA) и вставил в другую коллекцию mongodb с именем (randomNumbers). Теперь проблема заключается в том, как эффективно вывести эти цифры из одной коллекции в другую ...? Генерация и загрузка этих номеров в сбор занимает 1 сек. – Galaxy

+0

Лучший способ «подтолкнуть их к другой коллекции» - это MapReduce. – vbo

+3

Кстати, вы не можете обновить миллион записей за 10 секунд. Если вы не очертите эти записи через сотни машин, конечно. – vbo

ответ

1

В настоящее время в MongoDB не существует update пакет документов за один раз. Вы можете использовать update несколько документов с одинаковым значением. Таким образом, вам необходимо, чтобы для каждого документа индивидуально установить поле score. Кроме того, у вас, видимо, есть массив, поэтому вам нужно будет обновить с помощью позиционной записи массива определенное поле score (или установить весь массив).

Это не будет завершено за считанные секунды. Это слишком большая активность (диск и сеть).

Если вы объяснили, что вы пытаетесь выполнить с этим обновлением, тогда может быть лучшее решение. Учитывая частоту обновлений и тот факт, что данные постоянно меняются, я бы предположил, что эта структура данных хранится только в памяти и, возможно, обслуживается «клиентами» через веб-службу или другой механизм передачи.

Update:

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

+0

Спасибо за ваш ответ. – Galaxy

+0

Спасибо за ваш ответ. Позвольте мне подробно объяснить требования. У меня есть данные графа, которые имеют миллионы узлов и краев.Для этого я создал приведенную выше схему (схема в исходном вопросе). Теперь я разделил эти данные на несколько разделов (используя какой-то механизм) и сохранил их на разных серверах баз данных mongodb. Теперь я хотел бы создать симулятор реального времени, который обеспечит «оценку» как случайные значения веса края от 0 до 1000 для каждого края. Этот симулятор должен хранить это значение «оценка» для некоторого постоянного сбора (случайного), а также в коллекции графа. – Galaxy

+0

Мое приложение будет использовать постоянные данные для некоторого статистического анализа (для этого ему понадобятся все исторические данные «значение оценки») и данные графика для оценки кратчайшего пути в реальном времени между двумя узлами графика. – Galaxy

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