SQLServer,处理60亿条数据

feifa2008 2015-12-14 02:48:03
如题,说下需求:
1、60亿条数据由乙方给,字符串型的,9-12位,唯一。
2、60亿数据只减不增。
3、对这些数据的操作只有匹配查询。
4、数据库设计极其简单,就一个字段,用来存这个字符串。
目前想到的:
1、分表:分100张表,每表存1000w条
现在主要的问题是:
1、如何快速的导入这60亿条数据到SQLserver中?是否现实?这个是最头疼的
2、我想建一张索引表,能根据这张索引表知道去哪张分表里面做查询。这就涉及到分表存的时候要有规律,目前还不知道这规律怎么找.
分不多,求各路数据大神帮忙啊,在此谢过。。。
...全文
111 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
等不到来世 2015-12-15
快速导入: 1. 恢复模式设为:简单模式。导完后根据需要再改模式。 2. 禁用日志。 3. 先不要建索引。 4. 分批。
回复
我觉得也没必要搞那么复杂,可以的化,就放一个表里也可以,然后创建一个索引就行了,查询单条数据,速度应该在毫秒级
回复
唐诗三百首 2015-12-15
1、如何快速的导入这60亿条数据到SQLserver中?是否现实?这个是最头疼的 --> 需看乙方提供数据的形式? 这应该是可以讨论的, 最好是两边数据库数据库直接对联,或乙方提供一个只有该数据的数据库备份, 然后分批导入MSSQL. 2、我想建一张索引表,能根据这张索引表知道去哪张分表里面做查询。这就涉及到分表存的时候要有规律,目前还不知道这规律怎么找. --> 可以考虑用分区表,设置好分区方案即可.
回复
先导出到文件,然后再晚上系统比较空闲的时候,用sql server的导入导出功能,直接导入就可以了。 不过基于你的数据量很大,可能导出,导入的时间会比较长,初步计算需要大概15个小时左右,不过考虑到你的数据只有1个字段,实际速度应该会更快。
回复
我大概计算了一下,你是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
只有一个字段的表建索引没有意义吧,个人认为. 可以考虑把字符串的前一二个字符变成数字型另外放一个字段,每个数字一个分表,具体参考数据的取值范围.
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-12-14 02:48
社区公告
暂无公告