我想建立一个包含一些社交网络元素的网站。
所以我一直在想一种有效的方法来存储朋友列表(有点像 Facebook)。
在搜索了一下之后,我遇到的唯一建议是制作一个带有两个“id”的“表格”,表示友谊。
这可能适用于小型网站,但似乎效率不高。
我有Java背景,但我对PHP不够精通。
我想到了一个想法,我认为它可以很好地工作,问题是我不确定如何实现它。
这个想法是将您朋友的所有“id”保存在树数据结构中,该树中的每个节点都类似于朋友 id 中的一个数字。
首先从 1 个节点开始,然后随着用户添加朋友而添加更多节点。(有点像 Lempel-Ziv)。
每个节点将能够指向 11 个其他节点,0 到 9 和 X。
“X”标记了 Id 的结尾。
例如看这棵树:
在这棵树中,用户有 4 个朋友,他们的“id”如下:
- 0
- 143
- 1436
- 15
更新:正如之前可能不清楚的那样,这个想法是每个用户都将拥有一棵多维数组形式的树,其中指针本身的存在表示朋友的“id”。
如果每个用户都有这样一个多维数组,搜索 id "y" 是否是我的朋友,从我的朋友列表中删除 id "y" 或将 id "y" 添加到我的朋友列表中都需要恒定时间 O(1) 没有依赖于网站可能拥有的用户数量,唯一的缺点是,采用如此庞大的数组,将其序列化并将其推入表格的每一行似乎并不正确。
- 这甚至可以实施吗?
- 使用序列化将该树插入表中是否可行?
- 有没有更好的方法来做到这一点?
我选择这个的好处是,即使有大量的 id(数百万或数十亿),搜索、添加、删除时间也是线性的(取决于位数)。
对于实施此方法的任何帮助或有关改进或更改此方法的替代方法的任何建议,我将不胜感激。