Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检索和比较具有多列的超大数据集_C#_Sql_.net - Fatal编程技术网

C# 检索和比较具有多列的超大数据集

C# 检索和比较具有多列的超大数据集,c#,sql,.net,C#,Sql,.net,要求:我有多个数据库(Oracle/SQL Server)等。从数据库中,我需要将大量数据输入c#程序,并将数据与其中一个进行比较。数据集中的每个数据文件都有一个键(不是100%唯一的,也可能有重复项),使用该键我可以比较其他数据集文件/数据库 每个数据库将返回大约150万行。我有5个不同的数据库,我将从中获取数据。i、 e 750万行将加载到我的程序中 将数据加载到程序中的最佳方式是什么(目前每个SQL在数据库端需要5分钟)。加载到CSV,然后读取C#?还有其他想法吗 我计划将数据加载到c#中

要求:我有多个数据库(Oracle/SQL Server)等。从数据库中,我需要将大量数据输入c#程序,并将数据与其中一个进行比较。数据集中的每个数据文件都有一个键(不是100%唯一的,也可能有重复项),使用该键我可以比较其他数据集文件/数据库

每个数据库将返回大约150万行。我有5个不同的数据库,我将从中获取数据。i、 e 750万行将加载到我的程序中

  • 将数据加载到程序中的最佳方式是什么(目前每个SQL在数据库端需要5分钟)。加载到CSV,然后读取C#?还有其他想法吗

  • 我计划将数据加载到c#中的HashSet中,这是一个好的选择吗


  • 恕我直言,这不是一个大问题。这是一个中等规模的问题,您必须处理750万行。在您的示例中,这些行似乎相对较短。如果您可以访问一台内存超过2GB的计算机,那么您可能可以相当轻松地在RAM中完成整个工作。一台典型的2011年笔记本电脑可以做到这一点。几乎所有Win x64笔记本电脑都可以在RAM中实现

    您询问是应该直接从数据库系统还是从CSV提取数据。如果您计划在生产中使用这个系统,您应该坚持使用数据库系统。这避免了错误处理过时数据的可能性

    从您的问题来看,您的各种系统中的
    帐户
    值似乎彼此完全匹配,而不存在许多模糊匹配的胡闹。也就是说,似乎一个帐户在多个数据库中被称为“1234”,而在其中一个数据库中不是“1234”,在另一个数据库中是“1234-001”,在第三个数据库中是“A1234-2014”。这是非常好的消息。这意味着您可以使用hashset之类的东西在内存中处理它们

    您可能应该设置您的系统,以便它可以处理所有数据或
    Account
    值的任意子集。例如,您可能允许将子集指定为“1000”-“1999”。这对于测试来说是非常方便的,因为您可以使用几千个帐户进行短期运行。这意味着您可以使用短时间运行的子集查询来完成所有工作。当你对一切都运转良好感到满意时,你可以开始生产并回家过夜

    请注意,如果这是一项一次性工作,您也可以在您的个人计算机上安装一些DBMS(MySQL或PostgreSQL将是很好的开源选择),将各种数据库系统的各种摘录加载到其中的表中,并对它们进行连接


    最后,如果您继承的是未知质量的数据,Google允许您下载一个非常有用的数据检查和清理工具,名为

    如果它不是唯一的,则它不是密钥。什么是数据集中的数据文件?DB1上的2来自哪里?Balm,你是在谈论原始/第一篇文章中的最终表格吗?这是属于DB2的一个配置问题2。就个人而言,我会从数据库中获取摘录,然后导入SQL Server,然后编写SQL进行比较(对于MS SQL Server来说,使用EXCEPT关键字很容易),然后修复配置。将其转换为代码{},它将对齐。你说的不独特是什么意思?解决这个问题。如果没有唯一密钥,则无法使用哈希集。谢谢Ollie。但是其他几个数据库查询需要20-30秒才能返回数据。对于论坛,我只是概述了我的问题。我也应该在前面提到这一点,我得到的数据是旧的(过去24个月)。我强烈支持Ollie关于处理数据子集的建议。这允许您在处理另一组数据时开始检查结果。但更重要的(至少对我来说)是,这可以让你从中断的地方开始处理中断。我希望这将是非常有益的。@DeadZone是的,不开玩笑,这种数字运算工作几乎不会在一次运行中完成。
    DB 1:
    Account   Amount
    1234  1
    9999  66
    
    DB 2:
    Account   Amount
    1234  2
    9999  66
    
    DB 3:
    Account   Amount
    1234  1
    9999  66
    
    DB 4:
    Account   Amount
    1234  10
    9999  66
    
    After comparing the output looks like
    Account   DB1 Amt DB1 Amt DB3 Amt DB4 Amt Match?
    1234  1   2   1   10  No
    9999  66  66  66  66  Yes