Я новичок в MongoDB и пытаюсь вставить оперативные данные, которые я получаю от большого количества датчиков в MongoDB.Поскольку я имею дело с большим объемом данных, я попробовал 2 разных подхода для вставки данных в базу данных.Сначала я делал это один за другим, когда получил данные и вставил их в базу данных.Второй подход - я собираю данные и использую таймер для вставки многих данных каждую 1 секунду.Первый подход был слишком медленным, но второй был лучше и быстрее с меньшим количеством подключений к БД.Это часть кода, который я разработал:
_timer.Stop();
System.Threading.Monitor.Enter(_lockObject);
try
{
Task t1 = Task.FromResult(0);
Task t2 = Task.FromResult(0);
Task t3 = Task.FromResult(0);
if (Data1.Count > 0)
{
t1 = Collection1.InsertManyAsync(Data1);
}
if (Data2.Count > 0)
{
t2 = Collection2.InsertManyAsync(Data2);
}
if (Data3.Count > 0)
{
t3 = Collection3.InsertManyAsync(Data3);
}
Task.WhenAll(t1, t2, t3);
}
catch (Exception)
{
}
finally
{
Data1.Clear();
Data2.Clear();
Data3.Clear();
System.Threading.Monitor.Exit(_lockObject);
_timer.Start();
}
Мой вопрос: если я хочу собрать запрос и вставить его в виде списка из 1000 элементов, как я могу это сделать, не потеряв оперативные данные.Я знаю, что мне нужно заблокировать мой список при вставке в базу данных, но в это время я потеряю живые данные, потому что мой список заблокирован?