FAQ
如何选择后端存储? 选 RocksDB 还是分布式存储?
HugeGraph 支持多种部署模式,根据数据规模和场景选择:
- 单机模式:Server + RocksDB,适合开发测试和中小规模数据(≤ 2 TB)
- 分布式模式:HugeGraph-PD + HugeGraph-Store(HStore),用于需要水平扩展和多副本的部署,支持 ≤ 1 PB 的数据规模
1.7.0 支持 RocksDB、HStore、HBase 和 Memory。Cassandra、ScyllaDB、MySQL、PostgreSQL 等旧后端需使用 1.5.x 或更早版本。
启动服务时提示:
xxx (core dumped) xxx请先确认 JDK 版本不低于 Java 11。HugeGraph 1.7.0 不再支持 Java 8。
启动服务成功了,但是操作图时有类似于"无法连接到后端或连接未打开"的提示
RocksDB、HBase 等本地持久化后端首次启动前需要使用
init-store初始化。HStore 由 PD、Store 管理,不执行该脚本。所有的后端在使用前都需要执行
init-store吗,序列化的选择可以随意填写么?Memory 和 HStore 不执行
init-store;RocksDB、HBase 等本地持久化后端首次使用前需要初始化。序列化器必须与后端匹配,例如 RocksDB 使用binary。执行
init-store报错:Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/librocksdbjni3226083071221514754.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.10' not found (required by /tmp/librocksdbjni3226083071221514754.so)RocksDB需要 gcc 4.3.0 (GLIBCXX_3.4.10) 及以上版本
bin目录下包含start-hugegraph.sh、start-restserver.sh和start-gremlinserver.sh三个似乎与启动有关的脚本,到底该使用哪个当前发布包只保留
start-hugegraph.sh作为 Server 启动脚本。GremlinServer 和 REST Server 由同一进程启动。配置了两个图,名字是
hugegraph和hugegraph1,而启动服务的命令是start-hugegraph.sh,是只打开了hugegraph这个图吗脚本名称与图名无关。需要从
graphs目录加载多个本地图时,在rest-server.properties中设置graph.load_from_local_config=true;该选项的源码默认值是false。服务启动成功后,使用
curl查询所有顶点时返回乱码服务端返回的批量顶点/边是压缩(gzip)过的,可以使用管道重定向至
gunzip进行解压(curl http://example | gunzip),也可以用Firefox的postman或者Chrome浏览器的restlet插件发请求,会自动解压缩响应数据。使用顶点Id通过
RESTful API查询顶点时返回空,但是顶点确实是存在的检查顶点Id的类型,如果是字符串类型,
API的url中的id部分需要加上双引号,数字类型则不用加。已经根据需要给顶点Id加上了双引号,但是通过
RESTful API查询顶点时仍然返回空检查顶点id中是否包含
+、空格、/、?、%、&和=这些URL的保留字符,如果存在则需要进行编码。下表给出了编码值:查询某一类别的顶点或边(
query by label)时提示超时由于属于某一label的数据量可能比较多,请加上limit限制。
通过
RESTful API操作图是可以的,但是发送Gremlin语句就报错:Request Failed(500)可能是
GremlinServer的配置有误,检查gremlin-server.yaml的host、port是否与rest-server.properties的gremlinserver.url匹配,如不匹配则修改,然后重启服务。使用
Loader导数据出现Socket Timeout异常,然后导致Loader中断持续地导入数据会使
Server的压力过大,然后导致有些请求超时。可以通过调整Loader的参数来适当缓解Server压力(如:重试次数,重试间隔,错误容忍数等),降低该问题出现频率。如何删除图中的全部数据
管理员可调用
DELETE /graphspaces/{graphspace}/graphs/{graph}/clear?confirm_message=I'm sure to delete all data。confirm_message查询参数必须与该值完全一致,否则请求会被拒绝,详见 Graph API。该操作会清除 schema、顶点、边和索引。清空了数据库,并且执行了
init-store,但是添加schema时提示"xxx has existed"HugeGraphServer内是有缓存的,清空数据库的同时是需要重启Server的,否则残留的缓存会产生不一致。插入顶点或边的过程中报错:
The max length of vertex id is 16384, but got xxx {yyy}或The max length of edge id is 65536, but got xxx {yyy}为了保证查询性能,目前的后端存储对id列的长度做了限制,顶点id不能超过16384字节,边id长度不能超过65536字节;索引id超过32字节时会转为哈希存储,而不是报错。
是否支持嵌套属性,如果不支持,是否有什么替代方案
嵌套属性目前暂不支持。替代方案:可以把嵌套属性作为单独的顶点拿出来,然后用边连接起来。
一个
EdgeLabel是否可以连接多对VertexLabel,比如"投资"关系,可以是"个人"投资"企业",也可以是"企业"投资"企业"可以。创建
EdgeLabel时对每一对顶点标签各调用一次link(sourceLabel, targetLabel),所有配对都会被保留,因此同一个"投资"标签可以同时覆盖"个人"投资"企业"和"企业"投资"企业"。旧的sourceLabel()和targetLabel()构建方法已废弃,且只支持单一配对。通过
RestAPI发送请求时提示HTTP 415 Unsupported Media Type请求头中需要指定
Content-Type:application/json
其他问题可以在对应项目的 issue 区搜索,例如 Server-Issues / Loader Issues