2024我用NebulaGraph干了啥
先分享参加线下活动的ppt:
探秘“图智能”在风控上的方法论与实践案例.pdf (9.9 MB)
图技术与大模型结合的能力方向与优势点.pdf (6.9 MB)
图技术在金融行业的应用.pdf (9.0 MB)
一、怎么接触了NebulaGraph?
今年,我在探索图数据库的领域时,偶然间接触到了NebulaGraph。在此之前,我一直在用的是Neo4j,它是一个非常强大的图数据库,但在处理超大规模数据集时,我遇到了一些性能瓶颈。NebulaGraph作为一个开源的分布式图数据库,以其在处理千亿节点万亿条边的超大数据集上的实时毫秒级查询能力吸引了我。因此,我决定尝试NebulaGraph,看看它是否能更好地满足我的需求。
原来用的Neo4j,为啥换NebulaGraph
论坛大佬分享的性能测试总结
查询语言对比
在使用Neo4j的过程中,我深感其在小规模数据集上的强大,但随着数据量的增长,性能问题逐渐显现。Neo4j的单机架构在扩展性上有所限制,尤其是在需要处理PB级别的数据时。相比之下,NebulaGraph的分布式架构和对超大规模数据集的支持让我看到了解决这些问题的希望。此外,NebulaGraph的自研代码比例100%,这意味着它在适应特定需求时更加灵活。因此,我决定切换到NebulaGraph,以期获得更好的性能和扩展性。
二、我用NebulaGraph做图谱检索
在金融行业,图谱检索是一个非常重要的应用场景。我使用NebulaGraph进行图谱检索的思路如下:
给出NebulaGraph做图谱检索的思路
- 数据模型设计:首先,我根据业务需求设计了图的数据模型,明确了节点和边的关系,以及它们之间的属性。例如,在反欺诈场景中,我定义了账户、交易、设备等节点,以及它们之间的关联关系。
ngql
# 创建节点空间及属性
CREATE SPACE my_space(vid_type=FIXED_STRING(30));
USE my_space;
CREATE TAG account(name STRING, balance INT);
CREATE TAG transaction(amount INT, time TIMESTAMP);
CREATE EDGE transfer(from_account STRING, to_account STRING, time TIMESTAMP);
- 图谱构建:接着,我利用NebulaGraph的图查询语言nGQL进行数据的插入和图谱的构建。通过nGQL,我可以灵活地定义节点和边,以及它们的属性,构建出复杂的图结构。
ngql
# 插入数据
INSERT VERTEX account(name, balance) VALUES "account1":("John Doe", 1000);
INSERT VERTEX transaction(amount, time) VALUES "transaction1":(100, "2024-01-01 12:00:00");
INSERT EDGE transfer(from_account, to_account, time) VALUES "account1"->"transaction1":("account2", "2024-01-01 12:00:00");
- 实时查询优化:针对实时查询的需求,我优化了图的索引和查询语句,确保了查询的效率。例如,我为频繁查询的节点和边创建了索引,以加快查询速度。
ngql
# 创建索引
CREATE TAG INDEX accountIndex ON account(name);
- 图算法应用:在NebulaGraph中,我应用了各种图算法,如社区发现、路径分析等,以发现数据中的模式和关联。这些算法帮助我识别出了潜在的风险和欺诈行为。
ngql
# 使用Go语言调用图算法
CALL gds.communityDetection("my_space", "account", "follows", 0.6, 3);
三、我用NebulaGraph做问答
图数据库的另一个强大应用是问答系统,我使用NebulaGraph构建了一个基于图的问答系统。
给出NebulaGraph做问答的思路
- 知识图谱构建:我首先构建了一个包含大量实体和关系的知识图谱,这些实体和关系涵盖了问答所需的知识点。例如,在金融领域,我构建了一个包含公司、产品、服务等实体的知识图谱。
ngql
# 创建知识图谱的节点和边
CREATE TAG company(name STRING, industry STRING);
CREATE TAG product(name STRING, price INT);
CREATE EDGE provides(from_company STRING, to_product STRING);
- 自然语言处理:然后,我利用自然语言处理技术将用户的问题转化为图查询语言,以便在图数据库中检索答案。例如,将“哪家公司的理财产品收益最高?”转化为图查询语句。
ngql
# 模拟自然语言处理后的图查询
MATCH (p:product)-[:provides]->(c:company) WHERE p.name CONTAINS "理财产品" AND p.price > 5000 RETURN c.name;
- 图查询执行:通过NebulaGraph执行图查询,找到与问题相关的实体和关系,从而得到答案。NebulaGraph的高性能查询能力确保了问答系统的响应速度。
ngql
# 执行图查询
LOOKUP ON product WHERE product.name == "高收益理财产品";
- 结果整合与反馈:最后,我将查询结果整合成自然语言回答,并提供给用户。同时,我也收集用户的反馈,以不断优化问答系统的性能。
2024年第一次去参加了一个技术类的线下沙龙
今年,我有幸参加了一个技术沙龙,非常感谢悦数图数据库、海南数造科技、普适智能的老师们详细的分享。老师们分享了基于图的一站式数据研发与治理平台、探秘“图智能”在风控上的方法论与实践案例、图技术与大模型结合的能力方向与优势点、图技术在金融行业的应用等内容,给我打开了眼界,打开了思路。
尤其是图技术与大模型结合的能力方向与优势点,让我深刻认识到图数据库在处理复杂关系和大规模数据方面的巨大潜力。这些分享不仅加深了我对NebulaGraph的理解,也为我在使用NebulaGraph时提供了新的思路和方法。通过这些学习和实践,我相信在2025年,我能够更好地利用NebulaGraph解决实际问题,提升我的工作效率和质量。