图数据库【免费下载链接】nebulaA distributed, fast open-source graph database featuring horizontal scalability and high availability项目地址https://gitcode.com/gh_mirrors/nebul/nebula点击查看免费下载NebulaGraph 是一款开源的分布式图数据库面向千亿顶点、万亿条边的超大规模数据集设计支持毫秒级查询延迟与水平扩展。本文以仓库中的 README-CN.md 为骨架结合内核源码、默认配置文件与运维脚本系统讲解 NebulaGraph 的定位、架构设计、安装方式、核心配置与服务管理帮助你从概念理解走向实际部署与调优。NebulaGraph 是什么NebulaGraph 是一款开源的分布式图数据库核心能力是处理千亿个顶点和万亿条边组成的超大规模图数据并在这一量级上提供低延迟的图查询。它被广泛用于社交媒体、实时推荐、网络安全、金融风控、知识图谱、人工智能等大规模生产场景其周边生态项目覆盖数据导入、可视化、监控与客户端等多个环节。从仓库的版本定义src/interface/common.thrift 中const binary version 3.0.0可以看出当前仓库对应的是 3.x 版本内核。自 v2.6.0 起NebulaGraph 内核代码统一收敛到单一仓库即当前仓库维护此前分散在 graph/storage/common 三个仓库的历史版本已归档。核心特性NebulaGraph 的特点可以归纳为以下七点每一项都能在仓库源码与配置中找到对应实现全对称分布式架构NebulaGraph 的所有服务组件元数据服务、存储服务、计算服务都遵循对称设计集群中的每个节点职责对等不存在单点瓶颈角色。这种设计使得集群可以按需横向扩展而不需要为某个特殊角色预留专用节点。存储与计算分离从进程模型看计算层与存储层是完全独立的守护进程graphd查询计算引擎负责接收客户端请求、解析与执行 nGQL/openCypher 语句入口为 src/daemons/GraphDaemon.cppmetad元数据管理服务负责图空间、Schema、用户权限、集群拓扑等元信息的存储与分发入口为 src/daemons/MetaDaemon.cppstoraged数据存储服务负责图数据的实际落盘、多副本与分区管理入口为 src/daemons/StorageDaemon.cpp。存储与计算分离意味着计算层可以独立扩缩容以应对查询负载变化存储层则专注于数据可靠性与吞吐二者通过 Thrift RPC定义见 src/interface/graph.thrift协作。水平可扩展性存储层按**图空间Graph Space—分区Partition**的粒度切分数据。metad 的默认配置conf/nebula-metad.conf.default中# The default number of parts when a space is created --default_parts_num100 # The default replica factor when a space is created --default_replica_factor1创建图空间时数据会被划分为多个分区分区可以随节点加入而重新分布从而实现数据与负载的水平扩展。storaged 的--data_path支持逗号分隔多个磁盘路径每个路径对应一个 RocksDB 实例conf/nebula-storaged.conf.default进一步支撑存储容量与 IO 的横向扩展。RAFT 协议下的数据强一致NebulaGraph 使用 RAFT 共识协议保证多副本数据强一致。存储层的 RAFT 实现位于 src/kvstore/raftex/相关调优参数出现在 storaged 配置中######### Raft ######### # Raft election timeout --raft_heartbeat_interval_secs30 # RPC timeout for raft client (ms) --raft_rpc_timeout_ms500 ## recycle Raft WAL --wal_ttl14400同时 src/interface/common.thrift 定义了完整的 RAFT 错误码体系如E_RAFT_LOG_GAP、E_RAFT_TERM_OUT_OF_DATE、E_RAFT_WAL_FAIL等覆盖日志滞后、任期过期、WAL 写入失败等一致性场景便于在运行期定位问题。支持 openCypherNebulaGraph 的查询语言 nGQL 兼容 openCypher支持MATCH、GO、LOOKUP等图查询语法。查询语言的前端解析由 src/parser/parser.yy 与 src/parser/scanner.lex 实现执行计划相关的数据结构定义在 src/interface/graph.thrift如PlanDescription、PlanNodeDescription可通过PROFILE查看每个执行算子的耗时与行数统计。用户鉴权NebulaGraph 提供角色权限控制。graphd 配置conf/nebula-graphd.conf.default中########## authentication ########## # Enable authorization --enable_authorizefalse # User login authentication type, password for nebula authentication, ldap for ldap authentication, cloud for cloud authentication --auth_typepasswordauth_type支持password内置鉴权、ldapLDAP 鉴权、cloud云鉴权三种模式。认证失败等场景的错误码同样在 src/interface/common.thrift 中定义如E_BAD_USERNAME_PASSWORD、E_SESSION_INVALID、E_SESSION_TIMEOUT。支持多种类型的图计算算法仓库在 src/common/algorithm/ 提供图算法基础组件src/graph/executor/algo/ 中实现了多种图计算执行器支撑 PageRank、连通分量、最短路径等常见图算法的执行。此外还支持通过 C 编写 UDF用户自定义函数仓库 udf/ 目录下提供了standard_deviation示例graphd 配置中对应# enable udf, written in c only for now --enable_udftrue # set the directory where the .so files of udf are stored, when enable_udf is true --udf_path/home/nebula/dev/nebula/udf/内核架构NebulaGraph 内核采用典型的三层服务架构各服务职责如下服务进程名默认端口职责查询引擎nebula-graphd9669接收客户端连接解析 nGQL/openCypher生成并调度执行计划元数据服务nebula-metad9559管理图空间、Schema、用户权限、分区与集群拓扑存储服务nebula-storaged9779存储图数据通过 RAFT 维护多副本强一致三个守护进程的启动逻辑高度一致以 src/daemons/GraphDaemon.cpp 为例启动流程包括解析命令行参数校验--flagfile指定的配置文件缺失时打印Usage: binary --flagfile config_file并退出通过 src/common/process/ProcessUtils.cpp 检查 pid 文件、防止重复启动并按--daemonize决定是否转为守护进程校验--local_ip合法性加载时区数据src/common/time/TimezoneInfo.cpp启动 HTTP 监控服务WebService默认端口 19669/19559/19779对应 graphd/metad/storaged注册 SIGINT/SIGTERM 信号处理优雅停机。metad 进程src/daemons/MetaDaemon.cpp还负责初始化 KV 存储、初始化 god 用户、启动 JobManager管理 COMPACT/FLUSH/REBUILD INDEX 等后台任务。安装方式NebulaGraph 的安装途径包括下载安装包从官网下载页获取对应平台的二进制安装包解压后即可使用源码编译按官方文档指引在编译机安装 CMake、GCC 等工具链后通过 third-party/install-third-party.sh 安装第三方依赖folly、thrift、rocksdb、gflags、glog 等对应 cmake/Find*.cmake 系列查找脚本随后执行 CMake 构建容器部署仓库 docker/ 目录提供了Dockerfile、Dockerfile.graphd、Dockerfile.metad、Dockerfile.storaged等镜像构建文件可分别构建各服务镜像。源码编译的顶层构建入口是根目录的 CMakeLists.txt编译产物nebula-graphd、nebula-metad、nebula-storaged会输出到bin/目录。快速使用NebulaGraph 支持在云上托管的云服务或本地快速体验。本地部署的最小形态是单机三进程先启动 metad再启动 storaged最后启动 graphd如果希望以单进程方式体验可以编译nebula-standalone对应配置文件 conf/nebula-standalone.conf.default它将三服务合并到单进程内适合开发与试用。部署完成后通过客户端连接 graphd 的 9669 端口执行 nGQL。以最基本的建库建表为例# 创建图空间 CREATE SPACE basketballplayer(partition_num10, replica_factor1, vid_typefixed_string(32)); USE basketballplayer; # 创建点类型Tag与边类型Edge Type CREATE TAG player(name string, age int); CREATE EDGE serve(start_year int, end_year int);创建图空间时的vid_type、partition_num等参数与 metad 侧默认值--default_parts_num、--default_replica_factor相互配合共同决定数据的分片与副本布局。配置文件详解配置文件采用--flagvalue的 gflags 格式通过--flagfile传入。仓库为每个服务提供了.default与.production两套模板。下面按模块拆解三个服务的核心配置。graphd 关键配置conf/nebula-graphd.conf.default基础与网络--daemonizetrue --pid_filepids/nebula-graphd.pid --meta_server_addrs127.0.0.1:9559 --local_ip127.0.0.1 --port9669 --listen_netdevany --listen_backlog1024 --reuse_portfalse其中--meta_server_addrs是 metad 地址列表逗号分隔支持多副本地址--local_ip在分布式部署或需要远程访问时必须改为本机对外地址而不能使用回环地址。线程模型--num_accept_threads1 --num_netio_threads0 --num_worker_threads0 --num_max_connections0num_netio_threads与num_worker_threads设置为 0 时表示取 CPU 核数见 src/daemons/GraphDaemon.cpp 中的std::thread::hardware_concurrency()逻辑。num_max_connections0表示不限制连接数每个网络线程的最大连接数 num_max_connections / num_netio_threads。查询与超时--max_allowed_query_size4194304 # 单条语句最大字节数 --accept_partial_successfalse # 只读请求是否容忍部分成功 --slow_query_threshold_us200000 # 慢查询阈值微秒 --storage_client_timeout_ms60000 # 存储客户端超时毫秒 --session_idle_timeout_secs28800 # 会话空闲超时取值范围 [1, 604800] --client_idle_timeout_secs28800 # 连接空闲超时内存与性能--system_memory_high_watermark_ratio0.8 --memory_tracker_limit_ratio0.8 --memory_tracker_untracked_reserved_memory_mb50 --memory_purge_enabledtrue --memory_purge_interval_seconds10 --max_job_size1 --min_batch_size8192 --path_batch_size10000--enable_optimizertrue开启查询优化器配合 src/graph/optimizer/ 中的规则体系完成执行计划优化。metad 关键配置conf/nebula-metad.conf.default--port9559 --meta_server_addrs127.0.0.1:9559 # 多 metad 副本时填写各自地址 --data_pathdata/meta # 元数据存储路径仅支持单路径 --default_parts_num100 # 创建图空间时的默认分区数 --default_replica_factor1 # 默认副本数 --heartbeat_interval_secs10 # storaged/graphd 心跳间隔 --agent_heartbeat_interval_secs60 --ws_http_port19559 --ws_storage_http_port19779metad 基于 KV 存储维护全部元信息数据写入 src/meta/MetaServiceUtils.cpp 定义的键空间并通过 src/meta/ActiveHostsMan.cpp 依据心跳维护在线节点列表。storaged 关键配置conf/nebula-storaged.conf.default存储引擎--engine_typerocksdb --data_pathdata/storage # 多盘用逗号分隔一个路径一个 RocksDB 实例 --minimum_reserved_bytes268435456 --rocksdb_batch_size4096 --rocksdb_block_cache4 # 单位 MB --rocksdb_compressionlz4 --rocksdb_compression_per_level --rocksdb_db_options{} --rocksdb_column_family_options{write_buffer_size:67108864,max_write_buffer_number:4,max_bytes_for_level_base:268435456} --rocksdb_block_based_table_options{block_size:8192}--rocksdb_compression支持no/snappy/lz4/lz4hc/zlib/bzip2/zstd配置注释给出了选型建议追求 CPU 性能选lz4追求磁盘空间选zstd读多写少场景选lz4hc。RocksDB 的 DBOptions、ColumnFamilyOptions、BlockBasedTableOptions 均可通过 JSON 字符串透传覆盖实现不重新编译的深度调优。吞吐与限流--query_concurrentlytrue --num_io_threads16 --num_worker_threads32 --max_concurrent_subtasks10 --snapshot_part_rate_limit10485760 # 快照同步限速字节/秒 --snapshot_batch_size1048576 --rebuild_index_part_rate_limit4194304 --rebuild_index_batch_size1048576这些参数分别控制请求处理并发度、管理任务并发数以及 leader 向 follower 同步快照、重建索引时的限速与批大小是集群扩容、故障恢复场景下的重要调优项。服务生命周期管理仓库提供了两套运维脚本scripts/nebula.service单机多进程管理脚本用法为nebula.service [-v] [-c /path/to/config] start|stop|restart|status|kill metad|graphd|storaged|all例如# 启动全部服务使用 etc 目录下默认配置 scripts/nebula.service start all # 单独查看 metad 状态 scripts/nebula.service status metad # 指定配置文件重启 graphd scripts/nebula.service -c conf/nebula-graphd.conf.default restart graphd # 强制杀掉 storagedSIGKILL scripts/nebula.service kill storaged脚本会从配置文件中解析--pid_file、--log_dir与--port实现启动前的重复进程检测、日志目录创建以及状态查询时的端口监听校验。若bin/nebula-standalone存在all目标会退化为管理standalone单进程。值得注意storaged 在 v3.0.0 之后启动后不会立即对外服务需先通过ADD HOSTS将其加入集群脚本的 status 输出中会给出相应提示。scripts/services.sh多机批量部署脚本通过读取同目录下的meta.hosts、storage.hosts、graph.hosts主机清单借助ssh在集群各节点上分别执行nebula.service的对应动作适合多机集群的初始化与批量运维。systemd 用户还可以使用 scripts/nebula-graphd.service、scripts/nebula-metad.service、scripts/nebula-storaged.service 等单元文件将各服务托管给 systemd。数据模型与类型体系NebulaGraph 的图数据模型由点Vertex、边Edge、Tag点类型与Edge Type边类型构成其底层类型定义集中在 src/interface/common.thriftVertexvid 多个Tag属性集与Edgesrc、dst、type、ranking、属性集Path起点 有序Step列表用于表达查询路径标量类型Valueunion覆盖NullType、bool、i64、double、字符串、Date/Time/DateTime、Geography点/线/面、Duration等容器类型NList/NMap/NSet/DataSet/Row属性类型枚举PropertyTypesrc/interface/common.thrift包括BOOL、INT8/16/32/64、FLOAT、DOUBLE、STRING、FIXED_STRING、TIMESTAMP、DATE、DATETIME、TIME、DURATION、GEOGRAPHY、LIST_*、SET_*等。这些 Thrift 定义同时用于跨语言客户端生成namespace 覆盖 cpp、java、go、js、csharp、python 等是客户端与服务端通信协议的事实标准。查询结果通过ExecutionResponse返回src/interface/graph.thrift并携带执行计划PlanDescription与逐算子性能统计ProfilingStats含处理行数、执行耗时等字段。获取帮助、贡献与许可证获取帮助官方提供 FAQ、中文论坛与完整文档站遇到问题可优先检索文档与论坛历史讨论如何贡献NebulaGraph 是完全开源的项目可以在 GitHub 上提交 Issue 报告问题或按贡献指南提交代码仓库内附 CONTRIBUTING.md 与 Coding_Style_Guide.md 供参考许可证NebulaGraph 使用 Apache 2.0 许可证见仓库根目录 LICENSE可以免费下载、修改以及部署源代码也可以将其作为后端服务部署以支持 SaaS 业务。总结NebulaGraph 通过「全对称分布式架构 存储计算分离 RAFT 强一致」的设计将图数据库的水平扩展能力与超大规模数据处理能力统一到一个开源内核中。本文从 README-CN 的特性清单出发逐一落到内核守护进程、Thrift 协议、RocksDB 存储配置与运维脚本等仓库证据上。上手路径建议为先用 conf/nebula-standalone.conf.default 单进程体验再按三进程模式部署最后结合 scripts/nebula.service 与各服务的.production配置模板推进到多机集群。赞分享图数据库【免费下载链接】nebulaA distributed, fast open-source graph database featuring horizontal scalability and high availability项目地址https://gitcode.com/gh_mirrors/nebul/nebula点击查看免费下载相关推荐TiKV 分布式事务键值数据库架构原理、核心特性与快速部署实战指南TiKV 分布式事务键值数据库架构原理、核心特性与快速部署实战指南 TiKV 是一个用 Rust 实现的开源分布式事务键值数据库由 Raft 共识算法驱动数据库KV存储分布式数据库云原生OceanBase 开源分布式数据库全景指南架构、核心特性与多方式快速部署OceanBase 开源分布式数据库全景指南架构、核心特性与多方式快速部署 OceanBase 是由蚂蚁集团完全自主研发的分布式关系型数据库本指南以仓库根目数据库分布式数据库关系型数据库后端高可用OceanBase 分布式数据库全面解读核心特性、源码架构与四种快速部署方式OceanBase 分布式数据库全面解读核心特性、源码架构与四种快速部署方式 OceanBase 是蚂蚁集团完全自主研发并开源的分布式关系型数据库基于 Pa数据库分布式数据库关系型数据库后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
