【发布时间】:2014-10-04 04:53:54
【问题描述】:
我在数据库中有许多表,其中至少有一列包含 URL。这些在整个数据库中重复了很多次。所以我将它们规范化为一个专用表,我只在需要它们的地方使用数字 ID。我经常需要加入它们,所以数字 id 比完整的字符串好得多。
在MySql + C++中,为了一次插入很多Url,我曾经使用多行INSERT IGNOREs或mysql_set_local_infile_handler()。然后将 SELECT 与 IN () 批处理以从数据库中提取 ID。
在C# + SQLServer 中,我注意到有一个SqlBulkCopy 类在批量插入中非常有用且快速。但是我还需要在插入 URL ID 后进行批量选择来解析它们。 有没有这样的帮助类可以和SELECT WHERE IN (many, urls, here) 一样工作?
或者你有更好的想法在 C# 中以一致的方式将 Urls 转换为数字?我考虑过 crc32'ing url 或 crc64'ing 它们,但我担心碰撞。我不在乎碰撞是否很少,但如果不是......这将是一个问题。
PS:我们正在讨论数千万个 Url 以了解规模。
PS:对于基本的大插入,SQLBulkCopy 比 SqlDbType.Structured 快。此外,它还具有用于状态跟踪回调的SqlRowsCopied 事件。
【问题讨论】:
标签: c# sql-server normalization