唯品金融大数据团队的图数据库实践

标签: | 发表时间:2018-07-13 10:35 | 作者:
出处:https://mp.weixin.qq.com

1

风控与图

在大数据时代,社交关系趋于复杂化,越来越多的互联网项目都和社交关系联系起来。而对社交关系的良好契合,使得图数据库(Graph Database)在互联网领域迅速崛起。通过图数据库可以高效地进行社交关系查询、分析和数据挖掘,以发现有价值的信息。

近几年互联网金融发展火热,用户对消费分期、现金贷等需求也越来越高。然而机遇也意味着调挑战,相比传统金融行业,互联网金融由于申请流程简化,更容易遇到恶意套现、骗贷、拖欠后失联等情况。如何识别欺诈行为,减少坏账,是互联网金融行业首要解决的问题。

唯品金融开始着手唯品花等金融业务后,也逐步将人群关系应用于风控反欺诈和失联管理等之中。

反欺诈是风控中的重要环节,下面我们来看一下基于图数据库怎么进行反欺诈。将一个新申请用户的手机号、银行卡号、身份证号等信息放到现有的图中进行查询, 如果在1度或2度关系内连接到欺诈用户相同手机号或者银行卡号,我们判断这个用户是欺诈用户的可能性很大。

失联管理属于贷后风控,借款人如果在借钱以后失联,我们可以利用图数据库搜索跟这个人有关系的其他联系人,从而联系到失联客户。


2

图数据库VS关系型数据库

关系型数据库RDBMS经过几十年的发展,出现了不少该领域的经典产品,如Oracle、MySQL和SQLServer。如今关系型数据库虽然依旧在存储领域处于统治地位,但是随着互联网大数据的发展,也暴露出一些它无法很好解决的问题:


比如处理复杂社交关系,关系型数据库需要建立大量关系表,来表达实体和实体之间关系,每层关系在查询时就需要join一次关系表。

图数据库和关系型数据库的不同,是可以将社交关系等数据描述为点(Vertex ) 和 边 (Edge)及他们的属性(Property),每一张图(Graph)都可以看做是一个结构化数据。

关系型数据库在表示两个实体之间的关系时,就要创建关联表。 而需要表示多个关系时就要创建多关联表,这些关联表不记录信息,仅仅用来表示关系。而在图数据库中,仅需要标明两个实体间的关系:data1->relation->data2。

在做关联分析时关系型数据库一旦会涉及到多个关系表,做联表查询需要运行很长时间,但是图数据库就会非常快速,因为基于图的高效遍历算法,只需运行几秒甚至几毫秒就能得出结论,速度上有数量级的提升。


3

图数据库的选择

目前主流图数据库有neo4j,orientdb, janusGraph/Titan等。

2018年2月的graph db排名


参见:https://db-engines.com/en/ranking/graph+dbms

neo4j是老牌的高性能图数据库,拥有最多的用户群体。neo4j允许用户通过其特有的Cypher语言来操作数据库,Cypher语言是专为图数据库设计的,可以非常高效地对数据库实例进行操作。单个neo4j实例可以存储数十亿节点和边,十字链表结构在内存足够大时性能非常不错,查找一个点的边或者边上的端点时,不需要再走一次B+树索引,而是直接指针指向下一度的物理地址。然而neo4j不支持分布式存储,集群也只是通过read replica进行读写分离,对于单机内存无法支持的数据量读写性能会急剧下降。

JanusGraph/Titan是一个分布式图形数据库,特别为处理大规模图而设计。通过使用第三方nosql存储(HBase,Cassandra等)来实现分布式读写,插件式索引架构可以使用 elasticsearch,solr等来建索引,接口上支持Tinkerpop Gremlin。由于底层接口都是用第三方开源实现,只是在分布式nosql上封装了一层图处理的逻辑,存储和查询严重分离,查询性能上有很大的提升的空间。依赖第三方的实现使JanusGraph的使用和维护成本也较高。

Orientdb 是目前发展较快的一个图数据库, 社区非常活跃。Orientdb的特点是轻量级,采用源生存储和索引,支持ACID事务, 支持multi-master 分布式读写,接口方面支持SQL查询, Tinkerpop Gremlin等多种开发接口,使程序员能很快上手。缺点是当前2.X版本是在大数据量的情况下还不够稳定。

唯品金融大数据团队最终选择了Orientdb作为金融风控的图数据库,不过在开发使用过程中Orientdb 坑也很多, 我们也在github上提了一些bug。

比如底层btree分裂时的null point exception的问题,参见:

https://github.com/orientechnologies/orientdb/issues/7897


4

OrientDB存储结构和缓存

OrientDB的高效数据读写依赖于其使用的SBTree结构,是一种基于B+树的实现,非叶子节点之间前后都有链接,在数据被删除时不会删除节点, 而是在新增节点时复用,优化了数据插入和范围查询。

