共计 2410 个字符,预计需要花费 7 分钟才能阅读完成。
本文首发于 Nebula Graph Community 公众号
因为图数据库的增长趋势始终位列前茅,每年都有媒体预测往年是“图年”。作为已经的图数据库从业者,Nebula Hackthon 2021 的参赛队伍临江仙的队长王二铁(王建奎),始终在思考,为什么长期火爆的图数据库市场,始终没有真正引爆。在 2018 年图数据库输给了区块链,2019 年又遇到了 5G,随后疫情开始了。在王二铁看来图数据库目前次要还是面向 toB、toG 的市场,在 toC 畛域,简直没有图数据库相干的案例,这也是为什么图技术难以被公众所熟知的起因。
于是,一个新意的 idea 冒出了,这将是一个十分好,而且还算好玩的 C 端案例。它是什么呢?便是本次介绍的「一首新诗带来的图数据库大冒险」。
念起
有次二铁陪同小朋友上画画班,闲暇之余刷到了苏轼的《临江仙 风水洞作》:
四大素来都遍满,此间风水何疑。故应为我发新诗。幽花香涧谷,寒藻舞沦漪。借与玉川生两腋,天仙未必相思。还凭流水送人归。层巅余落日,草露已沾衣。
因为读不懂这首诗词,领会不到其中的意境美。作为老二次元的王二铁借由动漫迷中的「圣地巡礼」,想到用诗词巡礼的形式 – 回到古诗词的创作地,亲自体验诗词的意境和美景。联合图数据库,把中国古诗词放到图谱里,通过【作者搜寻】关联出他所有的诗词,并关联出所有的创作地点,这就造成了一条【诗词巡礼】的游览路线;通过【地点搜寻】关联出当地所有的古诗词创作地,这就造成了一个充斥文化气味的诗词城市。
基于路线、地理位置也能够衍生出更多的玩法。例如一个作者的城市脚印图,兴许就是他的升迁史;同一个地点,如果有多个作者留有诗篇,那能够相互印证和学习。联合图,还有更多的玩法能够持续开掘。
而除了「圣地巡礼」这一主性能之外,二铁还加了另外一个性能 – 本命诗。idea 也是来源于一首诗词,王之涣的《凉州词》:
黄河远上白云间,一片孤城万仞山。羌笛何须怨杨柳,春风不度玉门关。
一首蕴含他家小朋友名字的新诗,忽然让小朋友有了学习该诗的趣味,于是他决定退出本命诗,新诗和人亲热、建设相熟感之后,成为他记忆的一部分。
圆梦
新诗大冒险我的项目实现思路次要是将中国古诗词放到图谱里,诗词的图谱须要蕴含作者(姓名、朝代、字、号)、诗词(诗词名、内容、创作地址、经度、维度)、城市,其余再蕴含现代城市和古代城市的映射、今人朋友圈等等,造成一张残缺的图谱。
数据源,须要波及到诗词库、百度汉语、游览网站、坐标提取零碎等等;通过数据加工、数据聚合以及图数据库的建模,将数据导入图数据库中,一个简略的诗词图谱就造成了。而后通过 Java Web 提供接口服务,通过小程序提供用户服务。整体流程就通了。
整体实现次要分成 3 步:
- 数据处理,数据处理是整个我的项目最难的点。这部分须要首先明确产品层面的需要,依据需要进行图数据库建模,再依据建模后果反推须要哪些数据撑持,而后寻找数据源,并进行数据采集和 ETL 解决。最终造成图数据库中须要的几个文件,例如:vertex- 诗词.csv、vertex- 作者.csv、vertex- 城市.csv、edge- 诗词 - 作者.csv、edge- 诗词 - 城市.csv。
- 零碎开发,零碎开发是把第一步建设的图谱,理论的在图数据库中创立并导入数据的过程。因 Nebula 齐备的产品性能和周边工具,使得这一步的开发比较简单。我的项目中应用到了 Nebula Graph 图数据库进行数据存储,Nebula Graph Studio 进行图数据库建模和语法调试、Nebula Graph Importer 进行数据导入,Nebula Graph Java Client 进行 API 服务的开发。
- 小程序开发,零碎开发之后会造成几个 API,小程序侧调用 API 端口,而后进行前端的可视化展现。其中须要地图的 SDK,联合收集到的坐标,就能够在地图上展现出诗词的创作地点。
这个我的项目看似很简略,但暗藏玄机。整个我的项目实现起来会遇到 2 个难点。其中一个还是数据,因为零碎自身并不简单,代码量并不多,外围还是对数据的了解,以及一个好的产品 sence。当然也遇到一个天坑问题,就是一些好的古诗词找不到创作地点或者历史上存在争议,比方陈子昂的《登幽州台歌》。第二个难点算技术上的广度,就是从一个 idea,到产品化实现,要相熟一整条技术路线。其实也并没有多深的技术,然而须要一种不甘于只做螺丝钉的独立开发思维。
他说
一首新诗带来的图数据库大冒险的有意思的点除了它的 idea 之外,和技术实现之外。更多的产品细节也是让人眼前一亮,像是地理位置的解决形式。
拿临江仙·风水洞作为例,故事标志性坐标便是风水洞,如何定位这个风水洞呢?各地都有「风水洞」,依据苏轼的过往经验,最初匹配定位到了杭州锦绣风水洞。通过抽取风水洞的地理坐标,将这首新诗还原到了该诗圣地。而这块的实现也经验了一番小挫折,大家都晓得 Nebula Graph v2.6 开始反对的 GEO 性能,一开始二铁他们思考要不要用 GEO,而不是存经纬度。但转念一想,我的项目自身并不需要用到弱小的 Nebula Graph GEO 性能,加上我的项目赶时间(较量设有代码截止提交工夫),故没尝试新的 GEO 性能。
说到后续的我的项目布局,王二铁示意,“图数据库中更外围的最短门路、三角计数、社区发现等算法并没有用到,大家能够施展想想来给咱们提想法,当然更欢送本人来理论体验和实现”。
续缘
戳链接可查看其我的项目设计文稿:https://github.com/Jerrick/a-tour-of-poetry/blob/main/README.md。BTW,二铁曾作客 Nebula Graph Podcast 分享他本次实际的心路历程,浏览本文的你能够戳链接听该期 Podcast 哦:http://xima.tv/1_etO1vh?_sonic=0
交换图数据库技术?退出 Nebula 交换群请先填写下你的 Nebula 名片,Nebula 小助手会拉你进群~~
关注公众号