SQLServer,处理60亿条数据

feifa2008 2015-12-14 02:48:03
如题,说下需求:
1、60亿条数据由乙方给,字符串型的,9-12位,唯一。
2、60亿数据只减不增。
3、对这些数据的操作只有匹配查询。
4、数据库设计极其简单,就一个字段,用来存这个字符串。
目前想到的:
1、分表:分100张表,每表存1000w条
现在主要的问题是:
1、如何快速的导入这60亿条数据到SQLserver中?是否现实?这个是最头疼的
2、我想建一张索引表,能根据这张索引表知道去哪张分表里面做查询。这就涉及到分表存的时候要有规律,目前还不知道这规律怎么找.
分不多,求各路数据大神帮忙啊,在此谢过。。。
...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
等不到来世 2015-12-15
  • 打赏
  • 举报
回复
快速导入: 1. 恢复模式设为:简单模式。导完后根据需要再改模式。 2. 禁用日志。 3. 先不要建索引。 4. 分批。
LongRui888 2015-12-15
  • 打赏
  • 举报
回复
我觉得也没必要搞那么复杂,可以的化,就放一个表里也可以,然后创建一个索引就行了,查询单条数据,速度应该在毫秒级
唐诗三百首 2015-12-15
  • 打赏
  • 举报
回复
1、如何快速的导入这60亿条数据到SQLserver中?是否现实?这个是最头疼的 --> 需看乙方提供数据的形式? 这应该是可以讨论的, 最好是两边数据库数据库直接对联,或乙方提供一个只有该数据的数据库备份, 然后分批导入MSSQL. 2、我想建一张索引表,能根据这张索引表知道去哪张分表里面做查询。这就涉及到分表存的时候要有规律,目前还不知道这规律怎么找. --> 可以考虑用分区表,设置好分区方案即可.
LongRui888 2015-12-15
  • 打赏
  • 举报
回复
先导出到文件,然后再晚上系统比较空闲的时候,用sql server的导入导出功能,直接导入就可以了。 不过基于你的数据量很大,可能导出,导入的时间会比较长,初步计算需要大概15个小时左右,不过考虑到你的数据只有1个字段,实际速度应该会更快。
LongRui888 2015-12-15
  • 打赏
  • 举报
回复
我大概计算了一下,你是60亿数据,一个字段,加上sql 的存储开销,就算每个记录占用15个字节,然后60亿条数据,大概占用空间85G左右,就算是100G
Tiger_Zhao 2015-12-15
  • 打赏
  • 举报
回复
DECLARE @HashThis nvarchar(max);
SELECT @HashThis = CONVERT(nvarchar,'dslfdkjLK85kldhnv$n000#knf');
SELECT Convert(int, HashBytes('MD5', @HashThis));

用类似上面的方式做一个Hash函数,用字符串计算出一个int值。
只要一个数据表(Hash值,字符串),以Hash值作为聚集索引,并且在Hash值上分区。
查询时先按Hash值做子查询,再按字符串值最终匹配。

至于导入的速度是没办法的,毕竟数据量在那里。
因为分区表需要插入的时候就提供Hash值,用程序处理比较简单。
Yole 2015-12-14
  • 打赏
  • 举报
回复
60亿中取1000w查到表中,需要多久? 不久的话做个循环,自己插着呗~~(不着急用的话)
tcmakebest 2015-12-14
  • 打赏
  • 举报
回复
只有一个字段的表建索引没有意义吧,个人认为. 可以考虑把字符串的前一二个字符变成数字型另外放一个字段,每个数字一个分表,具体参考数据的取值范围.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