可以设想一个社交场景
如果我们想查 A 的人脉关系
如果用 Mysql
去做的话 对我们来说还挺容易
存储下与A相关的人脉关系就可以了
根据 领英 职场人脉关系网
一到三度人脉是跟我们自身或多或少有点交集的
如果这时候用再使用 Mysql
查询 A 的三度人脉关系
你可能会发现,查询的复杂度就会大很多了
作为写代码的人 你可以感知到 性能很可能也会很差
这时候就需要用图数据库了
它是一种 NoSql 主要用于记录实体与实体之间关系的一种数据库
主要应用于社交关系场景
点此查看-度娘百科
信用风控
当事人 A 如果想用某个贷款APP
借钱
贷款APP
一定要 A 把它通讯录信息收集才肯借他
然后 贷款APP
在收到 A 的通讯录后
可以把这个关联数据放到图数据库中
当收集了足够多的类似 A 的用户通讯录信息后
就可以进行风控
比如 A 在 贷款APP
上借过钱而且是老赖不还钱
为了防止 A 结队找其他人一起借钱不还
贷款APP
考虑多方面成本与回报
得出结论: 不能给 A 的一度人脉放款;对于A的二度人脉,得运营审核更多信息后再决定是否放款
这种时候就需要图数据库的支持
社交广告
在社交网络上 比如,微博
有一些大V【网红、明星】给某个产品【比如,女士化妆品
】打广告
投广告的一方就想评估下哪些大V给这类产品打广告 转化率可能会最高
因为微博这种是社交网络式的
一般来说 对此感兴趣的人 可能会在看到广告后转发微博推荐相关朋友来购买产品
而且平时刷微博久了 微博也会给用户打标签
比如,这个用户是对 【化妆品】这个领域感兴趣的
然后评估对 女士化妆品
有一定影响力的大v的一到三度脉人汇总对化妆品
感兴趣的总体转化率
可以提升广告的转化率,也能让广告对用户造成的干扰降低很多
相关推荐
现在电商运营维护了一堆商品百科数据
想人工做一些百科相关推荐【比如,都是高通芯片、都是同一个厂家等等】
那么需要建立百科之间的关联关系
这时候就用图数据库处理一度关系就很方便
云天河在这里主要使用 Neo4j
先新建目录,然后进入目录
话不多说 直接 docker-compose 一把梭操作
docker-compose.yml
version: '3'
services:
neo4j:
image: neo4j:3.4.7
container_name: neo4j-app
# volumes: # 生产环记得把注释打开,线下测试可以不用挂载
# - ./conf:/var/lib/neo4j/conf #数据卷,前面是宿主机目录,后面是容器目录
# - ./mnt:/var/lib/neo4j/import
# - ./plugins:/plugins
# - ./data:/data
restart: always
ports:
- 7474:7474 # UI交互端口
- 7687:7687 # 图数据库对外提供连接的端口
environment:
- NEO4J_dbms_memory_heap_maxSize=1G # 目前云天河测试,1G内存空间是没问题的,请根据业务场景,自行调整内存大小
- NEO4J_AUTH=neo4j/123456 # 用户名/密码
networks:
default:
external:
name: network_neo4j_app
为了少写点命令,云天河在这里准备了 Makefile
集成命令
all: run
run:
@# 删除镜像
@make -s down
@# 以后台挂起的模式运行
@docker-compose --compatibility -p neo4j_instance up -d
down:
@docker-compose -p neo4j_instance down
cnet:
@# 创建网卡
@docker network create --subnet=172.30.0.0/16 network_neo4j_app
ini:
@make -is cnet
@make -s run
in:
@docker exec -it neo4j-app bash
log:
@docker logs -f neo4j-app
clear:
@clear
@make -s down
@#docker rmi nginx_hlz-php-fpm
然后就可以跑起来了
make run
对外的视图操作页面就在 7474
端口了
我们访问一下看看
输入刚刚我们在 docker-compose.yml
里配置的账号 neo4j
密码 123456
就可以玩了
我们可以看到顶部带 $
的那里 就是我们的命令行了
我这里准备了一些常用的命令
大家就可以适配大多场景了
创建一个节点名为 Person 属性 name 值 Mike 的数据
当然节点名可以自己随便命名
CREATE (n:Person {name:'Mike'}) RETURN n
增加或修改一个节点名为 Person 属性 name 值 Mike 的节点对应属性
MATCH (a:Person {name:'Mike'}) SET a.age=34
删除一个节点名为 Person 属性 name 值 Mike 的节点对应 age 属性
MATCH (a:Person {name:'Mike'}) REMOVE a.age
删除一个节点名为 Person 属性 name 值 Mike 的所有关系
MATCH (n:Person {name:'Mike'})-[r]-() DELETE r
删除一个节点名为 Person 属性 name 值 Mike 的节点
注意:该节点被删除前,必须先删除所有关系
MATCH (a:Person {name:'Mike'}) DELETE a
查询出所有 Person 节点
MATCH (n:Person) RETURN n
关联两个节点,并命名关系名为 FRIENDS
无向关联,如,双向关联
MATCH (a:Person {name:'Liz'}), (b:Person {name:'Mike'}) MERGE (a)-[:FRIENDS]-(b)
有向关联,如,单向关联 a 关注 b
MATCH (a:Person {name:'Liz'}), (b:Person {name:'Lisa'}) MERGE (a)-[:FRIENDS]->(b)
取消指定关联关系
MATCH (n:Person {name:'Mike'})-[r]-(b:FROM {city:'Chongqing'}) DELETE r
更多取消关系 见 https://www.cnblogs.com/jpfss/p/11328772.html
取消指定节点所有关联关系
MATCH (n:Person {name:'Mike'}) DETACH DELETE n
查询一度人脉关系
MATCH (a:Person {name:'Mike'})-[:FRIENDS]-(b) RETURN b
同理,查询把 Mike 当成朋友的一度人脉
MATCH (a)-[:FRIENDS]->(b:Person {name:'Mike'}) RETURN b
查询二度人脉关系
MATCH (a:Person {name:'Liz'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend
查询二度人脉关系,并吐出指定数据
MATCH (a:Person {name:'Liz'})-[r1:FRIENDS]-()-[r2:FRIENDS]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName
评论列表点此评论