programing

MongoDb: 객체 사용의 이점ID와 ID가 포함된 문자열 중 무엇을 선택하시겠습니까?

linuxpc 2023. 7. 5. 20:30
반응형

MongoDb: 객체 사용의 이점ID와 ID가 포함된 문자열 중 무엇을 선택하시겠습니까?

관련 문서에 대한 ID를 ObjectId로 저장하는 것보다 문자열 리터럴로 저장하는 것이 어떤 이점이 있습니까?

개체 사용ID:

{
   "_id": ObjectId("522bb79455449d881b004d27"),
   "username": "admin",
   "folder": ObjectId("522bb79455449d881b004d23")
}

문자열 대비:

{
   "_id": ObjectId("522bb79455449d881b004d27"),
   "username": "admin",
   "folder": "522bb79455449d881b004d23"
}

클라이언트에 데이터를 다시 보내는 API의 경우...문자열을 사용하면 데이터를 "정리"할 필요가 없습니다.폴더 문서를 가져오려면 두 번째 쿼리를 수행해야 하기 때문에...ObjectId를 사용할 가치가 있습니까? (만약 그렇다면 그 이유는 무엇입니까?)

감사해요.

가장 큰 이유는 객체 ID가 12바이트인 반면 동등한 문자열은 24바이트이기 때문입니다.충분한 양의 컬렉션에서 ID당 절약되는 12바이트는 정말로 합산됩니다!또한 이러한 ID는 문서를 읽거나 쓸 때 유선으로 전송되는 바이트 수가 적다는 것을 의미합니다.

또한 일부 ODM은 개체를 예상합니다.외부 문서 참조를 위한 ID이며, ID의 문자열 버전으로 혼동될 수 있습니다.하지만 저는 PHP ODM에 대해 잘 알지 못하므로 이것이 구체적으로 당신에게 영향을 미칠 수 있는지 여부를 말할 수 없습니다.

하지만 API 관련해서는 Mongo가 스키마를 강제하지 않기 때문에 주어진 필드에 말 그대로 모든 종류의 데이터를 가질 수 있기 때문에 문자열 ID를 가진 문서가 있을 수 있고 BSON ID를 가진 문서가 있을 수 있기 때문에 어쨌든 데이터를 클라이언트에 보내기 전에 데이터의 정규화를 수행해야 할 것입니다.그리고 당신의 API는 둘 다 고객에게 기꺼이 보낼 것이지만, 하나 또는 다른 하나가 손상을 일으킬 수 있습니다.이 경우 BSON Object를 사용해야 합니다.문서의 ID를 API 출력의 문자열에 캐스트해야 합니다.

예를 들어, 이름이 지정된 파일의 길이를 줄이면last_name로.lname문서당 9바이트를 절약할 수 있습니다.컬렉션에 수백만 개의 문서가 있는 경우 이는 정말 큰 차이를 만듭니다.

또한 ObjectId()에는 사용할 수 있는 다음과 같은 특성과 메서드가 있습니다.

  1. str개체의 16진수 문자열 표현을 날짜로 반환합니다.

  2. ObjectId.toString()JavaScript 표현을 반환합니다.

  3. ObjectId.getTimestamp()개체의 타임스탬프 부분을 반환합니다.

  4. ObjectId.valueOf()개체의 표현을 16진수 문자열로 반환합니다.

언급URL : https://stackoverflow.com/questions/18680462/mongodb-benefit-of-using-objectid-vs-a-string-containing-an-id

반응형