sourcecode

열거형 MongoDB 저장

codebag 2023. 5. 23. 21:51
반응형

열거형 MongoDB 저장

Mongo 데이터베이스에 각 사용자의 순위(관리자, 진행자, 사용자 등) 및 성과와 같은 항목의 열거를 저장하고 있습니다.제가 알기로는 Mongo는 열거형 데이터 타입이 없는 것으로 알고 있는데, 이는 다른 타입을 사용하여 저장해야 한다는 것을 의미합니다.

저는 쉽게 정수로 표현할 수 있는 모든 것에 대해 문자열을 저장하는 것보다 공간을 적게 사용하는 정수를 사용하여 저장하는 것을 생각해 보았습니다.정수를 사용하는 것의 또 다른 장점은 성과나 순위의 이름을 바꾸고 싶다면 데이터베이스를 건드리지 않고도 쉽게 변경할 수 있다는 것입니다.문자열을 사용할 때의 이점은 데이터가 사용되기 전에 처리가 덜 필요하고 버그를 추적하는 데 도움이 될 수 있는 사람이 읽을 수 있다는 것입니다.

몽고에서 더 좋은 방법으로 열거를 저장할 수 있는 방법이 있습니까?정수나 문자열을 사용해야 하는 강력한 이유가 있습니까?(어느 것이 더 나은 질문에서 멀리 떨어져 있기를 바랍니다)

TL;DR: 문자열이 안전한 선택일 수 있으며 성능 차이는 무시해도 됩니다.정수는 열거형을 인덱싱해야 하는 큰 컬렉션에 적합합니다.YMMV.

저는 정수로 쉽게 표현될 수 있는 모든 것에 대해 문자열을 저장하는 것보다 공간을 적게 사용하는 정수를 사용하여 저장하는 것을 생각해 보았습니다.

진실의.

정수를 사용하는 것의 또 다른 장점은 성과나 순위의 이름을 바꾸고 싶다면 데이터베이스를 건드리지 않고도 쉽게 변경할 수 있다는 것입니다.

이것은 정수의 주요 이점이라고 생각합니다.그러나 관련 값을 확인해야 합니다.enum변하지 마만약 당신이 그것을 망친다면, 당신은 거의 틀림없이 대혼란을 일으킬 것이고, 그것은 큰 단점입니다.

문자열을 사용할 때의 이점은 데이터를 사용하기 전에 처리하는 것이 적다는 것입니다.

실제로 열거형 데이터 유형을 사용하는 경우 내부적으로 일종의 정수일 수 있으므로 정수는 더 적은 처리를 필요로 합니다.어느 쪽이든, 그 오버헤드는 무시해도 될 것입니다.

정수나 문자열을 사용해야 하는 강력한 이유가 있습니까?

저는 말씀하신 것들을 많이 반복하고 있지만, 아마도 그것이 다른 독자들에게 도움이 될 것입니다.요약:

  • 열거값 맵을 섞으면 큰 혼란이 발생합니다.당신의 상상보요세를 상상해 .Declined 상는갑자로해석다니됩기로 됩니다.Accepted, 냐면왜Declined이 '였는데는 '2' 는가있값고지었금은고지을라지s▁'▁had금은있고었'▁it2▁now▁'가▁the▁value'.Accepted열거형을 다시 정렬하고 값을 수동으로 할당하는 것을 잊었기 때문에...(방탄자)
  • 문자열이 더 표현력이 높습니다.
  • 정수는 더 적은 공간을 차지합니다.디스크 공간은 일반적으로 중요하지 않지만 인덱스 공간은 RAM을 소모하기 때문에 비용이 많이 듭니다.
  • 정수 업데이트는 개체의 크기를 조정하지 않습니다.문자열의 길이가 크게 다를 경우 재할당이 필요할 수 있습니다.그러나 스트링 패딩과 패딩 팩터는 이를 완화해야 합니다.
  • 정수는 플래그가 될 수 있습니다(아직 쿼리할 수 없음, 안타깝게도 SERVER-3518 참조).
  • 정수는 다음과 같이 쿼리할 수 있습니다.$gt/$lt 것을 할 수 .$or쿼리, 그것은 다소 난해한 요구사항이고 잘못된 것은 없지만.$or쿼리...

언급URL : https://stackoverflow.com/questions/28393582/store-enum-mongodb

반응형