用MYSQL
条件如下:现有10个txt数据文件,将近3千万行数据,要求导入数据库。数据每一行4列:queryname,querytime,linkno,linkurl。例子:google 2009-09-09 1 www.google.com
bai d 2009-08-08 34 www.baidu.com
google 2009-09-10 null null
……
(1)数据的导入没有问题,我导入到同一张表sa(听说分区有好处,但是希望谁能告诉我怎么分比较好)
(2)进行合理的关系模型建造。(要求用ID来代替长数据queryname,linkurl)
所以我就打算创建4个表:
table sa(queryname,querytime,linkno,linkurl)导入用
table query(QID,queryname)QID自动增长 记录不同的查询文本
table link(LID,linkurl)LID自动增长 记录不同的URL
table record(QID,querytime,linkno,LID)
我先把数据文件导入sa,没问题,355w行,2分多钟;然后insert into query(queryname) select distinct queryname from sa,也没问题,121w行;将linkurl插入link表也没问题。但是当我想通过连接查询做record表时,发现在如此大的数据下,做连接查询不可能。
高手指点一下,在如此大的数据前提下,要创建所谓的关系模型,而不是单纯的一张导入的表,怎么做,怎么设计,希望能够具体点。
条件如下:现有10个txt数据文件,将近3千万行数据,要求导入数据库。数据每一行4列:queryname,querytime,linkno,linkurl。例子:google 2009-09-09 1 www.google.com
bai d 2009-08-08 34 www.baidu.com
google 2009-09-10 null null
……
(1)数据的导入没有问题,我导入到同一张表sa(听说分区有好处,但是希望谁能告诉我怎么分比较好)
(2)进行合理的关系模型建造。(要求用ID来代替长数据queryname,linkurl)
所以我就打算创建4个表:
table sa(queryname,querytime,linkno,linkurl)导入用
table query(QID,queryname)QID自动增长 记录不同的查询文本
table link(LID,linkurl)LID自动增长 记录不同的URL
table record(QID,querytime,linkno,LID)
我先把数据文件导入sa,没问题,355w行,2分多钟;然后insert into query(queryname) select distinct queryname from sa,也没问题,121w行;将linkurl插入link表也没问题。但是当我想通过连接查询做record表时,发现在如此大的数据下,做连接查询不可能。
高手指点一下,在如此大的数据前提下,要创建所谓的关系模型,而不是单纯的一张导入的表,怎么做,怎么设计,希望能够具体点。
linkurl 会有多少种不同的值?
如果不多的话,则可以用你所说的模式。
如果很多的话,则还不如就用一张表。基于这些数据,你最常用的查询操作是哪些?
比如你的查询只是 select * from sa where querytime > curdate(); 则就一张表就行了。同样,怎么进行分区也要看你怎么使用这些数据而定。
所以我就打算创建4个表:
table sa(queryname,querytime,linkno,linkurl)导入用
table query(QID,queryname)QID自动增长 记录不同的查询文本
table link(LID,linkurl)LID自动增长 记录不同的URL
table record(QID,querytime,linkno,LID)
我先把数据文件导入sa,没问题,355w行,2分多钟;然后insert into query(queryname) select distinct queryname from sa,也没问题,121w行;将linkurl插入link表也没问题。但是当我想通过连接查询做record表时,发现在如此大的数据下,做连接查询不可能。速度慢?
--------------------
可以的,不过还得看你的查询所涉及到的扫描表数据的数据量及索引是否合理。