2

我是 ravendb 的新手,我有 2 个问题;

  • 我在那里存储了大约 65k 个对象,但只返回了 128 个:为什么会这样?(使用 Robert P. OpenInitializedStore 扩展)

    let printStoreData() =
        use store = DocumentStore.OpenInitializedStore() 
        use session = store.OpenSession() 
        let qs = session.Query<DataModel.simplequote>()
        printfn "%A" (qs.ToList() |> Seq.length )
    
    printStoreData()
    
  • 我对 Linq 和 Fsharp、f# 查询表达式和 Linq、查询表达式和 Ravendb 之间的关系感到很困惑。我什至在电源组中看到了一些 Linq。谁能给我一个高层次的看法,什么适合什么地方,或者指向一个适合的文件?

4

1 回答 1

2

默认情况下,Raven DB 页面会阻止您意外返回过多数据和系统过载(这是基于 SQL 的系统中性能问题的常见来源)。您需要使用 Seq.skip 和 Seq.take 来获得其余的结果。(也可能是因为在 RavenDB 中,索引是异步处理的,因此结果在保存后无法立即获得,但在这种情况下,这似乎不太可能是问题的原因)。

回答问题的第二部分:C# 具有表达式树,其中 C# linq 表达式可以由编译器转换为语法树,而不是生成实际代码。RavenDB 利用这一点将表示为 linq 表达式的查询转换为可以针对 RavenDB 运行的查询。F# 具有与 C# 的表达式树类似的功能,称为引号。引用使用不同的 F# 特定类型来表示已引用的代码。在许多方面,引用比 C# 等效项更强大,但 RavenDB 像大多数工具一样,使用 C# 表达式树而不是 F# 的引用。为了解决这个问题,有一个库是 F# 电源包的一部分,可以将 F# 的引用转换为 C# 表达式树。

我使用电源包将引用转换为 C# 表达式树的成功有限。我发现使用 raven db 的“lucene api”,它不依赖于引号或表达式树。

于 2012-04-30T11:47:03.783 回答