mongodb 및 mysql에서 데이터를 모두 보았습니다. 행에 필드 list_id가 있으면 하나의 list_id가있는 매우 많은 행이있을 수 있습니다. mongdb에서 여러 문서를 삭제하는 것이 mysql에서 여러 행을 삭제하는 것보다 훨씬 빠릅니다. 나는 mysql에서 innodb 엔진을 사용한다. Mysql과 mongdb가 동일한 서버에 있습니다. 예를 들어 ,mongdb에서 여러 문서를 삭제하는 것이 mysql에서 여러 행을 삭제하는 것보다 훨씬 빠릅니다.
DELETE FROM contacts WHERE list_id = 100
내가 PHP에서 드라이버에 대한 안전 모드를 사용
return self::remove(array('LISTID' => $listId), array('safe' => true));
보다 훨씬 느린, 그래서 모든 데이터가 삭제 될 때까지 기다려야합니다. 여기
는 MongoDB의 수집에 대한 정보입니다 : 예를 들어"count" : 23456989,
"size" : 4391452160,
"avgObjSize" : 187.21295218239646,
"storageSize" : 5727051776,
"numExtents" : 32,
"nindexes" : 2,
"lastExtentSize" : 961069056,
"paddingFactor" : 1.0099999999950207,
"flags" : 1,
"totalIndexSize" : 2983806672,
"indexSizes" : {
"_id_" : 787504144,
"LISTID_1_EMAIL_1" : 2196302528
},
"ok" : 1
}
, 그것은 MySQL의에서, 약 30 배 빠른 속도의 MongoDB를에, 조건을 만족이 100K 행은 모든 100K 행을 삭제하는 데 약 99 초가 소요 경우 그 이 조건을 충족 시키십시오.
색인은 mysql과 mongodb에서 모두 사용됩니다.
EXPLAIN SELECT *
FROM `subscribers`
WHERE list_id =118
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE subscribers ref FK_list_id FK_list_id 4 const 1
지금, 나는 덩어리로 데이터를 삭제, 큐에 데이터를 입력하고 그것을 배경을 온라인으로이 작업을하지 않습니다.
하지만 20-30 번 정도의 차이가 나는 이유는 무엇일까? mongodb에서 삭제 작업이 훨씬 빠르다. mongodb에서는이 작업이 원적이지 않으므로?
이것은 무엇 100K 행을 삭제하는
SET PROFILING = 1;
DELETE FROM subscribers WHERE list_id = 118;
SHOW PROFILE FOR QUERY 1;
표시 : 번호 및 세부 사항없이
starting 0.000052
checking permissions 0.000000
Opening tables 0.000000
System lock 0.000000
init 0.000000
updating 84.382015
end 0.000006
Waiting for query cache lock 0.000002
end 0.000006
query end 0.035284
closing tables 0.000021
freeing items 0.000040
logging slow query 0.000001
logging slow query 0.000002
cleaning up 0.000002
무의미한 질문을 시도 WHERE
UPDATE 연락처 SET는 = 사실 삭제. 트랜잭션 무결성, 외래 키 다루기 등이 MongoDB보다 비싸기 때문에 RDBMS에서 물건을 제거하는 것이 더 비쌉니다. 특히 MongoDB는 화재와 잊기 때문에 작업이 끝나지 않은 것을 알 수 없습니다. –
mongodb 안전 모드가 사용되므로 삭제할 때까지 기다려야합니다. – Oleg
당신이 사용하고있는 엔진 (innodb, myisam 또는 다른 것)을 말하지 않았기 때문에 정확히 말하기는 어렵지만, Mongo는 fsync를 지연시키지 않아 속도가 빨라진다. 가끔). –