我发现我的 MongoDB 删除数据非常慢,但查询或插入操作没问题。
这是我的分片状态:
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")}
我使用 spring 框架,这是我的代码:
询问:
@Query(value = "{'eventId' : ?1}")
public Event findByEventId(long eventId);
删除:
mongoTemplate.remove(query(where("eventId").is(event.getEventId())), Event.class);
一般来说,保存或查询 100 条记录会花费 100ms。但是逐个删除 100 条记录需要 30 多秒。
但是如果我使用批量删除,它花费的时间少于 50 毫秒。看起来很正常。
mongoTemplate.remove(query(where("opuId").is(opuId)), Event.class);