前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >golang源码分析:cayley(1)

golang源码分析:cayley(1)

作者头像
golangLeetcode
发布于 2023-09-06 11:29:40
发布于 2023-09-06 11:29:40
37400
代码可运行
举报
运行总次数:0
代码可运行

https://github.com/cayleygraph/cayley是go实现的一个图数据库,它支持多种后端存储,包括mysql,boltdb甚至是elasticsearch。下面我们先学习下如何使用它。

首先下载源码并下载依赖的静态文件,然后编译。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# clone project
git clone https://github.com/cayleygraph/cayley
cd cayley

# Download dependencies
go mod download

# Download web files (optional)

go run cmd/download_ui/download_ui.go

# Install packr 2

go get -u github.com/gobuffalo/packr/v2/packr2
% go install github.com/gobuffalo/packr/v2/packr2

Generate static files go modules
packr2
build the binary
go build ./cmd/cayley

会报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
missing go.sum entry for module providing package github.com/gogo/protobuf/proto (imported by github.com/cayleygraph/quad/pquads); to add:
        go get github.com/cayleygraph/quad/pquads@v1.2.4

所以我们下载依赖然后编译。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%   go get github.com/cayleygraph/cayley/cmd/cayley
go: downloading google.golang.org/protobuf v1.26.0

 %  go get github.com/dop251/goja@v0.0.0-20190105122144-6d5bf35058fa

% go build ./cmd/cayley

编译完成后测试下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制




% ./cayley help
I0521 20:10:47.158113   58688 command.go:915] Cayley version: v0.8.x-dev (dev snapshot)
Cayley is a graph store and graph query layer.

Usage:
  cayley [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  convert     Convert quad files between supported formats.
  dedup       Deduplicate bnode values
  dump        Bulk-dump the database into a quad file.
  health      Health check HTTP server
  help        Help about any command
  http        Serve an HTTP endpoint on the given host and port.
  init        Create an empty database.
  load        Bulk-load a quad file into the database.
  query       Run a query in a specified database and print results.
  repl        Drop into a REPL of the given query language.
  schema      Commands related to RDF schema
  upgrade     Upgrade Cayley database to current supported format.
  version     Prints the version of Cayley.

Flags:
      --alsologtostderr string   log to standard error as well as files
      --backtrace string         when logging hits line file:N, emit a stack trace (default ":0")
      --batch int                size of quads batch to load at once (default 10000)
  -c, --config string            path to an explicit configuration file
      --cpuprofile string        path to output cpu profile
  -d, --db string                database backend to use: badger, bbolt, bolt, btree, cockroach, couch, elastic, leveldb, memstore, mongo, mysql, postgres, sqlite (default "memstore")
  -a, --dbpath string            path or address string for database
      --dup                      don't stop loading on duplicated on add (default true)
  -h, --help                     help for cayley
  -l, --log string               logs at or above this threshold go to stderr (default "2")
      --logs string              If non-empty, write log files in this directory
      --logtostderr string       log to standard error instead of files (default "true")
      --memprofile string        path to output memory profile
      --metrics string           host to serve metrics on (disabled by default)
      --missing                  don't stop loading on missing key on delete
      --pprof string             host to serve pprof on (disabled by default)
      --read_only                open database in read-only mode
  -v, --verbose string           log level for V logs
      --vmodule string           comma-separated list of pattern=N settings for file-filtered logging

Use "cayley [command] --help" for more information about a command.

我们可以用测试文件测试下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% ./cayley repl -i data/testdata.nq
I0521 20:11:21.013740   59131 command.go:915] Cayley version: v0.8.x-dev (dev snapshot)
I0521 20:11:21.014013   59131 repl.go:54] using backend "memstore"
I0521 20:11:21.015741   59131 repl.go:58] loaded "data/testdata.nq" in 1.666345ms
creating new history file: ".cayley_history"
cayley>

当然也可以启用http服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% ./cayley http -i data/testdata.nq
I0521 20:11:50.735282   59357 command.go:915] Cayley version: v0.8.x-dev (dev snapshot)
I0521 20:11:50.735518   59357 http.go:20] using backend "memstore"
I0521 20:11:50.736100   59357 http.go:24] loaded "data/testdata.nq" in 532.817µs
I0521 20:11:50.736170   59357 command.go:940] listening on 127.0.0.1:64210, web interface at http://127.0.0.1:64210

