ToB企服应用市场:ToB评测及商务社交产业平台
标题:
AI解码:开源图数据库Nebula Graph解析
[打印本页]
作者:
大连全瓷种植牙齿制作中心
时间:
2024-10-11 23:57
标题:
AI解码:开源图数据库Nebula Graph解析
随着知识图谱、GraphRAG 等 AI 技术的发展,图数据库也受到日益增多的关注。
本日,我们来“揭秘”一个开源图数据库项目
Nebula Graph
,它的 GitHub 地点是:
https://github.com/vesoft-inc/nebula
在解析项目中,我们通常需要借助 AI 软件来解析,这次我用到的这款软件是
Eagle DevAgent(简称Eagle)
使用网址:https://eagle.capitalren.com/
Nebula Graph项目介绍
Nebula Graph 是一款开源的、分布式的、易扩展的
原生图数据库
,能够承载包罗数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。
关于图数据库
图数据库是专门存储巨大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上。
图数据库适合存储大多数从实际抽象出的数据类型。世界上险些全部范畴的事物都有内在联系,像关系型数据库如许的建模体系会提取实体之间的关系,并将关系单独存储到表和列中,而实体的类型和属性存储在其他列乃至其他表中,这使得数据管理费时费力。
Nebula Graph 作为一个典型的图数据库,可以将丰富的关系通过边及其类型和属性天然地出现。
用 Eagle 解读 Nebula Graph
我们把 Nebula Graph 这个开源项目的 GitHub 网址发送给 Eagle。 Eagle 很清晰的把项目概况、重要特性、重要目录和文件、使用的模式或框架等开端的分析结果列了出来。
I 对项目团体解读
Q:解读一下这个项目:https://github.com/vesoft-inc/nebula
Eagle 对整个项目做了概述
I 对技术架构解读
Q:此项目的架构是什么?
联合图示,及笔墨说明把Nebula Graph的详细架构和交互流程做了摆列
I 对某技术点解读
通过上面的架构图,我们知道 Nebula Graph 在数据及元数据存储中都用到了Raft 算法。
Raft 算法是分布式体系中包管数据存储可靠性和同等性的重要算法,但差异的体系对 Raft 的具体实现迥异,这也是导致体系可用性和性能差异的关键所在,Nebula Graph 是怎样实现 Raft 算法的呢?我们把这个题目抛给了 Eagle,下面就来看看TA的精彩回答吧:
Q:解释一下:https://github.com/vesoft-inc/nebula的Raft算法实现
在代码库中定位到关键技术点的实现
Eagle还会列出关键实现代码,例如
领导者推举:
folly::Future<bool> RaftPart::leaderElection(bool isPreVote) {
using namespace folly;
bool expected = false;
if (!inElection_.compare_exchange_strong(expected, true)) {
return false;
}
cpp2::AskForVoteRequest voteReq;
decltype(hosts_) hosts;
if (!prepareElectionRequest(voteReq, hosts, isPreVote)) {
std::lock_guard<std::mutex> g(raftLock_);
role_ = Role::FOLLOWER;
leader_ = HostAddr("", 0);
inElection_ = false;
return false;
}
auto proposedTerm = voteReq.get_term();
auto resps = ElectionResponses();
stats::StatsManager::addValue(kNumStartElect);
if (hosts.empty()) {
auto ret = handleElectionResponses(resps, hosts, proposedTerm, isPreVote);
inElection_ = false;
return ret;
} else {
folly::Promise<bool> promise;
auto future = promise.getFuture();
auto eb = ioThreadPool_->getEventBase();
collectNSucceeded(
gen::from(hosts) |
gen::map([eb, self = shared_from_this(), voteReq](std::shared_ptr<Host> host) {
return via(eb, [voteReq, host, eb]() -> Future<cpp2::AskForVoteResponse> {
return host->askForVote(voteReq, eb);
});
}) |
gen::as<std::vector>(),
quorum_,
[hosts](size_t idx, cpp2::AskForVoteResponse& resp) {
return resp.get_error_code() == nebula::cpp2::ErrorCode::SUCCEEDED &&
!hosts[idx]->isLearner();
})
.via(executor_.get())
.then([self = shared_from_this(), pro = std::move(promise), hosts, proposedTerm, isPreVote](
auto&& t) mutable {
pro.setValue(
self->handleElectionResponses(t.value(), std::move(hosts), proposedTerm, isPreVote));
});
return future;
}
}
复制代码
Eagle:“这个方法发起领导者推举。它起首准备推举哀求,然后发送哀求并等待响应。如果获得多数票,它将成为领导者。”
关键实现细节也以代码出现的形式进行了解读
Q:Nebula Graph 的 Raft 算法实现中的领导者(leader),是集群中的某个节点吗?还是说对数据进行分片,每个分片会以多个副本存在几个节点上,每个节点都有大概成为差异数据分片的leader?
Eagle 对 Nebula Graph 中的数据分片机制及其与 Raft 算法的关系做了详细解释,回答了用户的疑问。
Eagle 还对要点进行了简明扼要的总结,让用户一目了然。
Eagle 按照用户提示,给出了关键代码。
小tips
Eagle 除了可以直接提交 GitHub 开源项目地点外,也可通过上传开源项目 Zip 压缩包的形式进行提问,欢迎大家进行试用。
有更多想要了解的也可以
关凝视频号:码力一哥
。十一期间还有直播,可以和老师 1V1 交换 AI 大模子编程的相关题目,助力职场提升!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4