使用实体框架处理写作操作(600k记录)的一种方法(600k记录)

发布于 2025-01-29 15:02:23 字数 1258 浏览 3 评论 0原文

我有一个.NET Core 3.1应用程序。我正在尝试创建一个将处理〜600K写入COSMOS数据库和相同数量的删除操作的实现。执行Savechangesasync方法需要大量时间。 COSMOS数据库具有将Max Ru/S设置为1K的自动尺度启用。

将AutoDetectChangesenabled设置为False无济于事。我应该划分操作的数量和每个组触发savechanges吗?

有人可以帮助我找到使用实体框架(3.1.23版本)处理宇宙数据库大量写操作的最佳方法吗?

这是代码示例(我重命名了一些值/方法):

                _context.ChangeTracker.AutoDetectChangesEnabled = false;
                var pohs = _context.A
                    .Where(x => x.Num == num)
                    .ToList();
                var pols = _context.B.ToList();
                var removed = from x in pols
                                    join y in pohs
                                    on x.Id equals y.id
                                    select x;

                _context.B.RemoveRange(removed.ToList());
                _context.A.RemoveRange(pohs);

                var anotherheaders = CreateXXX(temp.GetXXX(num));
                _context.A.AddRange(anotherheaders);             
_context.B.AddRange(tempLines.GetXXX(purchaseOrderHeaders));

                _context.ChangeTracker.DetectChanges();
                await _context.SaveChangesAsync();

更新: 加法和延期中的元素具有不同的分区。我看到对Cosmos DB提出的请求达到了最大RU/S限制。但是,将其增加到10k后,它并没有真正加快该过程。

I have a .Net Core 3.1 application. I'm trying to create an implementation that will handle ~600k writes to Cosmos database and the same amount of deletion operations. It takes a lot of time to execute the SaveChangesAsync method. Cosmos database has auto-scaling enabled with max RU/s set to 1k.

Setting AutoDetectChangesEnabled to false didn't help. Should I divide the number of operations and for each group trigger SaveChanges?

Can someone help me out finding the best way to handle high volume write operation to cosmos db using entity framework (3.1.23 version)?

Here is the code example (I renamed some values/methods):

                _context.ChangeTracker.AutoDetectChangesEnabled = false;
                var pohs = _context.A
                    .Where(x => x.Num == num)
                    .ToList();
                var pols = _context.B.ToList();
                var removed = from x in pols
                                    join y in pohs
                                    on x.Id equals y.id
                                    select x;

                _context.B.RemoveRange(removed.ToList());
                _context.A.RemoveRange(pohs);

                var anotherheaders = CreateXXX(temp.GetXXX(num));
                _context.A.AddRange(anotherheaders);             
_context.B.AddRange(tempLines.GetXXX(purchaseOrderHeaders));

                _context.ChangeTracker.DetectChanges();
                await _context.SaveChangesAsync();

UPDATE:
Elements in the AddRange and RemoveRange have different partitions. I saw that requests made to Cosmos db reached the max ru/s limit. However, after I increased it to 10k it didn't really speed up the process.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文