我们也可以加载源码中带的例子文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% ./cayley http --load ./data/30kmoviedata.nq.gz 
I0521 20:17:40.920658   62301 command.go:915] Cayley version: v0.8.x-dev (dev snapshot)
I0521 20:17:40.921659   62301 http.go:20] using backend "memstore"
I0521 20:17:44.913698   62301 http.go:24] loaded "./data/30kmoviedata.nq.gz" in 3.991845522s
I0521 20:17:44.913809   62301 command.go:940] listening on 127.0.0.1:64210, web interface at http://127.0.0.1:64210

访问地址http://127.0.0.1:64210就可以看到下面的页面

可以尝试使用Gizmo语法来进行查询,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g.V().getLimit(5);

获取图中的5个端点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "result": [
        {
            "id": {
                "@id": "_:100000"
            }
        },
        {
            "id": {
                "@id": "/film/performance/actor"
            }
        },
        {
            "id": {
                "@id": "/en/larry_fine_1902"
            }
        },
        {
            "id": {
                "@id": "_:100001"
            }
        },
        {
            "id": {
                "@id": "/en/samuel_howard"
            }
        }
    ]
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g.V()
  .has("<name>", "Humphrey Bogart")
  .all();

获取名字包含Humphrey Bogart的所有端点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "result": [
        {
            "id": {
                "@id": "/en/humphrey_bogart"
            }
        }
    ]
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g.V()
  .has("<name>", "Casablanca")
  .out("</film/film/starring>")
  .out("</film/performance/actor>")
  .out("<name>")
  .all();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "result": [
        {
            "id": "Humphrey Bogart"
        },
        {
            "id": "Ingrid Bergman"
        },
        {
            "id": "Paul Henreid"
        },
        {
            "id": "Claude Rains"
        },
        {
            "id": "Conrad Veidt"
        },
        {
            "id": "Sydney Greenstreet"
        },
        {
            "id": "Peter Lorre"
        },
        {
            "id": "S.Z. Sakall"
        },
        {
            "id": "Madeleine LeBeau"
        },
        {
            "id": "Dooley Wilson"
        },
        {
            "id": "Joy Page"
        },
        {
            "id": "John Qualen"
        },
        {
            "id": "Leonid Kinskey"
        },
        {
            "id": "Helmut Dantine"
        },
        {
            "id": "Lou Marcelle"
        }
    ]
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var filmToActor = g
  .Morphism()
  .out("</film/film/starring>")
  .out("</film/performance/actor>");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g.V()
  .has("<name>", "Casablanca")
  .follow(filmToActor)
  .out("<name>")
  .all();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "result": [
        {
            "id": "Humphrey Bogart"
        },
        {
            "id": "Ingrid Bergman"
        },
        {
            "id": "Paul Henreid"
        },
        {
            "id": "Claude Rains"
        },
        {
            "id": "Conrad Veidt"
        },
        {
            "id": "Sydney Greenstreet"
        },
        {
            "id": "Peter Lorre"
        },
        {
            "id": "S.Z. Sakall"
        },
        {
            "id": "Madeleine LeBeau"
        },
        {
            "id": "Dooley Wilson"
        },
        {
            "id": "Joy Page"
        },
        {
            "id": "John Qualen"
        },
        {
            "id": "Leonid Kinskey"
        },
        {
            "id": "Helmut Dantine"
        },
        {
            "id": "Lou Marcelle"
        }
    ]
}

以上就是基本使用,启动服务端的时候也可以指定各种参数,比如后端存储类型,store.backend,默认是memory即内存存储。当然也还可以支持其它类型:

Key-Value backends

btree: An in-memory store, used mostly to quickly verify KV backend functionality.

leveldb: A persistent on-disk store backed by LevelDB.

bolt: Stores the graph data on-disk in a Bolt file

mongo: Stores the graph data and indices in a MongoDB instance.

elastic: Stores the graph data and indices in a ElasticSearch instance.

couch: Stores the graph data and indices in a CouchDB instance.

pouch: Stores the graph data and indices in a PouchDB. Requires building with GopherJS.

SQL backends

postgres: Stores the graph data and indices in a PostgreSQL instance.

cockroach: Stores the graph data and indices in a CockroachDB cluster.

mysql: Stores the graph data and indices in a MySQL or MariaDB instance.

sqlite: Stores the graph data and indices in a SQLite database.

