title: ArangoDB 图数据库 应用探索
ArangoDB 图数据库 应用探索
Not Only SQL
ArangoDB
-
图数据库
-
K/V数据库
-
文档数据库
-
Foxx(V8引擎)
ArangoDB 图数据库场景
行为分析 社会关系 风险控制 人脉管理
现实应用
- 智能推荐
- 广告投递
- 婚恋交友
- 猎头挖人
- 公安破案
- 金融风控
App应用商店关系分析
- 用户 -安装-> APP
- 用户 -卸载-> APP
- APP -属于-> 公司
- APP -属于-> 分类
App应用商店关系分析
用户集合
生成五千个随机用户数据
for user in 1..5000 INSERT { "date":(DATE_NOW()+FLOOR(RAND()*100)), "info":CONCAT("附加信息",user) } IN users return NEW { "_key": "40502", "_id": "users/40502", "_rev": "_WfKeWT---C", "date": 1520739311982, "info": "附加信息3362" }
App应用商店关系分析
app集合
生成一万个随机APP数据
for app IN 1..10000 INSERT {"name":CONCAT("app",app)} INTO apps { "_key": "64203", "_id": "apps/64203", "_rev": "_WfKkWO2-_v", "name": "app9922" }
App应用商店关系分析
分类集合
生成六个随机分类
for doc IN 1..6 INSERT { "name":CONCAT("classify",doc) } INTO classify RETURN NEW { "_key": "64881", "_id": "classify/64881", "_rev": "_WfKpDZW--_", "name": "classify2" }
App应用商店关系分析
公司集合
生成三百个随机公司
for doc IN 1..300 INSERT { "name":CONCAT("company",doc) } INTO company RETURN NEW { "_key": "65022", "_id": "company/65022", "_rev": "_WfKq8fW---", "name": "company1" }
App应用商店关系生成
用户安装
随机用户共三万次随机安装
FOR doc IN 1..30000 LET edge = {_from:(FOR user IN users SORT RAND() LIMIT 1 RETURN user)[0]._id, _to:(FOR app IN apps SORT RAND() LIMIT 1 RETURN app)[0]._id, "info":CONCAT("附加信息",doc)} INSERT edge INTO installs RETURN NEW { "_key": "190139", "_id": "installs/190139", "_from": "users/24833", "_to": "apps/50991", "_rev": "_WfLNQbm---", "info": "附加信息1" }
App应用商店关系生成
用户卸载
随机用户共三万次随机卸载
FOR doc IN 1..30000 LET edge = {_from:(FOR user IN users SORT RAND() LIMIT 1 RETURN user)[0]._id, _to:(FOR app IN apps SORT RAND() LIMIT 1 RETURN app)[0]._id, "info":CONCAT("附加信息",doc)} INSERT edge INTO unstalls RETURN NEW { "_key": "190139", "_id": "unstall/190139", "_from": "users/24833", "_to": "apps/50991", "_rev": "_WfLNQbm---", "info": "附加信息1" }
App应用商店关系生成
APP属于某公司
FOR app IN apps LET edge = {_from:app._id, _to:(FOR com IN company SORT RAND() LIMIT 1 RETURN com)[0]._id, "info":CONCAT("附加信息",app._key)} INSERT edge INTO belongtocompany RETURN NEW { "_key": "190139", "_id": "unstall/190139", "_from": "users/24833", "_to": "apps/50991", "_rev": "_WfLNQbm---", "info": "附加信息1" }
App应用商店关系生成
APP属于某分类
FOR app IN apps LET edge = {_from:app._id, _to:(FOR class IN classify SORT RAND() LIMIT 1 RETURN class)[0]._id, "info":CONCAT("附加信息",app._key)} INSERT edge INTO belongtoclassify RETURN NEW
APP属于某分类
App应用商店关系生成分析(开发环境)
二级
App应用商店关系生成分析(开发环境)
三级
App应用商店关系
动态推荐APP
与用户相关分类APP,根据安装最多排序
//卸载的APP LET uninstallapp=( FOR app IN unstalls FILTER app._from == @user return app) //安装的APP LET installapp = ( FOR app IN installs FILTER app._from ==@user return app) //根据用户安装情况关联未安装的app并且根据安装量排序 FOR v,e,p IN 1..3 OUTBOUND @user installs ,ANY belongtoclassify FILTER v NOT IN uninstallapp FILTER v NOT IN installapp FILTER v IN apps FILTER v._id IN installs[*]._to COLLECT to = v.id WITH COUNT INTO size SORT size DESC LIMIT 10 RETURN { "app":to, "size":size }
App应用商店关系生成
动态推荐某公司
安装量最多
FOR coll IN belongtocompany FOR app IN apps FILTER app._id == coll._from FOR install IN installs FILTER coll._from == install._to COLLECT appcom = coll._to WITH COUNT INTO installsize SORT installsize DESC RETURN { size:installsize, app:appcom}
App应用商店关系生成
动态推荐分类
用户安装app关联分类
FOR classedge IN belongtoclassify FOR app IN apps FILTER app._id == classedge._from FOR class IN classify FILTER class._id == classedge._to COLLECT classifycount = classedge._to WITH COUNT INTO installsize SORT installsize DESC RETURN {classify:classifycount, size:installsize}
ArangoDB 其他应用体验
Foxx
const createRouter = require('@arangodb/foxx/router'); const indexRouter = createRouter(); indexRouter.all('/', function (req, res) { res.redirect('index.html'); }); module.context.use(indexRouter);