#头条创作挑战赛#
两个月之前 , 我的同事拿了一张推特的互动关系图(下图,由 STRRL 授权)来问我能不能搞一篇图技术来探索社交互动关系的文章,看看这些图是如何通过技术实现的 。
我想了想,自己玩推特以来也跟随大部队生成了不少的社交关系组图,当中有复杂的社交群体划分:
我在技术圈,看在金融、数学圈的大佬在彼岸紧密贴贴 。当然也有比较简单的关系图:
看谁和你互动比较多,而他们又和谁关系比较密切 。那么问题来了,像上面这种常见的社交关系图 , 甚至是别的更复杂的基于社交网络的图是如何生成的呢?在本文我将用图数据库 NebulaGraph 来解决社交网络问题 , 而上面的社交关系组图也被包含在其中 。btw,文中介绍的方法提供都了 Playground 供大家学习、玩耍 。
简单剖析社交网络的选型从上面的图我们可以知道,一个典型的社交网络拓扑图便是用户的点和关系的边组成的网状结构 。
因此,我们可以用图数据库来表示用户和他们的连接关系 , 来完成这个社交网络的数据模型 。基于图数据库,我们可以对用户间的关系进行查询,让各类基于社交网络连接关系的查找、统计、分析需求变得更便捷、高效 。
例如,利用图形数据库来识别网络中的 “有影响力的用户”;根据用户之间的共同点对新的连接(好友关系、感兴趣的信息)进行推荐;更甚者寻找社群中聚集的不同人群、社区,进行用户画像 。
以 NebulaGraph 为代表的图数据库不仅能支撑复杂的多跳查询 , 同时也支持实时写入、更新数据,因此非常适合用来探索用户关系不断变化的社交网络系统 。
图建模上文说过社交网络天然就是一种网络、图的结构形态 , 为了分析常见社交场景的应用示例,本文的例子采用了典型的小型社交网络 。因此 , 我在 NebulaGraph 官方数据集 basketballplayer 之上,增加了:
三种点:
- 地址
- 地点
- 文章
- 发文
- 评论
- 住在
- 属于(地点)
数据导入导入数据集首先,我们加载默认的 basketballplayer 数据集,导入对应的 schema 和数据 。
如果你使用的是命令行,那你在 console 之中执行 :play basketballplayer 就可以导入数据 。如果你使用了可视化图探索工具 NebulaGraph Studio / NebulaGraph Explorer,我们需要在欢迎页点击下载、部署这份基础数据集 。
创建社交网络 schema通过下面语句创建新加入的点、边类型 schema:
CREATE TAG IF NOT EXISTS post(title string NOT NULL);CREATE EDGE created_post(post_time timestamp);CREATE EDGE commented_at(post_time timestamp);CREATE TAG address(address string NOT NULL, `geo_point` geography(point));CREATE TAG place(name string NOT NULL, `geo_point` geography(point));CREATE EDGE belong_to();CREATE EDGE lived_in();
写入新数据在等待两个心跳(20 秒)以上时间之后 , 我们可以执行数据插入:
推荐阅读
- 客户欠货款不认账要怎么办理 客户欠货款不认账要怎么办
- 苹果13屏幕发黄怎么回事儿 苹果13屏幕发黄怎么回事
- 怎么看微信是哪一年注册的账号 怎么看微信是哪一年注册的
- 逃税86万怎么惩处他人 逃税86万怎么惩处
- 孩子学习没耐心怎么办 孩子没耐心怎么办培养
- 抖音极速版怎么发视频作品 抖音极速版怎么发视频
- 孩子上高一静不下心学习怎么办
- 小孩子静不下心学习怎么办 孩子静不下心来学东西怎么办
- 新买的车库门遥控器怎么对码 车库门遥控器怎么对码
- 电脑版qq音乐怎么看等级 qq音乐怎么看等级