Загрузка процессора MongoDB достигает 100% - PullRequest
0 голосов
/ 03 октября 2018

У нас есть около 100 устройств IoT, которые подключаются к облаку и отправляют данные в облако каждые 10 секунд.

Мы тестировали на 2vcore / 4G RAM и 8 vcore / 16G RAM.Загрузка процессора увеличивается до 200% и 800% соответственно за короткое время.Установленных TCP-соединений около 106.

Это потому, что мы создали слишком много mongoldb-соединений или частота записи в mongoDB слишком высокая?

Я думаю, что Object в Scala похож на singleton, поэтомудолжен только создать один объект DBHelper?Но создает ли код в DBHelper каждое хранилище данных для каждого TCP-соединения?

1.DBHelper.scala:

  Object DBHelper{
      var datastore= morphia.createDataStore(…………….);
  }

2.MqttClient.java

  mqttPushClient.setCallback(pushCallBack);

3.

 public class PushCallback implements MqttCallback {
      public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
       //calls DBHelper and save message to mongoDB
   }
 }

1 Ответ

0 голосов
/ 03 октября 2018

Вы должны создать только один MongoClient и использовать его столько, сколько сможете.MongoClient имеет свой собственный внутренний пул соединений и может управлять всем этим за вас.Каждый раз, когда вы создаете новый клиент, он должен восстановить соединение и загрузить определенные биты метаданных.Поэтому, насколько вы можете, создайте одного клиента и одного Datastore для этого соединения и просто повторно используйте его как можно больше.

...