Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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和SQLServer规范化大型URL集_C#_Sql Server_Normalization - Fatal编程技术网

C# C和SQLServer规范化大型URL集

C# C和SQLServer规范化大型URL集,c#,sql-server,normalization,C#,Sql Server,Normalization,我在数据库中有许多表,其中至少有一列包含Url。这些在数据库中重复了很多次。所以我将它们规范化为一个专用的表,并且在需要它们的地方使用数字ID。我经常需要加入它们,这样数字ID比完整字符串好得多 在MySQL + C++中,为了在一次攻击中插入大量URL,我使用了多行插入忽略或myqLyStjLoalAlxIn文件处理程序。然后用IN批选择以从数据库中提取id 在C+SQLServer中,我注意到有一个SqlBulkCopy类,它在大规模插入中非常有用和快速。但在插入Url ID后,我还需要大量

我在数据库中有许多表,其中至少有一列包含Url。这些在数据库中重复了很多次。所以我将它们规范化为一个专用的表,并且在需要它们的地方使用数字ID。我经常需要加入它们,这样数字ID比完整字符串好得多

在MySQL + C++中,为了在一次攻击中插入大量URL,我使用了多行插入忽略或myqLyStjLoalAlxIn文件处理程序。然后用IN批选择以从数据库中提取id

在C+SQLServer中,我注意到有一个SqlBulkCopy类,它在大规模插入中非常有用和快速。但在插入Url ID后,我还需要大量选择来解析它们。在许多URL中,是否有任何这样的帮助器类与SELECT WHERE工作相同

或者你有没有更好的办法在C语言中以一致的方式将URL转换成数字?我曾考虑过crc32'ing或crc64'ing URL,但我担心冲突。我不在乎碰撞是否很少,但如果不是。。。这将是一个问题

PS:我们正在谈论数千万个URL,以了解其规模


PS:对于基本大插入,SQLBulkCopy比SqlDbType.Structured快。另外,它还有一个用于状态跟踪回调的SqlRowsCopied事件。

还有一个比SQLBulkCopy更好的方法

它被调用,允许您通过ADO.NET将表值参数传递给存储过程或查询

本文中有一些代码示例,因此我将只强调您需要做些什么才能使其正常工作:

在数据库中创建用户定义的表类型。你可以叫它UrlTable 设置一个SP或查询,该SP或查询通过与表变量或类型UrlTable联接来进行选择 在支持代码C中,创建一个与UrlTable结构相同的DataTable,用URL填充它,并将其作为结构化参数传递给SqlCommand。请注意,列顺序对应关系在数据表和表类型之间至关重要。 ADO.NET在幕后所做的是,如果您分析查询,您可以看到,在查询之前,ADO.NET声明了UrlTable类型的变量,并使用您在结构化参数中传递的内容填充INSERT语句


除此之外,在查询方面,您几乎可以在SQL join、select等中使用表值参数执行任何操作。

我认为您可以在索引上使用该选项。如果在URL列的索引上设置IGNORE_DUP_KEY=ON,则重复值将被忽略,其余值将被适当插入。

Mersi。准备好溶液。研究中心…:@CodeAngry:N-ai pentru ce:实现了它。工作完美,它的燃烧速度快!进入C和SQLServer 2周后。。。我喜欢。让我的生活更轻松。我已经这么做了。它解决了SQLServer中缺少插入忽略的问题。