Монго Удалить записи в огромной коллекции - PullRequest
0 голосов
/ 07 июня 2018

У меня огромная коллекция (1000 миллионов), и я хотел бы найти и удалить записи старше отметки времени.

У меня есть индекс, созданный в поле lastUpdatedTime

   db.MyCol.remove({"lastUpdatedTime" : {$lt: ISODate("2016-10-06 00:00:00 AM") }})

Выше были удалены тайм-ауты запроса, и я также изменил использование BulkOperation.

Не удалось выполнить команду «удалить» с идентификатором 4334 при подключении «connectionId {localValue: 13, serverValue: 22}» к серверу «XXXXX: 27017» с исключением »com.mongodb.MongoSocketReadTimeoutException: Timeoutпри получении сообщения '

Я понимаю, что Монго еще не поддерживает лимит в удалении.Итак, я реализую что-то вроде ниже

//Read 10K records            
BasicDBObject query = new BasicDBObject();
query.append("lastUpdatedTime", 
               new BasicDBObject("$lte", new Timestamp(cal.getTimeInMillis())));
DBCursor cursorDocBuilder = myCol.find(query).limit(10000);
// Get Ids
BasicDBList inList = new BasicDBList();
 while (cursorDocBuilder.hasNext())
  {
     inList.add(cursorDocBuilder.next().get("_id"));
   }
//construct In clause
 BasicDBObject deleteQuery = new BasicDBObject();
 deleteQuery.put("_id", new BasicDBObject(MongoOps.$IN, inList));
 WriteResult result =myCol.remove(deleteQuery);
  1. Что было бы хорошим числом для удаления, используя предложение $ IN?
  2. Будет ли лучше запускать несколько операторов удаления вместо большого с несколькими предложениями IN?
  3. Я думаю, что это повседневная ситуация для удаления первых N записей в базе данных.Есть ли лучший способ добиться этого?

PS: я могу сделать несколько потоков для очистки.Я не хочу ограничивать базу данных, так как ожидаю больших операций чтения / записи в той же коллекции.

Добавление объяснения () для выборки 1000 записей

{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "XXX",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"lastUpdatedTime" : {
				"$lt" : ISODate("2016-10-06T00:00:00Z")
			}
		},
		"winningPlan" : {
			"stage" : "LIMIT",
			"limitAmount" : 1000,
			"inputStage" : {
				"stage" : "FETCH",
				"inputStage" : {
					"stage" : "IXSCAN",
					"keyPattern" : {
						"lastUpdatedTime" : 1
					},
					"indexName" : "lastUpdatedTime_1",
					"isMultiKey" : false,
					"multiKeyPaths" : {
						"lastUpdatedTime" : [ ]
					},
					"isUnique" : false,
					"isSparse" : false,
					"isPartial" : false,
					"indexVersion" : 2,
					"direction" : "forward",
					"indexBounds" : {
						"lastUpdatedTime" : [
							"(true, new Date(1475712000000))"
						]
					}
				}
			}
		},
		"rejectedPlans" : [ ]
	},
	"executionStats" : {
		"executionSuccess" : true,
		"nReturned" : 1000,
		"executionTimeMillis" : 200,
		"totalKeysExamined" : 1000,
		"totalDocsExamined" : 1000,
		"executionStages" : {
			"stage" : "LIMIT",
			"nReturned" : 1000,
			"executionTimeMillisEstimate" : 201,
			"works" : 1001,
			"advanced" : 1000,
			"needTime" : 0,
			"needYield" : 0,
			"saveState" : 10,
			"restoreState" : 10,
			"isEOF" : 1,
			"invalidates" : 0,
			"limitAmount" : 1000,
			"inputStage" : {
				"stage" : "FETCH",
				"nReturned" : 1000,
				"executionTimeMillisEstimate" : 201,
				"works" : 1000,
				"advanced" : 1000,
				"needTime" : 0,
				"needYield" : 0,
				"saveState" : 10,
				"restoreState" : 10,
				"isEOF" : 0,
				"invalidates" : 0,
				"docsExamined" : 1000,
				"alreadyHasObj" : 0,
				"inputStage" : {
					"stage" : "IXSCAN",
					"nReturned" : 1000,
					"executionTimeMillisEstimate" : 0,
					"works" : 1000,
					"advanced" : 1000,
					"needTime" : 0,
					"needYield" : 0,
					"saveState" : 10,
					"restoreState" : 10,
					"isEOF" : 0,
					"invalidates" : 0,
					"keyPattern" : {
						"lastUpdatedTime" : 1
					},
					"indexName" : "lastUpdatedTime_1",
					"isMultiKey" : false,
					"multiKeyPaths" : {
						"lastUpdatedTime" : [ ]
					},
					"isUnique" : false,
					"isSparse" : false,
					"isPartial" : false,
					"indexVersion" : 2,
					"direction" : "forward",
					"indexBounds" : {
						"lastUpdatedTime" : [
							"(true, new Date(1475712000000))"
						]
					},
					"keysExamined" : 1000,
					"seeks" : 1,
					"dupsTested" : 0,
					"dupsDropped" : 0,
					"seenInvalidated" : 0
				}
			}
		}
	}
...