php – 搜索大量数据库时的速度
我是一个新数据库.我很想知道数据库中的一些东西.例如,我看到了Facebook如何存储朋友关系的结构(参见:
https://developers.facebook.com/docs/reference/fql/friend).只有两列,第一个用户ID和第二个用户ID.那没关系.
正如维基百科所说,Facebook拥有大约10亿活跃用户.所以在那个朋友关系表中,可能有大约1000亿行.搜索该表是超快的(例如:查看我的朋友列表).我想知道他们是如何以这种速度做到的. 是因为Facebook有一些神奇的后端吗?或者它是数据库的魔力?我是否也可以使用PHP和MySQL来完成这项工作(拥有数百万用户并在数秒内搜索数据库)? (我可能会问一个愚蠢的问题,但我总是困扰我,请留下答案) 解决方法
数据库使用
indexes.这样它可以快速找到与给定用户ID相关的数据.
取决于索引结构,占用空间等…有一个增益,即它不是搜索N列,而是搜索 – 例如 – log(N).通过二十亿行的二分法搜索 N = 100,000,000 将会 Search(N) : search log2(N) = search (36 rows) 相反,搜索10 ^ 12行,只需要分析36行. 在你提到的情况下,朋友,每个用户可能有几个朋友,所以 user1 => (userX,userY,userZ,...) userX => (userU,userV,user1,...) 意思是user1是userX,userY等的朋友…… 在Mysql上会是 UNIQUE(user1,user2) 这意味着情侣(user1,user2)只在表格中出现过一次.语法是 CREATE UNIQUE INDEX friendsindex ON friends(user1,user2) friendsindex是索引名称,朋友是表.或者如您所说,将表主键声明为(user1,user2)(每个表的主键是唯一的). – 赢得游戏的策略基于相同的原则,该策略包括找到给定对象的确切价格.假设价格在1到10000之间.你告诉价格,处理程序说或 – .您必须尽可能少地尝试查找价格.例如.价格是6000. 您可以从1开始并将所有价格都提供到6000(即6000次尝试),但您也可以继续进行二分法 >你:5000 在每次迭代时将剩余范围除以2.而不是6000次尝试,您可以在12次尝试中找到(log2(6000)). – 关于logarithms 例如,如何在2 ^ x = 1024中找到x?或者x = log2(1024)表示基数2中的对数为1024(答案:10).在我们的故事中,具有基于二叉树的索引的1024行表需要10次尝试(最大)才能找到正确的元素(而不是1024最大值). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |