그래서 문제가 발생합니다. 나는 그들이 제공되고있는 데이터에 기반하여 "예쁜"URL을 생성하려고하는 서버를 가지고있다. 토론을 위해 블로그 게시물의 제목을 말하게 할 수 있습니다. 이것에 대한 URL은 자원을 적절히 표현할 때 분명히 고유해야합니다. 글쎄, 내가 틀렸다면 정정해라. 그러나 이것은 MongoDB에서 간단한 문제가 아니다?고유 URL 생성
처음에는 자동 증가 필드가 검색됩니다. 이것은 내가 예상 한 것을 되 돌렸지 만 눈부신 문제가있었습니다. 10gen은 이에 대해 조언합니다. 이 문서의 큰 숫자 데이터베이스에 대한 확장하지 않기 때문에 MongoDB를 일반적으로 경고
, 당신은 _id 필드, 또는 필드에 대한 자동 증가 패턴을 사용하지 않을 것입니다. 일반적으로 ObjectId의 기본값은 _id에 더 이상적입니다.
굵은 글씨에 유의하십시오. 10gen은 어떤 필드를 증가 시키라고 조언하지 않습니다.
그래서 문제로 돌아갑니다. 서버에 게시물 제목을 건네고 게시물을 만들려면 자동으로 제목을 고유 한 제목으로 변경해야합니다. 예를 들어, 제목이 foo
인 게시물을 세 개 만들면 서버에서 /foo
, /foo1
, /foo2
에 대한 URL을 만들길 원합니다. 그것은 독특한 형태의 추가 형태 일 수 있지만, 여기에 요점은 서버가 단순히 고유 한 URL을 만들기 위해 반복적으로 실패하고 실패하게 만드는 것이 아니라 고유 한 URL을 만드는 더러운 작업을 처리한다는 것입니다.
이렇게 말하면 "MongoDB 방식"에서 어떻게 이루어 집니까? 10gen은 에 대해가 증가한다고 말하지만, 기본적으로 유일한 고유 문자열은 ObjectID
입니다. 그러나 /foo50bbe1573b60ff0000000002
은 거의 "꽤"입니다. /foo50bbe1573b60ff0000000002
을 사용해야 만한다면 /50bbe1573b60ff0000000002
을 사용할 수도 있습니다. "예쁜"은 처음 5 자 후에 오랫동안 사라졌습니다.
MongoDB 친숙한 방식으로이 문제를 처리하는 방법에 대한 의견이나 의견이 있으십니까?
잠재 응답 : 유일한 끔찍한 해결책은 고유 패스가 될 때까지 문서 생성을 반복하는 것이지만 최대 X 회입니다. 즉이 실패하면
- 당신은 그것을 쓰기, 제목
- 함께 쓰기 시도 할 수 전체 신과 지옥. 우리는 이미이 시점에서 이미 길을 잃었습니다.
잠재적 답 : 증분 필드를 만드는에 대해 조언 무엇 10gen 또 다른 잠재적 인 대답은 간단하고있다.
위의 두 가지 해결책 중에서 각 방법이 다양 할 때 더 효율적이라고 확신합니다. 예 : 솔루션 1은 고유 한 필드가 고유 할 가능성이 매우 높을 때 가장 좋습니다 (예 : 40 자의 사용자 입력 데이터). 네 글자를 다루는 경우 당밀로 느려질 수 있습니다.
편집 : 더 나은 답변 두 조합이 가장 좋을 것이라고 생각합니다. (예 : /foo
)의 "원본"URL 모음을 몇 번이나 작성했는지 확인하십시오. 타겟 URL에 카운트를 추가하면 고유 URL이 생깁니다. 나는 이것이 10gen이 권고하는 성능 문제들 사이의 균형이 될 것이며, 여전히 당신에게 증가를 제공한다고 믿습니다.
가장 친숙한 솔루션 인 foo, foo1, foo2를 소개 한 이유를 이해하지 못해서 비우호적 인 16 진수 문자열에 대해 이야기했습니다. 대답은 다음과 같습니다. URL에있는 슬러그를 사용하여 게시물을 찾을 때 슬러그를 생성 할 때 고유성을 빠르게 확인하고 게시물에 가입 할 수있는 친숙한 슬러그 테이블을 만듭니다. – Popnoodles
foo1/2/3 등은 모든 형태로 증가합니다. 10gen이 * 그에 대한 조언 * –
"일반적으로 MongoDB에서는 자동 증가 패턴을 사용하지 않을 것입니다."**! = ** "가장 현명한 해결책을 사용하지 마십시오." – Popnoodles