2012-04-30 6 views
2

나는 ravendb를 처음 사용하며 질문이 2 개 있습니다.Ravendb/F #/Linq

  • 약 65k 개의 개체가 저장되어 있지만 128 개만 반환됩니다. 왜 그런 경우입니까?

    let printStoreData() = 
        use store = DocumentStore.OpenInitializedStore() 
        use session = store.OpenSession() 
        let qs = session.Query<DataModel.simplequote>() 
        printfn "%A" (qs.ToList() |> Seq.length) 
    
    printStoreData() 
    
  • 나는 # 쿼리 식 및 Linq에, 쿼리 식 및 Ravendb F Linq에와 Fsharp 사이의 관계에 대한 매우 혼란 스러워요 (로버트 P. OpenInitializedStore 확장을 사용). 나는 파워 팩에 Linq이 보이기까지했다. 어떤 사람이 나에게 문서의 위치 나 위치를 알 수 있습니까? 기본 레이븐 DB 페이지의 결과에

답변

2

실수로 너무 많은 데이터를 반환하고 (SQL 기반 시스템에서 성능 문제의 일반적인 원인이다) 시스템 과부하를 중지합니다. 나머지 결과를 얻으려면 Seq.skip 및 Seq.take를 사용해야합니다. (RavenDB 인덱스는 비동기로 처리되기 때문에 결과가 저장되는 즉시 사용할 수 없기 때문에이 경우 문제의 원인이 될 가능성이 적습니다).

질문의 두 번째 부분은 다음과 같습니다. C#에는 실제 코드를 생성하는 대신 컴파일러에서 C# linq 표현식을 구문 트리로 변환 할 수있는 표현 트리가 있습니다. RavenDB는이를 이용하여 linq 표현식으로 표현 된 쿼리를 RavenDB에 대해 실행될 수있는 쿼리로 변환합니다. F #은 C#의 표현식 트리와 비슷한 기능을 가지고 있습니다. 인용문은 다른 F # 특정 유형을 사용하여 인용 된 코드를 나타냅니다. C#과 동등하지만 RavenDB는 대부분의 도구와 마찬가지로 F #의 인용 대신 C# 표현식 트리를 사용하는 인용문이 더 강력합니다. F #의 인용 부호를 C# 표현 트리로 변환 할 수있는 F # 파워 팩의 일부인 라이브러리가 있습니다.

파워 팩을 사용하여 인용문을 C# 표현 트리로 변환하는 데 제한된 성공을 거두었습니다. 인용구 또는 표현식 트리에 의존하지 않는 raven db의 'lucene api'를 사용하여 발견했습니다.

+0

나는 그것을 보았다. http://old.ravendb.net/documentation/safe-by-default. 지도 해 주셔서 대단히 감사합니다. – nicolas

+0

F # 3.0의 LINQ 쿼리 지원은 RavenDB와 잘 작동합니다. –

+0

@JoelMueller 당신은 부트 스트랩에 어떤 예가 있습니까? – nicolas