微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一起执行递归保存还是单独执行?

如何解决一起执行递归保存还是单独执行?

我有一个复杂的对象图,我将其保存到数据库中。这些对象都可以连接到类似类型的其他图形。我希望保存对象图以及它们递归连接的所有图。

汇总所有保存并在一个事务下执行它们是不好的做法吗?每个图形应该单独保存吗?

目前我分别保存每个子图。下面是示例代码(.NET)

public async Task<GraphObj> SaveAllGraphs(GraphObj graph)
{
    foreach (var node in graph.nodes)
    {
        if (node.subGraph != null)
        {
            await SaveGraph(node.subGraph);
        }
    }
    return await SaveGraphInstance(graph);
}
async public Task SaveGraphInstance(GraphObj graph)
{
        var txClient = (ITransactionalGraphClient)_client;
        await txClient.ConnectAsync();

        using (var tx = txClient.BeginTransaction())
        {
            await _client.Cypher.Create(...).ExecuteWithoutResultsAsync();
            await _client.Cypher.Create(...).ExecuteWithoutResultsAsync();
            await tx.CommitAsync();
        }
    }   
}

解决方法

没有真正的答案,因为这取决于您的用例。

如果你的子图等都应该在那里,或者根本不存在,那么你应该在一个事务中完成所有这些。这与其他任何东西都没有什么不同 - 数据库或实际上是应用程序。事务的好处是,它的任何一个部分失败,它都失败了。

就性能而言,这两种方法之间没有真正的区别,都对数据库进行 n 次调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。