2012-03-10 3 views
1

캐핑 된 콜렉션을 캐시 스토어로 사용하고 싶습니다. 복합 인덱스 (키 및 만료일)를 사용하여 선택하려고합니다. 제한된 컬렉션에서 업데이트/삭제할 수 없으므로 새로운 만료 날짜가있는 항목을 추가하고 만료일이있는 항목을 선택합니다.캐핑 한 콜렉션 - BsonId, 유일성 및 인덱스

1) 쿼리에서 Query.GTE("expiry", DateTime.Now)을 사용할 경우 인덱스를 만드는 최적의 방법입니까?

cacheColl.EnsureIndex(new IndexKeysBuilder().Ascending("key").Descending("expiry")); 

2) 클래스에 [BsonId] 속성이 필요합니까? 나는 "열쇠"가 유일하지 않다는 것을 안다. 레코드에 고유 한 id 항목이 있어야합니까 ??

3) 캐시 된 모음을 사용하는 유일한 동기는 캐시의 최종 크기 (디스크와 메모리 모두)를 제한하고 만료 된 캐시 항목을 직접 삭제하지 않아도된다는 것입니다. 일반 컬렉션을 선호하고 항목을 업데이트하거나 만료 된 것을 삭제할 이유가 있습니까? 문서를 지우더라도 공간이 해제되지 않았 음을 알았습니다. (압축해야합니까?)

답변

0

1) 인덱스가 올바르게 표시됩니다. 최근에 대해서만 관심이있는 경우에는 내림차순 정렬을 추가하고 쿼리에 1을 제한 할 수 있습니다.

2) 아니요. 제한된 모음에서 _id는 자동으로 생성되지 않으므로 필요하지 않습니다. 일반 컬렉션에서 고유해야하는 이유는 _id의 고유 인덱스가 기본적으로 해당 컬렉션에 대해 만들어지기 때문입니다.

3) 두 가지 방법 모두 장단점이 있으며 더 나은 방법은 사용자의 요구에 전적으로 달려 있습니다. 제한된 컬렉션에 대해 고려해야 할 한 가지 점은 컬렉션을 만든 후에는 컬렉션의 크기를 쉽게 조정할 수 없다는 것입니다. 나중에 처음에 설정 한 크기가 너무 작아서 필요한 시간 프레임 창에 맞지 ​​않는다는 것을 알게되면 문제가 될 것입니다.

P. 삭제 된 문서의 범위에서 사용 된 공간이 해제되지 않은 부분에 대해 옳았습니다. 그러나 Mongo는 이러한 범위를 추적하여 가능할 때마다이를 다시 사용합니다.