我想在全息链中显示一个特定应用程序的所有用户的列表,使活跃用户能够与某人达成协议。在给定数据流的链接性质的情况下,获取所有用户列表的最佳实践是什么?
创建一个链接到所有用户以访问完整用户列表的中央代理是否有意义?有没有看起来更好的方法?
发布于 2018-11-23 07:07:10
来自DNA散列的链接(不推荐;请阅读下面的锚点)
每个用户可以在genesis()函数中从DNA散列链接到自己-- DNA散列是每个人都知道的分布式哈希表上的散列。那么你所需要做的就是通过getLinks(App.DNA.Hash, "user")来获取它们。(当心,这可能是一份很长的清单。我也为那些在DNA散列附近的可怜节点感到遗憾…这需要存储大量的元数据。
在Genesis中这样做
这可以在genesis函数中完成。如果你不介意的话,我会用旧的全息原语来做:
function genesis() {
commit({ Links: [ { Base: App.DNA.Hash, Link: App.Key.Hash, Tag: "registered_user" } ] };
}这将为每个新加入的人创建一种“注册代理”的东西。
这种方法的问题是
这有点反模式,因为DNA的冗余副本也存在于分布式哈希表中,节点位于DNA的分布式哈希表邻域中的可怜的灵魂将比其他节点具有更高的负载。现在,我会推荐锚点。锚点只是一种模式,由一个字符串条目+一个链接组成。因此,您将创建一个内容为"registered_users"的锚点,并从该锚点链接到任何加入的代理。仍然为那些持有锚点条目的人创造了一个热点,但预计你的应用程序将有几个这样的锚点,至少他们不需要全部挂在一个DNA散列上。
使用锚点链接
anchors mixin (目前仅与hc-proto兼容)具有创建锚点的幂等函数,因此每个用户都可以安全地调用anchor(),而无需重新创建现有锚点。
https://stackoverflow.com/questions/53438923
复制相似问题