【问题标题】:How can I bulk upload and transform relational data to aggregates in RavenDB?如何批量上传关系数据并将其转换为 RavenDB 中的聚合?
【发布时间】:2013-05-15 21:32:41
【问题描述】:

我正试图弄清楚如何将关系数据有效地批量插入到 RavenDB 中,尤其是在从关系数据转换为聚合的情况下。

假设我们有两个表的两个转储文件:OrdersOrderItems。它们太大而无法加载到内存中,所以我将它们作为流读取。我可以阅读每个表并在 RavenDB 中创建一个与每一行对应的文档。我可以使用batched requests 作为批量操作来执行此操作。到目前为止简单而高效。

然后我想在服务器上转换它,摆脱 OrderItems 并将它们集成到它们的父 Order 文档中。如果没有数千次往返,我怎么能做到这一点?

答案似乎介于set-based updateslive projectionsdenormalized updates 之间,但我不知道在哪里。

【问题讨论】:

    标签: c# nosql ravendb


    【解决方案1】:

    您需要使用denormalised updatesset-based updates 执行此操作。看看PATCH API 看看它提供了什么。虽然如果您计划一次更新多个文档,则只需要基于集合的更新,但您可以直接使用 PATCH api 对已知文档进行修补。

    实时投影只会在您获得查询/索引的结果时为您提供帮助,它们不会更改文档本身,只会更改从服务器返回到客户端的内容。

    但是,如果可能,我建议您在将 Order 和内存中相应的 OrderItem 组合起来后再将它们发送到 RavenDB。您仍然可以从转储文件中流式传输数据,只需在需要时使用一些缓存。这将是最简单的选择。

    更新 我制作了一些 sample code 来展示如何做到这一点。这会修补特定 Post 文档中的 Comments 数组/列表,在本例中为“Posts/1”

    【讨论】:

    • 谢谢,但我仍然看不到如何使用其他文档中的数据修补更新订单(有效地使用嵌套循环连接)。而且在上传之前我看不到如何组合完整的订单,因为每个订单的订单项目都深埋在OrderItems 转储中。我需要某种数据库来交叉引用这两者。我可以使用 SQL 数据库来执行此操作,但这有点违背了使用 NoSQL 的目标!
    • 查看ravendb.net/documentation/docs-http-api-patch 此处的“数组操作”部分。您需要构造一个类型为“add”的新 PatchRequest{...} 以将 OrderItems 添加到相关的订单文档中。
    • 这样我就可以将 same 值插入到每个 Order 文档的数组中。显然,我需要根据查找在每个数组中插入不同的值。我看不出 PATCH 命令是如何让我这样做的。
    • 看看这里的要点gist.github.com/990623,我认为它显示了你想要做的事情。 Post 是用一个空的 cmets 列表创建的,然后通过向数组中添加项目来修补 cmets。此示例是来自此处github.com/mattwarren/ravendb-FacetedSearch/blob/master/… 的单元测试“CanAddValuesToList()”的修改版本
    • 该示例修补了一个发布文档(即“posts/1”)并将三个特定的 cmets 插入其中。这不好 - 没有要更新的文档 - 有数千个。
    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 2011-11-28
    • 2019-08-20
    • 2022-08-20
    • 2019-06-25
    • 2019-03-27
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多