2010-03-14 6 views
1

DateTime 속성을 가진 개체가 있는데 가장 오래된 개체를 쿼리하는 방법은 무엇입니까? db4o는 포럼에 요청 후db4o에서 가장 오래된 개체를 쿼리하는 방법은 무엇입니까?

, 나는 답을 얻을 :

그것은 매우 쉽습니다 : 정렬 된 SODA-Query and이 결과 ObjectSet에서 첫 번째/마지막 개체을 만들 수 있습니다. ObjectSet을 반복하지 마십시오 (따라서 객체가 활성화되지 않음). 필요한 객체를 #ObjectSet.Get(index)을 통해 직접 가져옵니다.

참고 : db4o는 쿼리 실행시 성능이 제한된 정렬 (알파벳, 숫자, 개체 ID) 만 지원하므로 좋은 성능을 얻으려면 DateTime을 밀리 초로 저장해야합니다. 우선

답변

1

, 당신의 개체는 시간 자체를 추적 할 필요가있다, 그래서 당신의 요구 사항에 따라 달라집니다 : 이제

class Customer 
{ 
    public DateTime DateSignedUp {get; private set;} 
    // ... 
} 

, 당신은 Linq에를 사용하여 당신이 좋아하는 어떤 방법으로 개체를 쿼리 할 수 ​​있습니다, SODA 또는 네이티브 검색어 (예 :

  1. 이 지속 객체 DateTime를 사용하지 마십시오

    IObjectContainer container = ...; 
    Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First(); 
    

    그러나 함정의 세트가있다. 나는 그 (것)들에 다량 문제가 있었다. 문제를 재현 할 수 없어 아직 신고 할 수 없지만 개인적으로 사용하지 않는 것이 좋습니다. 대신 long을 사용하고 각각 DateTime에서 틱을 복사하십시오. 버스 시간표와 같이 현지 시간을 명시 적으로 언급하지 않는 한 모든 시간을 UTC로 저장하십시오.

  2. 인덱스를 붙이십시오
  3. issue COR-1133 때문에 많은 양의 오브젝트에 대해 주문 조작이 매우 느릴 수 있습니다. 많은 양의 물체를 가지고 있고 물체의 대략적인 나이를 알고 있다면, 빨리 변하기 때문에 where 개의 물체를 넣으십시오. 그 성능 문제와 관련하여 See also my blogpost은 이미 ~ 50-100k 개체에서 매우 성가신 일이 될 수 있습니다.

최저,
크리스

+0

덕분에, 크리스, 다행이에 대해 알아야 할 사항. 스카 이프에서 보지 못했고, 지금 트위터에서 당신을 따라 다니고 있습니다. – Benny

관련 문제