Я нашел, что мои MongoDB удаляют данные очень медленно, но запрос или вставка действия в порядке.MongoDB shard удалить данные очень медленно
Это мой статус осколок:
shards:
{ "_id" : "shard0000", "host" : "192.168.1.50:27017", "tags" : [ "global" ] }
{ "_id" : "shard0001", "host" : "192.168.2.50:27017", "tags" : [ "china" ] }
две базы данных установки в разных странах. Но я уверен, что я поместил все данные в одну базу данных в свой тест.
Это структура записи:
{
"_id": ObjectId("56cd5cdae4b0323bc94339e6"),
"eventId": NumberLong(5680),
"opuId": NumberLong(2576),
"eventTime": ISODate("2016-02-24T07:33:46.471Z")},
{
"_id": ObjectId("56cd5cdae4b0323bc94339e7"),
"eventId": NumberLong(5681),
"opuId": NumberLong(2576),
"eventTime": ISODate("2016-02-24T07:34:46.471Z")}
Я использую рамки весной и вот мой код:
Запрос:
@Query(value = "{'eventId' : ?1}")
public Event findByEventId(long eventId);
Удалить:
mongoTemplate.remove(query(where("eventId").is(event.getEventId())), Event.class);
Вообще , сохранение или запрос 100 записей будут потрачены на 100 мс. Но удаление 100 записей в каждом случае занимает более 30 секунд.
Но если я использую пакетное удаление, он тратит меньше 50 мс. Это выглядит нормально.
mongoTemplate.remove(query(where("opuId").is(opuId)), Event.class);
У вас есть указатель на «opuId»? если вы запустите db.collection.find ({«opuId»: 1234}). Объясните(), какой cursoer вы получаете (по умолчанию?), запрос выполняется на eventId, который, вероятно, индексируется или даже используется как ключ осколка, который, вероятно, объясняет почему это быстро. –