db4o에서 가장 오래된 객체를 쿼리하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2442427

  •  19-09-2019
  •  | 
  •  

문제

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();

그러나 다음과 같은 함정이 있습니다.

  1. 사용하지 마세요 DateTime 지속되는 개체에서.나는 그들과 함께 엄청난 문제를 겪었습니다.아직은 문제를 재현할 수 없어 신고는 못 했지만, 개인적으로는 사용을 권해드릴 수가 없습니다.사용 long 대신 해당 항목에서 틱을 복사하십시오. DateTime.버스 시간표와 같이 현지 시간을 명시적으로 언급하지 않는 한 모든 시간을 UTC로 저장합니다.
  2. 시간에 인덱스를 넣어라
  3. 대량의 개체에 대해서는 주문 작업이 매우 느릴 수 있습니다. 문제 COR-1133.물건의 양이 많고 물건의 대략적인 연대를 알고 있는 경우, where 속도가 빠르기 때문에 제한하세요. 내 블로그 게시물도 참조하세요. 해당 성능 문제에 관해서는 이미 ~50-100,000개 개체에서 매우 짜증나게 될 수 있습니다.

최상의,
크리스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top