原帖由 zhangzhh05 于 2008-6-21 18:46 发表
那为什么别的网站做不到呢?
再说有将近上亿(保守估计)的用户名,你得去匹配吧!字符的比较有那么快吗?
那你说说如果让你来做,你会怎么去做?
原帖由 zhangzhh05 于 2008-6-22 10:46 发表
那为什么别的网站做不到呢?
再说有将近上亿(保守估计)的用户名,你得去匹配吧!字符的比较有那么快吗?
那你说说如果让你来做,你会怎么去做?
原帖由 flw 于 2008-6-22 13:08 发表
还有一点:
理论上来讲,在利用了 ajax 技术的网站上,
这种检测在用户输入时就已经可以开始了。
手指的速度比机器和网络的速度慢了若干个数量级呢。
原帖由 zhangzhh05 于 2008-6-22 09:24 发表
前几天在注册Gmail邮箱时,在我输入用户名,检测是否被占用时,我没有感觉到一点点延迟,结果就出来了。
Google在全球有上亿的Gmail用户吧,这个检测速度也太快了,而且还没算上网络的延迟。比其它的门户网站都 ...
原帖由 zszyj 于 2008-6-23 11:50 发表
不要说1亿,即使是10亿行记录, 在数据库里按索引查找的话, 所花时间也不会超过1ms, 检测用户名明显就是按索引查找的, 因此也不会想得太神秘.
至于google网页显示速度快,那是因为它的WEB页面都是用CGI来生成的 ...
网络时代的算法
有人也许会说:“今天计算机这么快,算法还重要吗?”其实永远不会有太快的计算机,因为我们总会想出新的应用。虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快增长,价格也在不断下降。可我们不要忘记,需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进的记录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别,都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决。
再举另一个网络时代的例子。在互联网和手机搜索上,如果要找附近的咖啡店,那么搜索引擎该怎么处理这个请求呢?
最简单的办法就是把整个城市的咖啡馆都找出来,然后计算出它们的所在位置与你之间的距离,再进行排序,然后返回最近的结果。但该如何计算距离呢?图论里有不少算法可以解决这个问题。
这么做也许是最直观的,但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆,那这么做应该没什么问题,反正计算量不大。但如果一个城市里有很多咖啡馆,又有很多用户都需要类似的搜索,那么服务器所承受的压力就大多了。在这种情况下,我们该怎样优化算法呢?
首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。
问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围。
上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。把咖啡馆抽象一下,它是一个点”,如果要搜索一个“面”该怎么办呢?比如,用户想去一个水库玩,而一个水库有好几个入口,那么哪一个离用户最近呢?这个时候,上述“树结构”就要改成“r-tree”,因为树中间的每一个节点都是一个范围,一个有边界的范围(参考:http://www.cs.umd.edu/~hjs/rtrees/index.html)。
通过这个小例子,我们看到,应用程序的要求千变万化,很多时候需要把一个复杂的问题分解成若干简单的小问题,然后再选用合适的算法和数据结构。
上面的例子在Google里就要算是小case了!每天Google的网站要处理十亿个以上的搜索,GMail要储存几千万用户的2G邮箱,Google Earth要让数十万用户同时在整个地球上遨游,并将合适的图片经过互联网提交给每个用户。如果没有好的算法,这些应用都无法成为现实。
在这些的应用中,哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如,每天都有十亿以上的用户访问Google的网站,使用Google的服务,也产生很多很多的日志(Log)。因为Log每分每秒都在飞速增加,我们必须有聪明的办法来进行处理。我曾经在面试中问过关于如何对log进行一些分析处理的问题,有很多面试者的回答虽然在逻辑上正确,但在实际应用中是几乎不可行的。按照他们的算法,即便用上几万台机器,我们的处理速度都跟不上数据产生的速度。
那么Google是如何解决这些问题的呢?
首先,在网络时代,就算有最好的算法,也要能在并行计算的环境下执行。在Google的数据中心,我们使用的是超大的并行计算机。但传统的并行算法运行时,效率会在增加机器数量后迅速降低,也就是说,十台机器如果有五倍的效果,增加到一千台时也许就只有几十倍的效果。这种事倍功半的代价是没有哪家公司可以负担得起的。而且,在许多并行算法中,只要一个结点犯错误,所有计算都会前功尽弃。
那么Google是如何开发出既有效率又能容错的并行计算的呢?
Google最资深的计算机科学家Jeff Dean认识到, Google 所需的绝大部分数据处理都可以归结为一个简单的并行算法:Map and Reduce(http://labs.google.com/papers/mapreduce.html)。 这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个server farm里面的机器down掉一半,整个farm依然能够运行。正是因为这个天才的认识,才有了Map and Reduce算法。借助该算法,Google几乎能无限地增加计算量,与日新月异的互联网应用一同成长
原帖由 zhangzhh05 于 2008-6-23 13:21 发表
或许这些问题我们能想出解决的方法,觉的也是正确的,可在实际中环境中能不能用,或者能不能非常高效,那就不是我们能想到的,没有实践检验,做成成功的产品,一切都在我们的想像之中,想的都是应该就那么快 ...
原帖由 flw 于 2008-6-22 13:08 发表
还有一点:
理论上来讲,在利用了 ajax 技术的网站上,
这种检测在用户输入时就已经可以开始了。
手指的速度比机器和网络的速度慢了若干个数量级呢。
原帖由 zszyj 于 2008-6-23 15:33 发表
google 算法优秀, 没人不承认, 但我说的是, 算法优秀,并不体现在查找一个用户名的这种小问题上,而是体现在其内容搜索上. 如果仅仅是查找用户名, 大家自已在一个10亿行记录的数据库上查找一下就明白了. b-tree ...
原帖由 bbpet 于 2008-6-23 23:31 发表
难道是我不会用???
由于在大表中从来没见过ms级别的反馈,所以特意去试了一下
在db2上试的,分part了,24个批次跑,具体多少条不知道,反正没到10亿,等了好几分钟,总之就不是ms……
oracle上 ...
原帖由 bbpet 于 2008-6-23 23:31 发表
难道是我不会用???
由于在大表中从来没见过ms级别的反馈,所以特意去试了一下
在db2上试的,分part了,24个批次跑,具体多少条不知道,反正没到10亿,等了好几分钟,总之就不是ms……
oracle上 ...
原帖由 bbpet 于 2008-6-23 23:31 发表
难道是我不会用???
由于在大表中从来没见过ms级别的反馈,所以特意去试了一下
在db2上试的,分part了,24个批次跑,具体多少条不知道,反正没到10亿,等了好几分钟,总之就不是ms……
oracle上 ...
原帖由 zszyj 于 2008-6-24 00:17 发表
另外你说的在大表中没见过ms级别的反馈, 那就再告诉你一个事实吧:
在我们公司实现的银行系统中, 每个季度结息的速度一般是1000万户/小时, 分户表的数据量大约是1亿户, 每结一户利息所执行的SQL语句大约是60句 ...
原帖由 zszyj 于 2008-6-24 00:12 发表
真弄不懂你到底在做什么操作, 查找一行记录需要分24批次跑吗?
按索引查找一行记录要好几分钟? 你做的是全表扫描吧?
不要说现在这么强的机器,在2002年,我在移动公司每月20亿条的话单表(单表), 查找一个电话某 ...
原帖由 bbpet 于 2008-6-24 00:22 发表
在下正好也是银行的,所以才在db2上试的,确实没达到ms级~
另,亿级的数据处理要分part,貌似是常识,也许我是教条了~
反正分part了应该只会快吧 ?
原帖由 zszyj 于 2008-6-24 00:43 发表
分patiotion, 也要看你是否将db container也同时分开在不同的硬件设备上了,否则没有意义. 同时,数据分布的条件, 是否与索引条件一致了,否则还是逐个分区扫描, 也是得不偿失.
另外,还要看看你的操作系统, 如果 ...
原帖由 bbpet 于 2008-6-24 00:57 发表
别急别急,别冒火,刚找了个加班的弟兄确认了,是我迷糊了,改了个扫全表的程序测,土了土了~
我是做平台的,属于大机小白,见谅见谅
看到10亿1ms觉得也太牛了于是抢了个pcomm改批量程序,得了个错误 ...
原帖由 zszyj 于 2008-6-24 01:09 发表
没什么,只是互相讨论. 不过, 象你这样针对一些小事情也认真去求证的态度, 我还真是很佩服的.
在这见多了自以为是信口开河的人, 看到你这么认真对待问题的人真是很难得了, 希望以后多交流.
原帖由 zhangzhh05 于 2008-6-22 21:21 发表
或许这些问题我们能想出解决的方法,觉的也是正确的,可在实际中环境中能不能用,或者能不能非常高效,那就不是我们能想到的,没有实践检验,做成成功的产品,一切都在我们的想像之中,想的都是应该就那么快 ...
原帖由 zszyj 于 2008-6-24 16:51 发表
数据库的索引算法是b-tree, 自已拿本数据库原理的书看看吧. 其中一书中也有介绍这个算法. 都是由数据库实现了的, 开发人员根本不需要自已重新实现.
B-tree最大的作用, 就是数据量几何增长的情况下,而查找时间 ...
原帖由 leotalk 于 2008-6-24 08:14 发表
无语,一个字符串匹配,就算法优越了?
省省吧,就搜索算法这玩意,以目前的理论水平,在没有获得重大突破前,google与其它公司不过50步与100步的差别,在某些领域还差些。
瞧你们吹捧的,大汗... ...
...
原帖由 bbpet 于 2008-6-24 22:16 发表
呵呵,晚上踢球去了,不幸让你等惨了~
这回的结果让我相当的吃惊,居然到了0.1ms的级别去了
由于自己对db不熟,这回干脆让做数据库维护的人测,应该不犯错了
主机z990(长进了,不用s390了),两张表,一 ...
原帖由 wwwsq 于 2008-6-24 23:55 发表
用“布隆过滤器”可以瞬间进行判断,这个用户名是否已经被用过。
不用查数据库,也不用查RB-Tree。
过滤器的构建:构造一个巨大的bit array,比如10亿比特(占用约125 M内存),把这个array的所有bit都初 ...
原帖由 bbpet 于 2008-6-23 23:31 发表
难道是我不会用???
由于在大表中从来没见过ms级别的反馈,所以特意去试了一下
在db2上试的,分part了,24个批次跑,具体多少条不知道,反正没到10亿,等了好几分钟,总之就不是ms……
oracle上 ...
原帖由 zszyj 于 2008-6-25 09:11 发表
省省吧, 用户名匹配, 犯得着什么复杂算法吗? 数据库查询, 即使是10亿以上,也不超过1ms, 前面的已经测试了, 0.1ms, 你这个hash能快到哪去?
再说了, 即使机器内存多,将用户名换成bit都放在内存, 用户详细信息放 ...
原帖由 benjiam 于 2008-6-25 09:14 发表
mysql
我插入到87w 条 就没信心等下去了。
1个亿..... 不知道要等多久。
还有把1格亿的用户名放在一个数据库里的想法很烂。 足以成为最大的瓶颈
原帖由 benjiam 于 2008-6-25 09:14 发表
mysql
我插入到87w 条 就没信心等下去了。
1个亿..... 不知道要等多久。
还有把1格亿的用户名放在一个数据库里的想法很烂。 足以成为最大的瓶颈
原帖由 bbpet 于 2008-6-24 22:16 发表
呵呵,晚上踢球去了,不幸让你等惨了~
这回的结果让我相当的吃惊,居然到了0.1ms的级别去了
由于自己对db不熟,这回干脆让做数据库维护的人测,应该不犯错了
主机z990(长进了,不用s390了),两张表,一 ...
原帖由 zszyj 于 2008-6-25 09:28 发表
一看又是一个数据库盲, 根本没接触过什么过大型数据库. 1亿行数据居然成瓶颈了? 不知道现在TB级的数据库已经是家常便饭? PB级才是当前的挑战?
在庞大的数据量下, 你自已管理内存的能力居然比DB强? ACID你能保 ...
原帖由 benjiam 于 2008-6-25 11:04 发表
说你烂是有根据的。
gmail 需要多少台 web 服务器, 他们需要和数据库建立连接? 1格数据库。所有用到这个业务的服务都需要连接这个数据库,现在是gamil
其他的呢?b c d e f . 全都连上这个库,是常 ...
原帖由 benjiam 于 2008-6-25 11:04 发表
说你烂是有根据的。
gmail 需要多少台 web 服务器, 他们需要和数据库建立连接? 1格数据库。所有用到这个业务的服务都需要连接这个数据库,现在是gamil
其他的呢?b c d e f . 全都连上这个库,是常 ...
原帖由 zszyj 于 2008-6-25 11:31 发表
[quote]原帖由 benjiam 于 2008-6-25 11:04 发表
"gmail 需要多少台 web 服务器, 他们需要和数据库建立连接? 1格数据库。所有用到这个业务的服务 ...
原帖由 zszyj 于 2008-6-25 11:31 发表
[quote]原帖由 benjiam 于 2008-6-25 11:04 发表
"gmail 需要多少台 web 服务器, 他们需要和数据库建立连接? 1格数据库。所有用到这个业务的服务 ...
原帖由 wwwsq 于 2008-6-25 11:56 发表
区区不才,需要每天处理几亿条新增消息,一年是几百亿。经常要从所有数据(几千亿条)中做查询。所以根据业务需要写了一个特别的存储系统,速度比标准数据库要快几个数量级,软硬件成本降低了几个数量级。 ...
原帖由 benjiam 于 2008-6-25 11:47 发表
"gmail 需要多少台 web 服务器, 他们需要和数据库建立连接? 1格数据库。所有用到这个业务的服务都需要连接这个数据库,现在是gamil
其他的呢?b c d e f . 全都连上这个库,是常 ... "
还是显示你自已 ...
原帖由 zszyj 于 2008-6-25 12:05 发表
看你技术眼界挺一般,但倒说得自已是googlec的老板似的,有机会你自已先到google了解系统架构再说吧.
顺便纠正一下你混乱的逻辑:
1.使用连接池技术,并不需要你说的几万吧服务器同时连上数据库又同时断 ...
原帖由 wwwsq 于 2008-6-25 12:04 发表
不需要特别牛。真的不用。那个存储系统,随便找几个合格的计算机系毕业生都可以做好。只是你想不想去做的问题。标准数据库难做,是难在要“面面俱到”。而我们恰恰不需要“面面俱到”。
你只要考虑:什 ...
原帖由 wwwsq 于 2008-6-25 12:09 发表
同学,有点常识再来参加讨论。
http://bbs.chinaunix.net/viewthread.php?tid=773865
“技嘉科技每月向Google公司供应的服务器主板数量已经达到3万块”
注意,是每个月。
原帖由 cx6445 于 2008-6-25 12:12 发表
这个我还知道,呵呵,我们公司就有自己写的分布式文件系统在用,但是真得问题不少。
我觉得似乎不是几个毕业生就能设计做的。可能我第一反映想到的存储系统,和你想得并不是太一样吧。
原帖由 wwwsq 于 2008-6-25 12:16 发表
眼界放开阔一点,什么叫“存储系统”。
“特定的存储系统”有多难做,取决于这个“特定的存储系统”要实现哪些功能。
不同的存储系统,可以有很大的差别。从内存到U盘到磁带机,从简单的文件存取, ...
原帖由 wwwsq 于 2008-6-25 12:09 发表
同学,有点常识再来参加讨论。
http://bbs.chinaunix.net/viewthread.php?tid=773865
“技嘉科技每月向Google公司供应的服务器主板数量已经达到3万块”
注意,是每个月。
原帖由 cx6445 于 2008-6-25 12:19 发表
嗯,如果你说的简单的那也有,比较简单的内存数据库,不好意思,我一想就是比较复杂的,眼界还要象你学习。其实需求也不多,就是读几个亿的1-100KB小文件,就是基本不会是重复的,不能cache的,只要能稳定 ...
原帖由 zszyj 于 2008-6-25 12:34 发表
google公司全球服务器有很多,这是承认的, 但不见得就是都用于搜索网站.
另外,google其实是全世界有很多分公司,不同的分公司有自已的搜索服务器群,但其实从理论上讲,他们是属于不同的服务器群.本质上 ...
原帖由 zszyj 于 2008-6-25 12:34 发表
google公司全球服务器有很多,这是承认的, 但不见得就是都用于搜索网站.
另外,google其实是全世界有很多分公司,不同的分公司有自已的搜索服务器群,但其实从理论上讲,他们是属于不同的服务器群.本质上 ...
原帖由 wwwsq 于 2008-6-25 11:56 发表
区区不才,需要每天处理几亿条新增消息,一年是几百亿。经常要从所有数据(几千亿条)中做特定的查询。所以根据业务需要写了一个特别的存储系统,速度比标准数据库要快几个数量级,软硬件成本降低了几个数 ...
原帖由 wwwsq 于 2008-6-25 12:38 发表
信息不充分:这些文件会不会经常增加删除,文件会不会被修改,查询的频率是怎么也的,最常用的查询方式和条件是什么。
另外,技术咨询是要收费的。
原帖由 benjiam 于 2008-6-25 13:09 发表
错了, 我一直在尝试。 我一直在做类im的开发。
我也尝试过db 做完im 系统的中心。 但是结果告诉 我 NO
你的每天几一条 是实时处理吗? 相应的速度要求多少呢? 和gamil的系统有可比性吗? 做特定 ...
原帖由 wwwsq 于 2008-6-25 13:19 发表
呼叫中心,只能算是“企业级应用”,用用J2EE那样的技术就足够了。后台么,用Oracle好了,反正企业有钱,我们省事。应用服务器么,用IBM的WebSphere吧,出了问题好和客户、IBM三方扯皮。
你要是用个My ...
原帖由 cx6445 于 2008-6-25 13:14 发表
可能你误会了,不需要技术咨询,呵呵!理论和实现是两回事!
你可以show一下你这方面的经验,不过如果你具有技术指导的资格,可能年薪几十万你不放在眼里。
原帖由 benjiam 于 2008-6-25 13:25 发表
恩不算多 如果算上中国区 肯德基3年(不算其他业务)的所有销售记录。 做一个分析, 你认为你能搞定? 解破每个动作。 计算订餐瓶颈在那里。靠你的db 要多久?
原帖由 benjiam 于 2008-6-25 13:41 发表
原始数据不多的。一般是250*200*365*3 左右。
分解出来就多了 节假日可能多1,2倍。
宅急送 上海北京各一个中心,其他各自为证的。 至于kfc 是不是走宅急送就不太清楚了。毕竟我是开发 不是实施。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |