我是 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之间的关系很困惑。我什至在 powerpack 中看到了一些 Linq。谁能给我一个关于什么适合什么地方的高级 View ,或者指向一个文档?
最佳答案
默认情况下,Raven DB 页面会阻止您意外返回过多数据并导致系统重载(这是基于 SQL 的系统中性能问题的常见来源)。您需要使用 Seq.skip 和 Seq.take 来获取其余结果。 (也可能是因为在 RavenDB 中索引是异步处理的,因此结果在保存后无法立即可用,但在这种情况下,这似乎不太可能是问题的原因)。
回答问题的第二部分: C# 具有表达式树,其中 C# linq 表达式可以由编译器转换为语法树,而不是生成实际代码。 RavenDB 利用这一点将表示为 linq 表达式的查询转换为可以针对 RavenDB 运行的查询。 F# 具有与 C# 表达式树类似的功能,称为引用。引用使用不同的 F# 特定类型来表示已引用的代码。在许多方面,引号比 C# 的等效项更强大,但 RavenDB 与大多数工具一样,使用 C# 表达式树而不是 F# 的引号。为了解决这个问题,F# power pack 中有一个库可以将 F# 的引用转换为 C# 表达式树。
我使用 Power Pack 将引文转换为 C# 表达式树取得了有限的成功。我发现使用 raven db 的“lucene api”,它不依赖于引号或表达式树。
关于linq - Ravendb/F#/Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382795/