获得徽章 0
- #本周看点解读##图数据库# 不知道你对 Nebula Graph 存储引擎有疑问否,这里 Pick 了一个【存储引擎】相关问题和你分享下这块内容,内容摘自 2020 第 12 期本周看点,文章阅读传送门:
zhuanlan.zhihu.com
文字摘要
【提问】Nebula Graph 的存储引擎,基于 RocksDB 加了什么能力吗?
【回复】RocksDB 只是 nebula storaged 所支持的一种单机存储引擎, 目前对于一台 storaged, 可以管理多个 rocksdb instance(每块盘一个 instance), 多个 storaged 之间, 利用 RAFT 实现数据的多副本强一致。
另外,nebula storaged 还支持 space 概念, 不同的 space 之间数据隔离, 使用不同的 RocksDB instance。
最后,#依旧是盼望你关注的 GitHub 地址:0x7.me
展开评论点赞 - #本周看点解读##图数据库#来来来,学习下【存储架构方面】的内容,内容摘自 2020 第 12 期本周看点,文章阅读传送门:
zhuanlan.zhihu.com
文字摘要
【提问】有几个存储架构的问题问一下:
1. 因为已经提前向所有 leader partition 发送了 write blocking 请求,所以此时数据库是只读状态的。在创建 Snapshot 过程中,有数据写入是否会失败?还是会 Pending,等 Snapshot 创建成功之后,触发写?
2. 假设我在主集群定时创建 Snapshot 备份到备集群,主集群有三台机器,是不是对应的备份策略就是主集群的 M1 备份到备集群的 M1,主 M2 -> 备 M2,主 M3 -> 备 M3,也就是说主备需要保证机器数一致,而且数据备份在机器层面是一对一的,这样才可以通过拷贝 Snapshot 来实现主集群数据在备集群恢复,从而实现主备的切换。
【回复】回答问题1,当 snapshot 开始时,会首先出发各个part leader 的 writeBlocking。在这个过程中如果有新的写入请求,将会被blocking,返回一个错误信息。直到 Snapshot 过程完成,才允许继续执行写请求。回答问题 2,是的,生产集群需要和目标恢复集群保持相同的架构,也就是 M1->M1,M2->M2, M3->M3。
最后,#今天你关注 GitHub 了吗?Nebula Graph GitHub 地址:0x7.me
展开评论点赞 - #图数据库#今天我们【从 INDEX 学习下图数据库 Nebula 的存储架构】,内容摘自文章《分布式图数据库 Nebula Graph 的 Index 实践》,文章阅读传送门:
juejin.im
从架构图可以看到,每个Storage Server 中可以包含多个 Storage Engine, 每个 Storage Engine中可以包含多个Partition, 不同的Partition之间通过 Raft 协议进行一致性同步。每个 Partition 中既包含了 data,也包含了 index,同一个点或边的 data 和 index 将被存储到同一个 Partition 中。
最后,这里是等你点击交流的 GitHub 地址:0x7.me
展开评论点赞 - #本周看点解读# #图数据库# 今天来和 NG 学习下【蓄水池】知识点
数据库在社交网络等业务场景中会遇到 "超级大点" 问题,点的边可能有千万条,业务往往只需要 K 条就能满足其算法精度。Nebula 支持 Reservoir Sampling,在只遍历一遍数据,时间复杂度 O(N) 的情况下,随机的抽取 K 个元素,每个元素被抽取的概率都是 K/N,并且空间复杂度 O(K)。
Nebula Graph 蓄水池算法的使用方法:在 storage 配置文件中设置 enable_reservoir_sampling 为 true 打开开关采样开关, max_edge_returned_per_vertex 配置采样数,示例如下图
最后,#这里是期望你关注的 GitHub 地址:0x7.me
展开赞过评论2 - 赞过评论2
- #图数据库# #图数据库小知识# 今天来分享一个技术思考——「图数据库考虑做存储计算分离」背后的原因是什么,本条内容摘录于 Nebula Graph 嘉年华 2019 活动现场,实录 B 站视频传送门:
t.cn
🙇♀️ 下面请看文字回复:
基于之前的项目经历。存储计算不分离的分布式架构,水平扩展会比较不方便。举个例子,在好友关系这种场景——基于好友关系查询再做一些排序和计算,在某个节点查询执行过程中需要去其他节点获取数据,或者将某个子计算交给其他节点,如果执行过程中需要的数据存储在本地,相较存储计算分离效率可能会高;但当涉及到和其他节点通信问题时,增加硬盘,增加机器,但对整体计算能力提升不大,而且扩容的时候很麻烦。如果存储计算分离,计算和存储一对一,不存在节点越多网络通讯开销越大的问题。
此外,我们在存储层提供基于图的查询接口,但不具备运算能力,方便对接外部的批量计算,比如 Spark,可以将我们的图存储层当作为图索引存储,直接批量扫描、遍历图自行计算,这样操作更灵活。存储层支持做一些简单的过滤计算,比如找寻 18 岁好友等过滤操作。
最后,Nebula Graph 的 GitHub 地址等你来 Pick0x7.me
展开赞过评论1 - #图数据库# #图数据库小知识# 这里是许久未见的小 Tips 剧场 🙇♀️ 今天来和你说下「传统数据库通过设计良好的数据结构是不是可以实现图数据库的功能」问题,本条内容摘录于 Nebula Graph 嘉年华 2019 活动现场,实录 B 站视频传送门:
www.bilibili.com
请看文字回复:图数据库相对传统数据库优化点在于,数据模型。传统数据库是一个关系型,是一种表结构做 Join,但存储结构表明了很难支持多度拓展,比如一度好友,两度好友,一度还支持,使用一个 Select 和 Join 就可完成,但是二度查询开销成本较大,更别提多度 Join 查询开销更大。图数据库的存储结构为面向图存储,更利于查询多度关系。特别的,有些图上特有的操作,用关系型数据库比较难实现和表达,比如最短路径、子图、匹配特定规则的路径这些。
最后,这是 2020 年需要你关爱的 GitHub:0x7.me
展开评论点赞 - 评论点赞
- #文档解读# 昨天说到如何创建图空间
weibo.com 今天 NG 小妹来带你学习下如何「创建点类型」和边类型,文档见:
0x7.me B站对应教学视频见:
www.bilibili.com 和
www.bilibili.com
当然创建类型的时候,上篇提到的神奇的 `IF NOT EXISTS` 字段除了判断图空间是否存在之外也会判断你创建的点 / 边类型是否存在
下面 NG 小妹带你如何使用 CREATE 语法创建我们俩彼此的 friend 关系,👀 当然也支持你将 Gakki 酱定义成 sweetheart(图2)#这里是希望你关注的 GitHub 地址:0x7.me
展开赞过评论1 - #文档解读# 继快速入门之后和 FAQ 之后,我们来学习下图数据库的 CRUD 的 C——Create 使用方法,使用图数据库之前,你需要有一个图空间,用来存放数据,不同的图空间是物理隔离的,创建图空间的方法见图1,详细文档见:
0x7.me
对应 B站视频教程:bilibili.com/video/av79092766
️这里参数说明
- `IF NOT EXISTS` 字段:这个关键字会自动检测对应的图空间是否存在,如果不存在则创建新的,如果存在则直接返回。
- `partition_num` :表示数据分片数量。默认值为 100。
- `replica_factor`:表示副本数量。默认值是 1,集群建议为 3
最后,这里是 2019 年求关注 GitHub 的 NG 小妹:0x7.me [求关注]
展开评论点赞