In mongodb we are storing flat data (our Event Object) containing below fields :
- EventReceivedTimeStamp
- EventStatus (SENT, FAILED, REJECTED)
- UniqueId
- System (5 systems)
- Trigger (20 triggers)
- ErrorMessage
Data Size & Updates
- Data Count: 270 million entries
- Updates per day: 3 million (3 million new added and 3 million old removed per day)
- Document size: approx 2-3 kb
Search criteria:
- EventReceivedTime Range and Status
- EventReceived Range and System and trigger and status
- Unique Id
We created compound indexes/index on the above fields.
We are not getting response times in milliseconds while performing search on the data set. How can we improve the performance of mongodb in our case?
SampleDocument
{
"_id" : ObjectId("570cd8a55b66f3af1b4bd17e"),
"_class" : "com.companyName.commons.dto.EventRecord",
"uuid" : BinData(3,"10OXD+C51CEXS4E8jz0vnQ=="),
"moc" : "APP_NOTIFICATION",
"eventReceivedDateTime" : ISODate("2016-04-12T11:14:43.766Z"),
"retryAttemptsMade" : 0,
"retryAttemptDateTime" : ISODate("2016-04-12T11:14:43.766Z"),
"eventStatus" : "FAILED",
"systemName" : "OMS",
"triggerName" : "COD_ORDER_NIGHT",
"referenceId" : "39437515",
"aggregatorBased" : true,
"sentToDndQueue" : false,
"lastProcessedDateTime" : ISODate("2016-04-12T11:14:44.294Z"),
"errorMessage" : "Exception in validating attributes ",
"suborderCodes" : [
"39437515"
],
"dndEvent" : false
}
**db.collection_name.getIndices()**
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"uuid" : 1
},
"name" : "uuid",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"moc" : 1
},
"name" : "moc",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"eventReceivedDateTime" : 1
},
"name" : "eventReceivedDateTime",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"retryAttemptsMade" : 1
},
"name" : "retryAttemptsMade",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"retryAttemptDateTime" : 1
},
"name" : "retryAttemptDateTime",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"eventStatus" : 1
},
"name" : "eventStatus",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"systemName" : 1
},
"name" : "systemName",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"triggerName" : 1
},
"name" : "triggerName",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"referenceId" : 1
},
"name" : "referenceId",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"aggregatorBased" : 1
},
"name" : "aggregatorBased",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"salesforceTagged" : 1
},
"name" : "salesforceTagged",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"sentToDndQueue" : 1
},
"name" : "sentToDndQueue",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"senderId" : 1
},
"name" : "senderId",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"lastProcessedDateTime" : 1
},
"name" : "lastProcessedDateTime",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"errorMessage" : 1
},
"name" : "errorMessage",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"suborderCodes" : 1
},
"name" : "suborderCodes",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"dndEvent" : 1
},
"name" : "dndEvent",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"eventStatus" : 1,
"eventReceivedDateTime" : 1
},
"name" : "SDR",
"ns" : "admin.event_record"
},
{
"v" : 1,
"key" : {
"triggerName" : 1,
"eventStatus" : 1,
"systemName" : 1,
"eventReceivedDateTime" : 1
},
"name" : "STSDR",
"ns" : "admin.event_record"
}
]
Note : will share the explain output
yourQuery.explain(), output ofdb.yourcoll.getIndices()