Нужно ли мне изменить схему моего mongoDB из-за этой проблемы? - PullRequest
0 голосов
/ 09 июля 2019

Я работаю с базой данных MongoDB, где каждая строка данных имеет вид:

{
"_id" : ObjectId("5c1bbcfbfe78c90007af2676"),
"_class" : "dasdas.dsadas.eewrewrdsfsa.dsad",
"deviceid" : 943955,
"checkid" : "23303140",
"dsc247" : 1,
"description" : "Windows-Dienst-Überprüfung - SQL Server VSS Writer",
"checkstatus" : "testerror",
"extra" : "96 fortlaufende Fehler, Öffnen des Dienstes nicht möglich",
"datetime" : ISODate("2018-12-04T15:55:00.000Z"),
"consecutiveFails" : 96,
"emailalerts" : 1,
"smsalerts" : 0,
"emailrecoveryalerts" : 1,
"smsrecoveryalerts" : 0,
"servertime" : ISODate("2018-12-20T16:02:02.000Z")
}

База данных имеет следующие индексы:

_id
datetime
deviceid_description
deviceid_description_checkstatus_datetime

Строки упорядочены по datetime , но я хочу получить доступ к данным на основе поля servertime .Проблема в том, что даже простой запрос, подобный следующему:

db.check.find(
    {
           servertime: new ISODate("2018-12-21 23:17:30.000Z")
    }        
).limit(1)

, возвращает 30 секунд , чтобы вернуть результат, и если я пытаюсь выполнить любой запрос сверх того, он занимает вечность !!

Однако, если я выполняю вышеуказанный запрос на основе времени данных, он завершается за 0,016 секунд !!

Есть ли способ обойти эту проблему?!

Нужно ли менять схему БД?Насколько это сложно и отнимает много времени?!

Я использую Robo Mongo Framework.Есть ли какая-нибудь более быстрая платформа для доступа к данным?

В базе данных есть характеристика SQL, как насчет преобразования этого в формат SQL?

...