zoukankan      html  css  js  c++  java
  • 一个网站的诞生 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/


  • 相关阅读:
    平面划分问题
    First Missing Positive
    Redis.conf
    Redis内存存储结构分析
    IE9崩溃解决办法
    未能正确加载包"visla Studio HTM Editor Package"(GUID={1B437B20F8FE11D2A5AE00104BCC7269})
    SQL SERVER 数据类型详解
    创建TIff虚拟打印机
    VS2010出现错误the operation could not be completed
    C# 基础知识 20101118
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2074905.html
Copyright © 2011-2022 走看看