树的Key由一个short型的clusterId和一个long型clusterPostion的组成, 像#21:84730,表示clusterId为21, clusterPostion为84730。

OrientDB本地存储引擎称为plocal engine,plocal engine基于以下原则实现:  磁盘数据被分割为固定大小的页面(page),单个page的操作为原子操作。任何数据变化在刷新到磁盘前都会先写入WAL日志,即便变化没有写入到磁盘服务器就崩溃了,数据也能从WAL日志恢复。

新版本的plocal引擎不再使用系统的MMAP作为缓存,而是有自己的缓存解决方案来控制缓存的生命周期, 它把缓存分为read cache和write cache。大大改善了大数据量情况下性能下降的问题,参见:https://github.com/orientechnologies/orientdb/issues/1202

参见:

https://orientdb.com/docs/2.2.x/plocal-storage-engine.html

https://github.com/orientechnologies/orientdb/issues/1202


5

基于Gremlin和SQL的查询

Orientdb提供了大量的接口, 其中最常用的就是Gremlin和sql。

Gremlin是Apache TinkerPop 框架下的图遍历语言。Gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的图的遍历或查询,大部分图数据库都支持Gremlin。示例图总共拥有12个节点(Vertex) 11条边(Edge)。

第1条命令g.V().has('uid', 1)表示查询字段uid的值为1的节点ID

gremlin> g.V().has('uid', 1)

