【发布时间】:2018-07-02 15:28:09
【问题描述】:
假设我们有以下情况:
我们在数据库中有 2-3 个表,其中包含大量数据(假设为 50-1 亿条记录),我们想要添加 2k 条新记录。但在添加它们之前,我们需要检查我们的数据库是否有重复项。因此,如果这 2k 包含我们在数据库中的记录,我们应该忽略它们。但是要确定新记录是否重复,我们需要两个表中的信息(例如,我们需要进行左连接)。 解决的思路是:一个任务或线程创建一个合适的数据进行比较,并将数据推送到队列中(按批次,而不是按记录),所以我们的队列(或并发队列)是一个全局变量。第二个线程从队列中获取批处理并查看它。但是有一个问题——内存在增长……
浏览完批次后如何清理内存?
附:如果 smb 对如何优化此过程有其他想法 - 请描述一下...
【问题讨论】:
-
有什么理由不简单地将所有 2k 记录转储到临时表中并根据需要在服务器上使用 SQL 进行过滤?
-
我会在 SQL Server 的存储过程中执行此操作。如果您需要创建临时表,请使用数据库中的视图。 SQL server 比 c# 应用程序更擅长管理内存。
-
我认为它会更长......也许我弄错了。如果您想了解详细信息 - 我找不到完全重复的内容。我找到类似的记录,并根据其相似性执行一个或几个操作(在第一种情况下,我将更新现有记录,在第二种情况下创建新记录,第三个 - 忽略)。而且我没有确切的 2 个线程......我有一个创建 10k 的批处理,当我得到它时 - 我开始新任务。所以我尝试同时比较几个批次..
标签: c# .net database multithreading memory