문제
DateTime 속성이 있는 개체가 있습니다. 가장 오래된 개체를 어떻게 쿼리할 수 있나요?
db4o 포럼에 질문한 후 다음과 같은 답변을 받았습니다.
그것은 매우 쉽습니다:정렬된 생성 SODA-Query and
결과에서 첫 번째/마지막 개체를 가져옵니다. ObjectSet
.반복하지 마세요 ObjectSet
(따라서 개체가 활성화되지 않습니다.) 다음을 통해 필요한 개체를 직접 가져오세요. #ObjectSet.Get(index)
.
참고:db4o는 쿼리 실행 시 제한된 성능 정렬 세트(알파벳순, 숫자, 개체 ID)만 지원하므로 좋은 성능을 얻으려면 DateTime을 밀리초로 저장해야 할 수도 있습니다.
해결책
우선, 객체가 시간 자체를 추적해야 하므로 요구 사항에 따라 다릅니다.
class Customer
{
public DateTime DateSignedUp {get; private set;}
// ...
}
이제 Linq, SODA 또는 기본 쿼리를 사용하여 원하는 방식으로 개체를 쿼리할 수 있습니다.
IObjectContainer container = ...;
Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First();
그러나 다음과 같은 함정이 있습니다.
- 사용하지 마세요
DateTime
지속되는 개체에서.나는 그들과 함께 엄청난 문제를 겪었습니다.아직은 문제를 재현할 수 없어 신고는 못 했지만, 개인적으로는 사용을 권해드릴 수가 없습니다.사용long
대신 해당 항목에서 틱을 복사하십시오.DateTime
.버스 시간표와 같이 현지 시간을 명시적으로 언급하지 않는 한 모든 시간을 UTC로 저장합니다. - 시간에 인덱스를 넣어라
- 대량의 개체에 대해서는 주문 작업이 매우 느릴 수 있습니다. 문제 COR-1133.물건의 양이 많고 물건의 대략적인 연대를 알고 있는 경우,
where
속도가 빠르기 때문에 제한하세요. 내 블로그 게시물도 참조하세요. 해당 성능 문제에 관해서는 이미 ~50-100,000개 개체에서 매우 짜증나게 될 수 있습니다.
최상의,
크리스
제휴하지 않습니다 StackOverflow