一个网站的诞生- MagicDict未来予想図1 [水平分割数据表的构想]

检索,这个功能纯粹拼的就是数据量。同样的一个单词,我的网站能查到,你的网站查不到,或者大家都可以查到同样的词语,不过我的网站例句丰富,精度高,久而久之,大家就会认可我的网站了。互联网时代,人们的选择成本大大降低了,所以,在这个时代,只有做到第一才能生存下去。

海量数据的检索,效率是第一位的。由于检索的特殊性,表格的水平分割就变得十分关键了。

由于一直在IBM大型机上做开发,使用的都是DB2这样的巨型数据库,以前数据库分割之类的事情一直没有考虑过,直到自己的网站在面对海量数据,速度明显不给力的时候,才意识到数据库需要分割了。

说到检索,日语的检索,我的构想是拥有一个总检索表格,日语汉字,日语假名,中文汉字,拼音,英语,所有的关键字都放在一张很长很长的表格里面,检索的时候,先从这张表格里面找到单词的序列号。

 

检索关键字 字典编号 字典内序列号
我们 1 4567
我们 3 312
さくら 2 3213
寒い 5 124
shanghai 6 22
close 12 34
meili 1 321
geili 1 432

这样的表格怎么水平分割:

1.水平分割的依据是什么?

2.水平分割后,这么知道一个词语在那个表格里面?

 

由于自己的本职工作不是做NET的,所以不知道有Hash化这样的一件事情,在看到下面这篇文章之后,终于找到了解决方法

http://www.cnblogs.com/codebean/archive/2011/06/02/2068768.html#2114864

所谓的Hash化,就是通过MD5加密,把字符串转化为32位的Hash值,这些Hash值都不会重复。

如果以第一位Hash码划分所有的Hash值的话,目测了一下,所有的Hash值的分布比较均匀的。

这样的话,水平分割的大致想法也就产生了:

1.为每个检索关键字生成Hash值。

2.根据Hash值的第一位决定这个关键字放在哪个数据表里面。第一位一共16种可能性【0-F】可以放在4个,8个表中,根据实际情况进行调整。

3.检索的时候,先将检索词语进行Hash化,通过Hash值的第一位来决定接下来的检索在那个数据库里面进行。

 

在原文的回复里面,有一个热点的问题。就是说虽然所有的单词都是平均分配在各个数据表里面的,但是,由于有些数据的被检索频率异常高,这样就产生了负荷不平衡的问题。具体到单词检索的数据表,就是一些常用词语可能被检索的频率会非常高。我的考虑的方案是,将高检索词语从数据表中抽出来,将这些词语的检索结果,预先保存起来。需要的时候,直接使用即可,就像使用缓存一样使用这些数据。

 

同时,我想咨询一下大家,如果我把Hash值作为数据库的主键进行使用,这样的方法是不是可行呢?

或者说,我的想法是不是还有什么欠妥当的地方呢?请大家指明方向。。。。

 

有兴趣的写信给我 root#magicdict.com   [convert # to @ ]

或者加MSN mynightelfplayer@hotmail.com

网站地址 http://www.magicdict.com/


posted @ 2011-06-08 10:21  灰毛毛  阅读(1475)  评论(7编辑  收藏  举报