==>v(user_id)[#21:0]


第2条命令g.v('21:8').outE('phone_use')表示查询节点ID为#21:8的 类型为phone_use,方向为OUT的边

gremlin> g.v('21:0').outE('phone_use')

==>e[#53:0][#21:0-phone_use->#33:0]

==>e[#56:0][#21:0-phone_use->#35:0


OrientDB支持类SQL查询,只要熟悉SQL的开发人员很容易就能上手,与上面Gremlin命令等价的SQL:

SQL

Gremlin

select @rid, @class from V where uid = 1

g.V().has('uid',   1)

select expand(OUTE('phone_use')) from #21:0

g.v('21:0').outE('phone_use')

orientdb {db=graph}> select @rid, @class from V where uid = 1

+----+-----+-------+

|#   |rid  |class  |

+----+-----+-------+

|0   |#21:0|user_id|

+----+-----+-------+

orientdb {db=graph}> select expand(OUTE('phone_use')) from #21:0

+----+-----+---------+-----+-----+

|#   |@RID |@CLASS   |out  |in   |

+----+-----+---------+-----+-----+

|0   |#53:0|phone_use|#21:0|#33:0|

|1   |#56:0|phone_use|#21:0|#35:0|

+----+-----+---------+-----+-----+


6

OrientDB批量写入优化

唯品金融在使用Orientdb的开发过程中遇到的最大问题,是数据库初始化时的批量写入速度较慢, 由于Vertex和Edge数量在10亿数量级,在没有优化的情况下,单台服务器写入完整数据需要几天。

经过下列优化后,写入速度得到明显改善:

尽量增加磁盘缓存storage.diskCache.bufferSize的大小可以大大提高写入速度

声明大量写入db.declareIntent( newOIntentMassiveInsert() );

关闭WAL日志-storage.useWAL=false,写速度提升1倍以上,写完后再打开WAL

edge边写入时尽量保持同一类型的边一起写,可以减少磁盘缓存的使用

并发写入时,每个线程独立从OrientGraphFactory获取连接,而不是共用一个连接,因为从OrientGraphFactory获取的连接是单个连接,而不是线程池

并发写入时遇到ONeedRetryException属于正常现象,重试即可

参见:

https://orientdb.com/docs/2.2.x/Performance-Tuning.html

优化后Vertex单机写入速度在优化后达到3万/秒, Edge单机写入速度达到1万/秒。


7

总结

唯品金融对图数据库的应用还刚刚起步, 目前已经在识别黑户等反欺诈领域发挥了一定的作用。不过随着数据量和业务复杂度的增加, 我们还会面临更多的挑战。

总的来说,目前图数据库还处在发展的初级阶段,主流图数据库各有优势和缺点,暂时还没有哪个图数据库可以在功能和性能上明显领先其他图数据库。这两年图数据库被使用的越来越多,开源社区也很活跃。但整体而言,图数据库还有很多问题未解决,许多技术还需发展,比如深度关联的实时查询效率,分布式大规模图的存储。

可以预见的是,随着互联网大数据的发展,基于的社交关系的业务应用也会越来越多,图数据库必将迎来高速的发展。



相关 [金融 大数据 团队] 推荐:

唯品金融大数据团队的图数据库实践

- -
在大数据时代,社交关系趋于复杂化,越来越多的互联网项目都和社交关系联系起来. 而对社交关系的良好契合,使得图数据库(Graph Database)在互联网领域迅速崛起. 通过图数据库可以高效地进行社交关系查询、分析和数据挖掘,以发现有价值的信息. 近几年互联网金融发展火热,用户对消费分期、现金贷等需求也越来越高.

互联网金融:大数据和技术为王的时代

- - 动点科技
(编者:本文作者李张鲁Dennis Roudenko,是青年投资家俱乐部发起人、华创资本资深分析师. 华创资本投资了10多家互联网金融公司,同时与IDG合有互联网金融投资基金,投资范围在20-2000万美金. 互联网金融本身只是一个概念,是泛指那些通过互联网和大数据手段来完成并优化的金融业务. 历来现有的机构都在尝试运用这些手段去优化自己的业务,但2012年这一领域才开始火起来是因为时机成熟了,大可归功于两大点:大数据的出现与技术的普及与应用.

BAT金融大数据体系拆解与价值挖掘

- - 虎嗅网
金融创新很大一部分原因在于大数据和金融之间的结合. 纵观BAT、京东、小米、万达、平安这些把触角伸到互联网金融领域的巨头,无一不是在大数据层面上有所布局. 大数据和金融相结合,几乎已经成为金融领域的通用做法. 谈数据必须先谈数据的完整度和价值含量. 就像煤矿一样,大数据中的价值含量、挖掘成本比数量更为重要.

成功大数据团队的“三驾马车”

- - IT经理网
对于那些着手尝试大数据应用的企业来说,成败的关键是组建一个优秀的大数据团队,但是不要指望一个“ 首席数据官(CDO)”或者数据科学家搞定所有的事情,成功的大数据团队需要三驾马车:一位业务分析师、一位机器学习专家和一位数据工程师. 随着大数据企业应用的火热开展,数据科学家正在闹人才荒,可谓一将难求,但是Lithium公司的首席科学家Michael Wu博士在接受IW 采访时表示:数据科学家的人才荒是因为人们对数据科学家的期望值过高,希望他即懂业务也懂最先进的大数据技术,这样的人才自然是奇货可居,而且不是每个企业有钱就能招募到的.

打造顶级大数据团队的几个偏方

- - IT经理网
出人意料的是,音乐人才、物理学家和工商管理人士能为大数据团队带来全新的视角. 你的企业正在打造数据科学团队吗. 首先,你应当从业务部门抽调专家来提出正确的问题. 然后考虑招募一些物理学家、音乐人才,当然,还有统计人才和计算机科学家. 这些才是顶级大数据团队的关键“配方”,至少管理咨询与技术顾问公司Booz Allen的战略创新部门副总裁乔什沙利文是这么认为的.

大数据团队必须设置的五种职位

- - CSDN博客云计算推荐文章
大数据团队必须设置的五种职位. 作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. 麦肯锡认为,大数据团队必须有五种职位:. 1)数据卫生员(Data Hygienists) - 这些人,确保数据总是干净的、准确的. 2)数据探索者(Data Explorers) - 这些人在大数据项目找到你真正需要的数据.

互联网金融产品如何利用大数据做风控?

- - 知乎每日精选
由于互联网金融涉及货币发行(比特币)、第三方支付、投资理财(网络银行、保险、基金、证券、财富管理)、信贷(P2P、众筹、网络微贷)、征信等等,各个领域的风控策略并不尽相同,不能一概而论,下面讨论只能涵盖了常见的风控策略. 个人认为“大数据”除了强调数据的海量外,更重要的在于用于风控的历史数据的广度和深度,其中:.

如何利用大数据做金融风控?| 硬创公开课

- - 雷锋网
随着金融科技、科技金融等概念的热起,以及互联网金融、无金融服务群体的刚性需求下,大数据风控技术也获得越来越广泛地重视和应用. 但是,如何利用大数据、机器学习等前沿技术做金融风控. 如何通过海量数据与欺诈风险进行博弈. 本次硬创公开课我们邀请了同盾科技首次风险官董骝焕博士为我们解答. 董骝焕是南开大学概率统计博士,他博士毕业后加入中科院,2007年加入IBM/ ILOG从事决策模型在各种业务问题中的应用.

剖析大数据在金融行业的典型应用方向

- - IT瘾-bigdata
随着互联网新金融模式的兴起,传统的银行金融业面临着诸多挑战. 而大数据技术的发展和广泛应用,无疑是提供了一座极具价值的“金矿”,借助大数据技术,将分散在金融企业服务网络与IT系统中的海量信息与基于业务驱动的外部数据源融合,并结合金融行业的特点,以金融业务为核心,提升客户体验和客户价值、优化运营流程、预测营销效果、提升经营管理水平.

专访QQ大数据团队,谈分布式计算系统开发

- - 互联网 - ITeye博客
NoSQL是笔者最早接触大数据领域的相关知识,因此在大家都在畅谈Hadoop、Spark时,笔者仍然保留着NoSQL博文的阅读习惯. 在偶尔阅读一篇Redis博文过程中,笔者发现了. jacksu的个人博客,并在其中发现了大量的分布式系统操作经验,从而通过他的引荐了解了QQ成立之初后台3个基础团队之一的QQ运营组,这里我们一起走进.