我是一个新数据库.我很想知道数据库中的一些东西.例如,我看到了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,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
>游戏玩家:
> 7500或(10000 – 5000)/ 2
> –
> 6250或(7500 – 5000)/ 2
> –
>等……
在每次迭代时将剩余范围除以2.而不是6000次尝试,您可以在12次尝试中找到(log2(6000)).
–
例如,如何在2 ^ x = 1024中找到x?或者x = log2(1024)表示基数2中的对数为1024(答案:10).在我们的故事中,具有基于二叉树的索引的1024行表需要10次尝试(最大)才能找到正确的元素(而不是1024最大值).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。