2012-06-06 3 views
1

저는 Sinatra와 MongoMapper를 사용하여 Ruby에서 버그 추적 소프트웨어를 작성하고 있습니다. 문제는 티켓 ID가 사용자에게 친숙하지 않다는 것입니다. 그들은 24 자리의 16 진수 (예 : 4fcfa9e1c3e7f20bc2000004)로 구성됩니다. 티켓 ID는 1에서 시작하여 자동으로 증가합니다 (예 : 1, 2, 3 ...). MySQL에서는 AUTO_INCREMENT을 사용합니다.MongoMapper는 터무니없이 긴 기본 ID 대신 자동으로 증가하는 정수 ID를 사용하게 할 수 있습니까?

그러나 MongoMapper를 사용하고 있습니다. ID를 1에서 시작하여 자동 증가 시키거나, 을 별도로 저장해야합니까??

답변

1

개체 생성이 많으면 새로운 개체를 만들 때마다 DB를 치지 않아도됩니다.

그런 종류의 스케일링이 필요하지 않으면 증분 ID를 허용하는 몇 가지 보석이 있습니다.

파블로 캔 테로의 보석, mongomapper_id2.

내 보석류 mongo_sequence.

경계에서 MongoMapper가 정수로 작동하지 않는 ObjectID에 대해 특별한 동작을하는 곳이있을 수 있습니다. 나는 적어도 1 년 반 전에 모든 기본적인 것들이 정수 ID로 잘 작동한다는 것을 알고있다.

+0

'mongomapper_id2'는 그것들을 별도의 필드 (즉,'_id'가 아닌)에 저장합니다. 이것은 내가 필요한 것을하는 것처럼 보입니다. –

1

MongoDB docs에는 자동 증분 ID에 대한 몇 가지 전략이 나와 있습니다.

일반적으로 자동 증가 ID의 문제점은 크기가 조정되지 않는다는 것입니다. 자동 증가 기능을 사용하면 키를 제공하는 단일 엔티티가 필요하며 병목 현상이 발생합니다. 따라서 기본값은 객체 ID를 사용하는 것입니다.

즉, 작성 속도가 빠르지 않을 수도 있으며 링크 된 문서의 아이디어를 활용할 수도 있습니다. 또한 프로젝트와 관련하여 합리적으로 ID가 생성되는 JIRA와 같은 것을 볼 수도 있습니다.

+0

+1. OP 질문은 모든 클라이언트가 카운터를 공유하거나 각 클라이언트가 자체 수집/데이터베이스를 가져야 함을 의미합니다. 티켓 ID와 기본 키가 같은 값이어서는 안되는 것에 동의합니다. – mnemosyn