Titan图形数据库的应用实例讲解_XiaoXiao_Yang77的博客-CSDN博客_titan图形数据库语法


本站和网页 https://blog.csdn.net/XiaoXiao_Yang77/article/details/78226361?locationNum=4&fps=1 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Titan图形数据库的应用实例讲解_XiaoXiao_Yang77的博客-CSDN博客_titan图形数据库语法
Titan图形数据库的应用实例讲解
XiaoXiao_Yang77
于 2017-10-13 15:12:35 发布
7559
收藏
分类专栏:
数据库
文章标签:
大数据
图形
hbase
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/XiaoXiao_Yang77/article/details/78226361
版权
数据库
专栏收录该内容
2 篇文章
0 订阅
订阅专栏
前言
因公司业务发展,需要建立完整的关系图谱检索系统。经各种比较与考量,我们采用Titan图形数据库来处理复杂的逻辑关系。这篇《Titan数据库快速入门之神的光芒》同事已经详细介绍了Titan数据库的安装与使用,这里不再赘述。此篇博客介绍Titan的实际应用与成果展示,方便读者更好的理解Titan。
项目背景
本项目基于工程大数据进行研究,下图为Hbase中的部分数据展示。通常,一个工程项目有一个或者多个标段,这些标段分别由不同的公司完成,也存在同一标段由多家公司联合完成的情况。例如,图中所示,上海公路桥梁(集团)有限公司完成了合肥至六安高速公路这一项目的路基十三标的施工。而合肥至六安高速公路下面的剩余标段分别由其他家公司完成,因此,施工公司、项目、标段就串成了一个关系图谱,用Titan数据库存储时对应图中的边和点关系。
项目实施
1、关系图谱存入Titan数据库中
Hbase中已经存入了近几年多家工程公司的业绩信息,但每个施工业绩都是独立的,没有建成一张关系图谱。所以首先,根据采集的数据构建一个关系图谱存入Titan数据库中。虽然是Titan数据库,但我们采用Hbase进行存储。 下面代码完成的任务是: 从表CompanyInfos_test中遍历所有公司的业绩信息,获取该公司名字,存为结点v1,并添加属性group=1;获取标段,存为结点v2,group=2;并在公司和标段之间建立一条边;获取项目名字,存为结点v3,group=3;并在项目和标段之间建立一条边;重复上述过程,即可建立一张所有公司、标段、项目串起来的关系图表,并存入Hbase中。
Java代码 
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.rednum.graph;
import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;
import static com.rednum.graph.CompanyCountry.conf;
import static com.rednum.graph.TiTanDB.INDEX_NAME;
import static com.rednum.graph.TiTanDB.load;
import static com.rednum.graph.TiTanDB.query;
import com.thinkaurelius.titan.core.EdgeLabel;
import com.thinkaurelius.titan.core.Multiplicity;
import com.thinkaurelius.titan.core.PropertyKey;
import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.thinkaurelius.titan.core.TitanTransaction;
import com.thinkaurelius.titan.core.attribute.Geoshape;
import com.thinkaurelius.titan.core.attribute.Text;
import com.thinkaurelius.titan.core.schema.ConsistencyModifier;
import com.thinkaurelius.titan.core.schema.TitanGraphIndex;
import com.thinkaurelius.titan.core.schema.TitanManagement;
import com.thinkaurelius.titan.core.util.TitanCleanup;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.tinkerpop.gremlin.process.traversal.Order;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;
/**
* @author X.H.Yang
*/
public class TiTanNew {
public static final String INDEX_NAME = "search";
public static org.apache.hadoop.conf.Configuration conf = null;
static {
conf = HBaseConfiguration.create();
conf.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, 180000);
public static TitanGraph create() {
try {
//创建名为newgraph的表。
TitanGraph graph = TitanFactory.build()
.set("storage.backend", "hbase")
.set("storage.hostname", "192.168.1.252")
.set("storage.hbase.table", "newgraph")
.set("cache.db-cache", "true")
.set("cache.db-cache-clean-wait", "20")
.set("cache.db-cache-time", "180000")
.set("cache.db-cache-size", "0.5")
.set("index.newgraph.backend", "elasticsearch")
.set("index.newgraph.hostname", "192.168.1.212")
.set("index.newgraph.port", 9300)
.set("index.newgraph.elasticsearch.client-only", true)
.open();
return graph;
} catch (Exception e) {
System.out.println(e);
return null;
public static void loadWithoutMixedIndex(final TitanGraph graph,
boolean uniqueNameCompositeIndex) {
load(graph, null, uniqueNameCompositeIndex);
public static void load(final TitanGraph graph) {
load(graph, "newgraph", true);
public static void load(final TitanGraph graph, String mixedIndexName,
boolean uniqueNameCompositeIndex) {
// 添加索引,name为key,并建立边和点的联合索引,提高查询速率
try {
TitanManagement mgmt = graph.openManagement();
final PropertyKey name = mgmt.makePropertyKey("name").dataType(String.class).make();
TitanManagement.IndexBuilder nameIndexBuilder = mgmt.buildIndex("name", Vertex.class).addKey(name);
if (uniqueNameCompositeIndex) {
nameIndexBuilder.unique();
TitanGraphIndex namei = nameIndexBuilder.buildCompositeIndex();
mgmt.setConsistency(namei, ConsistencyModifier.LOCK);
final PropertyKey group = mgmt.makePropertyKey("group").dataType(Integer.class).make();
if (null != mixedIndexName) {
mgmt.buildIndex("vertices", Vertex.class).addKey(group).buildMixedIndex(mixedIndexName);
final PropertyKey projectname = mgmt.makePropertyKey("projectname").dataType(String.class).make();
final PropertyKey sectionname = mgmt.makePropertyKey("sectionname").dataType(String.class).make();
if (null != mixedIndexName) {
mgmt.buildIndex("edges", Edge.class).addKey(projectname).addKey(sectionname).buildMixedIndex(mixedIndexName);
mgmt.makeEdgeLabel("ComSec").multiplicity(Multiplicity.MANY2ONE).make();
mgmt.makeEdgeLabel("SecPro").multiplicity(Multiplicity.MANY2ONE).make();
mgmt.commit();
} catch (Exception e) {
System.out.println(e);
public void doCreatCompanyGraph() {
TitanGraph graph = create(); //建立表
load(graph); //添加索引
GraphTraversalSource g = graph.traversal(); //遍历表
String error = "";
while (true) {
try {
//遍历采集的数据CompanyInfos_test表中所有公司名字
HTable country = new HTable(conf, "CompanyInfos_test");
Scan s = new Scan();
ResultScanner rs = country.getScanner(s);
int count = 0;
for (Result r : rs) {
count++;
String row = Bytes.toString(r.getRow());
error = row;
//避免同一公司重复加入图谱,name设为索引key,只能唯一存在
if (g.V().has("group", 1).has("name", row).hasNext()) {
continue;
//建立公司名称节点,属性有label, name, group, 即公司名字的group为1,label为company
Vertex v1 = graph.addVertex(T.label, "company", "name", row, "group", 1);
//Hbase相关查询语句,根据rowkey获取指定列族里所有列
Get get = new Get(Bytes.toBytes(row));
get.addFamily(Bytes.toBytes("performance_owner"));
Result rs1 = country.get(get);
for (Cell cell : rs1.rawCells()) {
String performance = "";
String project = "";
performance = Bytes.toString(CellUtil.cloneValue(cell));
project = getProjectByPer(performance);
if (!"".equals(performance)) {
performance = performance.replace(row, "");
if (!"".equals(project)) {
performance = performance.replace(project, "");
if ("/".equals(performance) || "".equals(performance)) {
performance = project;
Vertex v2 = null;
if (!"".equals(performance)) {
//建立标段节点,属性有label, sectionname, group, 即标段的group为2,label为section
v2 = graph.addVertex(T.label, "section", "sectionname", performance, "group", 2);
//添加一条由v1指向v2,属性为ComSec的边
v1.addEdge("ComSec", v2);
if (!"".equals(project)) {
Vertex v3 = null;
if (g.V().has("group", 3).has("projectname", project).hasNext()) {
v3 = g.V().has("group", 3).has("projectname", project).next();
} else {
v3 = graph.addVertex(T.label, "project", "projectname", project, "group", 3);
v2.addEdge("SecPro", v3);
graph.tx().commit();
graph.tx().commit();
System.out.println(row + ": 第" + count + "家公司");
rs.close();
System.out.println("共有数据" + count);
break;
} catch (Exception e) {
System.out.println(e.toString());
System.out.println("公司:" + error + "捕获异常");
//对异常的结点进行删除
Vertex ver = g.V().has("group", 1).has("name", error).next();
GraphTraversal<Vertex, Vertex> mF = g.V(ver).out("ComSec");
while (mF.hasNext()) {
Vertex ver1 = mF.next();
g.V(ver1).drop().iterate(); //删除该节点
g.V(ver).drop().iterate();
graph.tx().commit();
continue;
System.out.println(g.V().count().next());
System.out.println(g.E().count().next());
graph.close();
public String getProjectByPer(String per) throws IOException {
HTable table = new HTable(conf, "CompanyOwner_test");
Get get = new Get(per.getBytes("utf-8"));
get.addColumn(Bytes.toBytes("ProjectInfo"), Bytes.toBytes("ProjectName"));
Result rs = table.get(get);
String project = "";
for (Cell cell : rs.rawCells()) {
project = Bytes.toString(CellUtil.cloneValue(cell));
return project;
public static void main(String[] args) throws Exception {
try {
TiTanNew titan = new TiTanNew();
titan.doCreatCompanyGraph();
} catch (Exception e) {
e.toString();
2、关系检索
下面给出模糊搜索项目:“遵义至毕节高速公路”的实现过程。
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.rednum.graph;
import com.google.gson.Gson;
import com.thinkaurelius.titan.core.TitanException;
import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.thinkaurelius.titan.core.TitanVertex;
import com.thinkaurelius.titan.core.attribute.Text;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Vertex;
/**
* @author X.H.Yang
*/
public class CompanyCountrySearch {
private Gson gson = new Gson();
public static TitanGraph open() {
try {
org.apache.commons.configuration.Configuration conf = new BaseConfiguration();
conf.setProperty("storage.backend", "hbase");
conf.setProperty("storage.hostname", "192.168.1.252");
conf.setProperty("storage.hbase.table", "newgraph");
TitanGraph graph = TitanFactory.open(conf);
return graph;
} catch (Exception e) {
System.out.println(e);
return null;
public String doSearch() {
TitanGraph graph = CompanyCountrySearch.open();
GraphTraversalSource g = graph.traversal();
try {
String jstr = "";
Iterable<TitanVertex> mm = graph.query().has("group", 3).has("projectname", Text.REGEX, ".*遵义至毕节高速公路.*").vertices();
for (TitanVertex tt : mm) {
HashMap<String, Object> params = new HashMap<>();
List<Map> nodes = new ArrayList<>();
List<Object> links = new ArrayList<>();
Map map = new LinkedHashMap();
GraphTraversal<Vertex, Vertex> mF = g.V(tt).in("SecPro");
String project = g.V(tt).next().value("projectname");
System.out.println("工程名称:" + project);
map.put("name", project);
map.put("group", 1);
map.put("index", nodes.size());
nodes.add(map);
int i = 0;
while (mF.hasNext()) {
Vertex v1 = mF.next();
String section = g.V(v1).next().value("sectionname");
Vertex v2 = g.V(v1).in("ComSec").next();
String company = g.V(v2).next().value("name");
Map map1 = new LinkedHashMap();
map1.put("name", section);
map1.put("group", 2);
map1.put("index", nodes.size());
nodes.add(map1);
i = i+1;
Map link1 = new LinkedHashMap();
link1.put("source", nodes.size()-1);
link1.put("target", 0);
links.add(link1);
int temp = 0;
int kk = 0;
for (Map m : nodes) {
if (m.containsValue(company)) {
kk = (int) m.get("index");
temp = 1;
break;
if (temp == 1) {
Map templink = new LinkedHashMap();
templink.put("source", kk);
templink.put("target", nodes.size()-1);
links.add(templink);
} else {
Map map2 = new LinkedHashMap();
map2.put("name", company);
map2.put("group", 3);
map2.put("index", nodes.size());
nodes.add(map2);
Map link2 = new LinkedHashMap();
link2.put("source", nodes.size()-1 );
link2.put("target", nodes.size()-2);
links.add(link2);
i = i + 1;
System.out.println("----------");
GraphTraversal<Vertex, Vertex> gt = g.V(v2).out("ComSec");
int j = 0;
int count = nodes.size()-1;
while (gt.hasNext()) {
Vertex v3 = gt.next();
String section1 = g.V(v3).next().value("sectionname");
String project1 = g.V(v3).out("SecPro").next().value("projectname");
if (project1.equals(project)) {
continue;
Map map11 = new LinkedHashMap();
map11.put("name", section1);
map11.put("group", 2);
map11.put("index", nodes.size());
nodes.add(map11);
j = j +1;
Map link11 = new LinkedHashMap();
link11.put("source", count);
link11.put("target", nodes.size()-1);
links.add(link11);
int temp1 = 0;
int kk1 = 0;
for (Map m : nodes) {
if (m.containsValue(project1)) {
kk1 = (int) m.get("index");
temp1 = 1;
break;
if (temp1 == 1) {
Map link22 = new LinkedHashMap();
link22.put("source", nodes.size()-1);
link22.put("target", kk1);
links.add(link22);
} else {
Map map22 = new LinkedHashMap();
map22.put("name", project1);
map22.put("group", 1);
map22.put("index", nodes.size());
nodes.add(map22);
Map link22 = new LinkedHashMap();
link22.put("source", nodes.size()-2);
link22.put("target", nodes.size()-1);
links.add(link22);
j = j + 1;
i = i +j + 2;
params.put("nodes", nodes);
params.put("links", links);
jstr = gson.toJson(params);
System.out.println(jstr);
break;
graph.close();
return jstr;
} catch (NoSuchElementException | TitanException e) {
e.toString();
System.out.println(e.toString());
return null;
public static void main(String[] args) {
CompanyCountrySearch search = new CompanyCountrySearch();
search.doSearch();
我们也可根据公司名字检索出相关联的项目和标段信息,代码如下:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.rednum.graph;
import com.google.gson.Gson;
import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Vertex;
/**
* @author X.H.Yang
*/
public class TitanSearchByCompany {
private Gson gson = new Gson();
public static TitanGraph open() {
try {
org.apache.commons.configuration.Configuration conf = new BaseConfiguration();
conf.setProperty("storage.backend", "hbase");
conf.setProperty("storage.hostname", "192.168.1.252");
conf.setProperty("storage.hbase.table", "newgraph");
TitanGraph graph = TitanFactory.open(conf);
return graph;
} catch (Exception e) {
System.out.println(e);
return null;
public String searchBycom() {
TitanGraph graph = open();
GraphTraversalSource g = graph.traversal();
try {
HashMap<String, Object> params = new HashMap<>();
List<Map> nodes = new ArrayList<>();
List<Object> links = new ArrayList<>();
GraphTraversal<Vertex, Vertex> mF = g.V().has("group", 1).has("name", "中铁十局集团有限公司").out("ComSec");
Map map = new LinkedHashMap();
map.put("name", "中铁十局集团有限公司");
map.put("group", 1);
map.put("index", nodes.size());
nodes.add(map);
int count = 0;
while (mF.hasNext()) {
Vertex v1 = mF.next();
String section = g.V(v1).next().value("sectionname");
Map map1 = new LinkedHashMap();
map1.put("name", section);
map1.put("group", 2);
map1.put("index", nodes.size());
nodes.add(map1);
Map link1 = new LinkedHashMap();
link1.put("source", 0);
link1.put("target", nodes.size() - 1);
links.add(link1);
count = nodes.size() - 1;
Vertex v2 = g.V(v1).out("SecPro").next();
String project = g.V(v2).next().value("projectname");
int temp = 0;
int kk = 0;
for (Map m : nodes) {
if (m.containsValue(project)) {
kk = (int) m.get("index");
temp = 1;
break;
if (temp == 1) {
Map templink = new LinkedHashMap();
templink.put("source", nodes.size() - 1);
templink.put("target", kk);
links.add(templink);
} else {
Map map2 = new LinkedHashMap();
map2.put("name", project);
map2.put("group", 3);
map2.put("index", nodes.size());
nodes.add(map2);
Map link2 = new LinkedHashMap();
link2.put("source", count);
link2.put("target", nodes.size() - 1);
links.add(link2);
params.put("nodes", nodes);
params.put("links", links);
String jstr = gson.toJson(params);
System.out.println(jstr);
graph.close();
return jstr;
} catch (Exception e) {
e.toString();
return null;
public static void main(String[] args) {
TitanSearchByCompany search = new TitanSearchByCompany();
String result = search.searchBycom();
成果展示
由于Titan数据库没有可视化界面,所以我们在web平台上开发了根据搜索内容,呈现关系图谱的功能,图的展示主要用了D3中的力导向图,力导向图的实现将在下一篇文中由前端同事介绍。
通过下面的搜索界面,得到公司或者项目的业绩图谱。 搜索“中铁十局集团有限公司”得到的关系图为:(效果图是不是很炫)
搜索项目“雅安至康定”得到下面的关系图谱,由于屏幕有限,只展示一层的关系。
文章到此结束,这是小编学了Titan数据库后完成的第一个项目,如有不对的地方,请在下方留言指正。感兴趣的我们可以相互交流。
XiaoXiao_Yang77
关注
关注
点赞
收藏
打赏
评论
Titan图形数据库的应用实例讲解
前言因公司业务发展,需要建立完整的关系图谱检索系统。经各种比较与考量,我们采用Titan图形数据库来处理复杂的逻辑关系。这篇《Titan数据库快速入门之神的光芒》同事已经详细介绍了Titan数据库的安装与使用,这里不再赘述。此篇博客介绍Titan的实际应用与成果展示,方便读者更好的理解Titan。项目背景本项目基于工程大数据进行研究,下图为Hbase中的部分数据展示。通常,一个工程项目有一个或者多个
复制链接
扫一扫
专栏目录
图数据库应用案例解析常新宇.pdf
05-21
图数据库应用案例解析常新宇.pdf
Titan图数据库结构概述
萧何的博客
09-29
2212
结构概述
titan是一个图形数据库引擎。titan本身专注于紧凑的图形序列化、丰富的图形数据建模和高效的查询执行。此外,titan利用Hadoop进行图形分析和批处理图处理。titan为数据持久性、数据索引和客户端访问实现健壮的、模块化的接口。titan的模块化架构使其能够与广泛的存储、索引和客户端技术进行互操作;它还简化了扩展titan的过程,以支持新的titan。
在titan和磁盘之间有一...
评论 3
您还未登录,请先
登录
后发表或查看评论
Titan官方中文文档
12-02
Titan官方中文文档 - Titan中文文档,提供Titan图数据库的学习和开发指导
【TigerGraph】图数据库实战入门 —— 数据导入
最新发布
颜淡慕潇
09-29
589
该文件总共有27,279行,除第1行是表头外,每行用3列表示一部电影,分别为电影id(movieId)、电影名称(title)和电影类型(genres)。需要注意的是该csv文件用逗号分隔不同的列,而为了处理电影名称中包含的逗号,使用双引号(")转义title列。该文件总共有20,000,264行,除第1行是表头外,每行用4列表示一位用户对一部电影的评分,分别为用户id(userId)、电影id(movieId)、评分(rating)和评分时间(timestamp)。
常用的图数据库(Neo4j、FlockDB、AllegroGrap、GraphDB、InfiniteGraph、TITAN、OrientDb)
学习笔记
02-18
1万+
1.Neo4j
Neo4j是一个流行的图形数据库,它是开源的。最近,Neo4j的社区版已经由遵循AGPL许可协议转向了遵循GPL许可协议。尽管如此,Neo4j的企业版依然使用AGPL许可。Neo4j基于Java实现,兼容ACID特性,也支持其他编程语言,如Ruby和Python。
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁...
常见图数据库比较
weixin_30593261的博客
08-09
1825
1.数据库分类: 传统的关系数据库和NoSQL数据库
传统的关系数据库:mySQL、oracle
NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种,分别对应titan、ES、hbase、redis。
2.图数据库相对于传统关系型数据库的优点
(1)传统关系型数据库为每一类实体建表,但没有对...
我们为什么需要图数据库?
CDA数据分析师
02-26
1354
作者 | 宋文喆
来源 | AI前线
当前,互联网数据呈指数级增长,但是以更快速度增加的是数据之间的关系。企业的 CIO 和 CTO 不仅要管理大量数据,还要从现有的数据中挖掘商业价值,在这种情况下处理数据之间的关系比处理单个数据更为重要。
传统的关系型数据库,在处理复杂数据关系运算上表现很差,随着数据量和深度的增加,关系型数据库无法在有效的时间内计算出结果。所以,为了更好的利用数据间的连接...
esnp ospf进程id_ENSP演示曾经的一个面试题VRRP+MSTP+OSPF(转)
weixin_39994270的博客
12-21
163
要求:1.client1属于VLAN2(192.168.1.1/24)client2属于VLAN3(192.168.2.1/24)2.SW1SW2 SW3运行MSTP+VRRP,SW1作为1.0的根桥(同时作为网关VRRP为MASTER)SW2作为2.0的根桥(同时作为网关VRRP为MASTER)3.SW1SW2之间链路聚合4.用R1的两个环回口模拟OABOSS服务器IP分别为1.1.1.1,2...
ffmpeg获取RTSP视频流信息
weixin_33816300的博客
08-09
1573
#include "FFPlayVeido.h"
FFPlayVedio::FFPlayVedio(HWND hwd)
char sdl_var[64];
sprintf(sdl_var, "SDL_WINDOWID=%d", hwd); //主窗口句柄
putenv(sdl_var);
//初始化
av_register_all();
...
VirtualBox linux 网络设置 Bridged Adapter模式
YunWisdom
11-26
904
virtualbox下linux
请检查有没有设置开机启动网络,默认是没有开启的。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
#这里ONBOOT设置成YES,其他如IP、网关、DNS都无需设置开启DHCP都会自动获取!
固定ip设置
vi /etc/sysconfig/network-scripts/ifcfg...
容器镜像上传私库时报错:Get https://192.168.1.252:5000/v1/_ping: http: server gave HTTP response to HTTPS client
weixin_45533230的博客
04-13
2994
Docker push私库时遇到:Get https://192.168.0.180:5000/v1/_ping: http: server gave HTTP response to HTTPS client解决方法: 编辑”/etc/docker/daemon.json“文件,不存在则创建”daemon.json“文件。[root@ecs-proxy images]# vim /etc/doc...
搭建git+gerrit+repo代码
sunnywalden
08-18
2898
以下内容亲测验证通过。
Git是目前最流行的分布式版本控制系统,而Gerrit是一种免费、开放源代码的代码审查软件,使用网页界面。利用浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。趁着做测试的机会,简单学习了解一下Git+Gerrit是如何搭建使用的,顺便简单做个小笔记。
1:安装git
sud
图形数据库Titan-学习笔记
yanlongpeng的博客
07-31
316
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
图数据库 Titan 快速入门
热门推荐
samhacker的专栏
10-01
2万+
尤其在互联网世界,图计算越来越受到人们的关注,而图计算相关的软件也越来越丰富。本文将快速展示 Titan这个open source 的图数据库。
图数据库应用场景
永生只是一场幻梦
11-30
1572
社交网络
图数据库可以轻松应对海量高度互连社交数据的实时存储和高效查询,帮助您快速构建复杂的社交网络系统。例如,在一个典型的社交网络中,常常会存在“谁认识谁,谁上过什么学校,谁常住什么地方,谁喜欢什么餐馆”等查询,传统关系型数据库对于超过3度的查询往往会很低效甚至无法支持,但图数据库从基因层面提供了解决方案,轻松应对社交网络的各种复杂存储和查询。
金融欺诈检测
在金融领域,图数据库...
图数据库Titan的使用总结
胖大星的博客
08-05
5251
1.搭建环境(hbase+es+titan1hadoop1为例)
下载安装
下载安装titan-1.0-hadoop1http://s3.thinkaurelius.com/downloads/titan/titan-1.0.0-hadoop1.zip
下载安装最新JDKhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-d
图形数据库的优势是什么,以Neo4j为例子
飘过的春风
10-10
1万+
最近在抓取一些社交网站的数据,抓下来的数据用MySql存储。问我为什么用MySql,那自然是入门简单,并且我当时只熟悉MySql。可是,随着数据量越来越大,有一个问题始终困扰着我,那就是社交关系的存储。
就以新浪微博举例,一个大V少则十几万,多则几千万的粉丝,这些关注关系要怎么存呢?在MySql中,一条关注关系(大V id,大V的一个粉丝 id)存为一条数据,那么当用户数量上...
keepalived(vrrp)
测试
05-04
124
keepalived:
vrrp协议在Linux主机上以守护进程方式的实现;
能够根据配置文件自动生成ipvs规则;
对各RS做健康状态检测;
组件:
vrrp stack
checkers
ipvs wrapper –> ipvs
...
HSRP,VRRP,GLBP完全配置
weixin_34195546的博客
07-11
226
Lab1:HSRP的配置:
一:实验拓扑:
二:实验要求:
Down掉R1和R3中的任何一台路由器主机都能上网。
三:实验配置:
1:基本接口的配置:(见图)
2:路由的配置:
R1:
router rip
ver 2
net 192.168.1.0
net 12.0.0.0
no auto-summary
exit
R2:
rout...
UBIFS文件系统的移植
╰☆╮EvilCode的专栏╭☆╯
12-22
2018
作者:piaozhiye86@126.com首次做UBIFS的移植,不足之处欢迎批评指正。2010-7-15自从linux2.6.27以后的内核版本都支持UBI文件系统了,新版本的uboot已经支持UBIFS了。软件平台VMwareFedora-10使用源码:linux-2.6.30.4.tar.bz2u-boot-2010.06-rc1.tar.bz2硬件环境mini2440—64M NAND关于uboot的移植可以参考 《嵌入式Linux之我行》 中uboot的移植,那里写得比较详细。我也是参考了其中的
八大案例带你了解图数据库如何洞察数据间关联价值
weixin_44324814的博客
01-27
1078
大家好,我是吴敏。今天分享一个叫图数据库的技术产品。
什么是图和图数据库
先来介绍一下什么是图和图数据库,所谓的图和平常认知的图片其实不是同一个概念,图(Graph)在计算机科学里面是一种数据结构,这种数据结构有三个比较主要的概念:点、边和属性。
通俗的说,图结构还有其他的叫法,比如:网络结构、拓扑结构,大致上都是描述的同一种数据结构。
举个例子,上面这个图是典型的图结构(网络结构),人和公司,公司与公司都存在关联关系。这里面存在几个重要的概念,在网络结构中一家公司、一个人可以是一个点;还有另外一个概.
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
XiaoXiao_Yang77
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
26
原创
19万+
周排名
3万+
总排名
9万+
访问
等级
1102
积分
68
粉丝
34
获赞
46
评论
206
收藏
私信
关注
热门文章
基于HanLP分词的命名实体提取
13179
Titan图形数据库的应用实例讲解
7559
机器学习算法——PCA算法介绍以及Java实现
5381
TF-IDF算法讲解和Java实现
4609
文本挖掘——基于TF-IDF的KNN分类算法实现
4028
分类专栏
环境搭建
8篇
机器学习
6篇
文本挖掘
5篇
算法
6篇
数据库
2篇
java
4篇
java-web
2篇
教程
1篇
代码
1篇
最新评论
方差、标准差、均方差、均方误差区别总结
.Inevitable.:
第三条的第2点写错了,均方误差不同于均方误差,是什么意思?
基于HanLP分词的命名实体提取
qq_34910948:
请问“前文+特定实体+后文”正则匹配这部分实现了么?可以参考下么?邮箱:2810390731@qq.com
基于HanLP分词的命名实体提取
weixin_44049780:
请问“前文+特定实体+后文”正则匹配这部分实现了么?可以参考下么?qq:1826315475
根据IP获取地理位置——Java实现
最闲程序员:
http://ip.taobao.com/service/getIpInfo.php?ip=,这种地址能否用于生产环境呢
使用git上传项目到Github之新手教程
夜间传说:
能解决问题,感谢大佬!!!
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
SaveAsPDFandXPS + jacob实现word转pdf(Java版)
python爬虫采集网络信息
MySql使用笔记
2022年1篇
2018年14篇
2017年12篇
2016年1篇
目录
目录
分类专栏
环境搭建
8篇
机器学习
6篇
文本挖掘
5篇
算法
6篇
数据库
2篇
java
4篇
java-web
2篇
教程
1篇
代码
1篇
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
XiaoXiao_Yang77
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值