通过store.address参数来制定参数的地址。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
怎么关闭135 445端口_高危端口关闭方法
1、打开“控制面板”→打开“系统和安全”→打开“系统和安全”→打开“windows防火墙”
全栈程序员站长
2022/11/19
21.4K0
怎么关闭135 445端口_高危端口关闭方法
关闭445端口最简单方法_电脑445端口关闭有什么影响
445端口怎么关闭,445端口关闭方法介绍。勒索病毒的来袭,不少小伙伴的电脑都被侵袭了,小伙伴们需要解决问题,其中就需要关闭445端口,445端口怎么关闭,西西小编来为大家介绍445端口关闭方法。
全栈程序员站长
2022/11/03
3.5K0
关闭445端口最简单方法_电脑445端口关闭有什么影响
计算机的139 135 445端口关闭_系统端口设置在哪里
近期永恒之蓝勒索病毒迅速传播,基本上都是通过135,137,138,139,445等端口入侵,关闭445 135 137 138 139端口是有效预防入侵的方式之一,同时更新微软最新补丁,及时备份重要数据,才能从容应对病毒侵袭,下面重点介绍关闭135,137,138,139,445端口方法。
全栈程序员站长
2022/09/27
2.9K0
计算机病毒445端口,关闭135 445端口_445端口关闭方法_怎么防止电脑中勒索病毒「建议收藏」
这几天,永恒之蓝勒索病毒迅速传播,让网友们都担惊受怕。而这种勒索病毒基本上都是通过135,137,138,139,445等端口入侵,关闭445 135 137 138 139端口是有效预防入侵的方式之一,同时更新微软最新补丁,及时备份重要数据,才能从容应对病毒侵袭,现在就快和小编一起来看看关闭135,137,138,139,445端口方法吧。
全栈程序员站长
2022/11/02
3.3K0
Windows系统安全|135、137、138、139和445端口
首先,这几个端口都是与文件共享和打印机共享有关的端口,而且在这几个端口上经常爆发很严重的漏洞。比如2017年危害全球的永恒之蓝,就是利用的445端口。
谢公子
2022/01/19
19K0
如何关闭139端口及445端口等危险端口_windows端口关闭工具
项目进行安全测试时,使用Nmap扫描端口,发现了几个未关的端口,容易受到黑客的攻击和病毒感染,所以需要关掉。
全栈程序员站长
2022/11/02
10.7K0
Win7如何简单的关闭445端口及445端口入侵详解
最近永恒之蓝病毒攻击了很多教育网的同学,然后我就搜集了如何关闭445端口的方法,下面分享出来一起学习。
全栈程序员站长
2022/07/02
4.5K0
Win7如何简单的关闭445端口及445端口入侵详解
​【收藏】感染勒索病毒处置办法
百度百科给勒索病毒的定义是一种新型电脑病毒,主要以邮件、程序木马、网页挂马的形式进行传播。该病毒性质恶劣、危害极大,一旦感染将给用户带来无法估量的损失。
释然IT杂谈
2022/10/27
1.6K0
​【收藏】感染勒索病毒处置办法
win10关闭135 139 445端口_windows中如何关闭端口
关闭445端口- 首先进入系统的”注册表编辑器“,步骤是:依次点击”开始“,”运行“,输入regedit进入”注册表编辑器“。
全栈程序员站长
2022/11/03
9.3K0
windows7如何关闭445端口_win10重装win7的后果
勒索病毒最新变种2.0已导致我国的很多行业遭受袭击。勒索病毒是通过入侵端口传播,主要是445端口,用户可以通过关闭445端口可以有效预防勒索病毒。下面重点介绍如何关闭445端口。
全栈程序员站长
2022/11/03
2.9K0
windows7如何关闭445端口_win10重装win7的后果
win10安装nfs服务器并实现liunx访问「建议收藏」
b.右键以管理员身份运行nfs server(若不以管理员身份打开,设置项均为灰色不可设),切换到“Exports”标签页,点击“Edit exports file”进行编辑,如下图所示。比如”E:\Video”为win10下要共享的路径,“-name:video”表示将文件夹命名为在nfs服务器上的名字。设置完成后点击“Restart Server”重启服务。
全栈程序员站长
2022/07/29
3.5K0
win10安装nfs服务器并实现liunx访问「建议收藏」
445端口如何正确的修改和关闭
我们都知道,有些专业的黑客可以通过开放端口对windows系统进行攻击,但是很多状况下我们忘了把用不到的端口关闭,特别是一些程序调用了该端口过后没有及时关闭。下面小编分享Win7系统关闭445方法及相关知识。我就搜集了如何关闭445端口的方法,下面分享出来一起学习。
it妹
2019/08/06
12.5K0
445端口如何正确的修改和关闭
windows关闭135,139端口_危险端口有哪些
我用nmap扫描自己的主机,发现自己的某些端口开启着的 139端口 这个端口比较危险 139端口是NetBIOS Session端口,用来文件和打印共享 如果你是单机,不是企业内部网里的成员,为了保护计算机的安全关闭这个端口比较好。 135 137 139 445 3389 这些端口都比较危险,开启这些端口对我们普通用户来说并没有什么用,所以关闭掉
全栈程序员站长
2022/11/03
2.4K0
windows关闭135,139端口_危险端口有哪些
windows关闭端口方法「建议收藏」
在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口、FTP服务的21端口、SMTP服务的25端口、RPC服务的135端口等等。为了保证系统的安全性,我们可以通过下面的方法来关闭/开启端口。
全栈程序员站长
2022/09/06
20K0
windows关闭端口方法「建议收藏」
"WannaCry"勒索蠕虫用户处置指南
前言 2017年5月12日晚,勒索软件"WannaCry"感染事件爆发,全球范围内99个国家遭到大规模网络攻击,被攻击者电脑中的文件被加密,被要求支付比特币以解密文件;众多行业受到影响,比如英国的NHS服务,导致至少40家医疗机构内网被攻陷,电脑被加密勒索;而我国众多行业的也是如此,其中又以教育网最为显著,导致部分教学系统无法正常运行,相关学子毕业论文被加密等。截止到北京时间5月15日09点,目前事件趋势已经蔓延到更多行业,包含金融、能源、医疗、交通等行业均受到影响。 今年4月14日黑客组织Shadow
云鼎实验室
2023/05/31
4260
"WannaCry"勒索蠕虫用户处置指南
速扩散 !敲诈勒索病毒入侵99个国家,这样做可以免遭勒索
5月12日,全球范围内99个国家遭到大规模网络攻击,被攻击者被要求支付比特币解锁。其中英国的 NHS 服务受到了大规模的网络攻击,至少 40 家医疗机构内网被黑客攻陷,电脑被勒索软件锁定,这些医疗机构被要求支付约 300 美元的比特币来解锁电脑,否则所有的资料将被删除。同时俄罗斯,意大利,整个欧洲都受到不同程度的威胁。 在12日晚,我国的多所高校,也遭遇了比特币敲诈者病毒攻击。用户电脑上的文件全部被锁,需要缴纳赎金才能解锁。目前中毒趋势正在全国蔓延,影响范围极大,同时当下处在高校毕业季,很多学子精心制作的毕
腾讯高校合作
2018/03/21
1.1K0
速扩散 !敲诈勒索病毒入侵99个国家,这样做可以免遭勒索
怎样关闭和复原135 、139 、445端口?
关于这几个端口,我跟微软工程师电话沟通过,微软不推荐关闭,建议从防火墙或安全组(尽量用云平台功能,即安全组)采取措施而不是关闭端口,把需要访问这些端口的IP段(内网段)在安全组入站规则放行,个别需要在外网访问这些端口的客户端IP段也放行,其余的客户端IP段全部禁止访问这些端口即可
Windows技术交流
2021/12/30
10.2K0
WannaCry 勒索病毒用户处置指南
云鼎实验室
2017/05/14
10.3K1
WannaCry 勒索病毒用户处置指南
h3c bios密码_日本服务器ip端口密码
NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows”文件和打印机共享”和SAMBA。
全栈程序员站长
2022/11/07
1.7K0
针对5.12大型比特币敲诈事件的漏洞分析及其预防方法
针对5.12大型比特币敲诈事件的漏洞分析及其预防方法 From ChaMd5安全团队核心成员 逍遥自在 2017年4年14日,NSA组织爆出了一份震惊世界的机密文档,其中包含了多个Windows远程漏洞利用工具,其中影响最大的就是ms17_010。在之后几天中,整个安全界都在疯狂的复现这个漏洞,各大公司也出台了相应的措施。时隔一个月之后,一场大型的onion软件敲诈出现在中国安全最脆弱的教育体系中,山东、辽宁、黑龙江均有高校中毒,勒索者要求受害人支付高昂的解密费用才给解开。 据初步了解,这个漏洞就
ChaMd5安全团队
2018/03/29
1.3K0
针对5.12大型比特币敲诈事件的漏洞分析及其预防方法
推荐阅读
相关推荐
怎么关闭135 445端口_高危端口关闭方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档