容器数据库(cdb)元数据生成工具。
项目描述
容器数据库(cdb)
这是为 containerdb 提供的Python支持工具,用于生成 数据容器。Python在生成任意数据结构方面更为友好,并且在数据科学社区中很受欢迎,因此我选择了它来生成元数据,而不是使用GoLang。
拥有您的数据并使用它!
有关文档和完整示例,请参阅 vsoch.github.io/cdb。这些示例也位于 examples 文件夹中。
入门
什么是数据容器?
数据容器通常是一个无操作系统的容器,它针对提供数据而优化,无论是用于查询/搜索还是绑定分析。数据容器的特点应该是
- 它可以挂载到带有操作系统的容器中运行分析
- 可以独立与之交互以搜索关于数据的元数据
- 它不应该有操作系统。
我们如何生成一个?
生成过程相当简单!它归结为一个三步骤的多阶段构建
- 步骤1 我们安装 cdb 以生成一个用于我们的数据(内存数据库)的GoLang模板
- 步骤2 我们将二进制文件编译成一个入口点
- 步骤 3 我们将数据和二进制入口添加到临时容器中(没有操作系统)。
然后我们与之交互!本教程将向您展示使用简单的 Dockerfile 和数据文件夹执行多阶段构建的基本步骤。仓库根目录下的 Dockerfile 也是一个很好的例子。
使用方法
Docker 使用
预期通过 Docker 使用,因此您不必担心安装 Python、GoLang 和多阶段构建等基本操作。
- 生成 db.go 模板
- 编译它
- 将数据作为数据容器入口添加到临时容器中。
因此,要使用 Dockerfile 运行此处的示例
$ docker build -t data-container .
我们可以以简单的方式执行以下操作
元数据
如果我们只是运行容器,我们就会得到所有元数据及其键的列表。
$ docker run entrypoint
/data/avocado.txt {"size": 9, "sha256": "327bf8231c9572ecdfdc53473319699e7b8e6a98adf0f383ff6be5b46094aba4"}
/data/tomato.txt {"size": 8, "sha256": "3b7721618a86990a3a90f9fa5744d15812954fba6bb21ebf5b5b66ad78cf5816"}
列表
我们也可以仅使用 -ls
列出数据文件。
$ docker run entrypoint -ls
/data/avocado.txt
/data/tomato.txt
排序
或者,我们可以按某个元数据项进行排序。
$ docker run entrypoint -metric size
Order by size
/data/tomato.txt: {"size": 8, "sha256": "3b7721618a86990a3a90f9fa5744d15812954fba6bb21ebf5b5b66ad78cf5816"}
/data/avocado.txt: {"size": 9, "sha256": "327bf8231c9572ecdfdc53473319699e7b8e6a98adf0f383ff6be5b46094aba4"}
搜索
或者,我们可以根据值搜索特定指标。
$ docker run entrypoint -metric size -search 8
/data/tomato.txt 8
$ docker run entrypoint -metric sha256 -search 8
/data/avocado.txt 327bf8231c9572ecdfdc53473319699e7b8e6a98adf0f383ff6be5b46094aba4
/data/tomato.txt 3b7721618a86990a3a90f9fa5744d15812954fba6bb21ebf5b5b66ad78cf5816
获取
或者,我们可以通过名称或部分匹配获取特定文件元数据。
$ docker run entrypoint -get /data/avocado.txt
/data/avocado.txt {"size": 9, "sha256": "327bf8231c9572ecdfdc53473319699e7b8e6a98adf0f383ff6be5b46094aba4"}
或部分匹配
$ docker run entrypoint -get /data/
/data/avocado.txt {"size": 9, "sha256": "327bf8231c9572ecdfdc53473319699e7b8e6a98adf0f383ff6be5b46094aba4"}
/data/tomato.txt {"size": 8, "sha256": "3b7721618a86990a3a90f9fa5744d15812954fba6bb21ebf5b5b66ad78cf5816"}
开始
开始命令的目的是使容器保持运行,如果我们使用它与编排器一起使用。
$ docker run data-container -start
编排
您更有可能希望通过某些分析或更一般地,另一个容器与容器中的文件进行交互。让我们快速构建一个 docker-compose.yml
来实现这一点。
version: "3"
services:
base:
restart: always
image: busybox
entrypoint: ["tail", "-f", "/dev/null"]
volumes:
- data-volume:/data
data:
restart: always
image: data-container
command: ["-start"]
volumes:
- data-volume:/data
volumes:
data-volume:
请注意,数据容器启动的命令是 -start
,这对于保持其运行很重要。在构建我们的 data-container
之后,我们可以启动这些容器
$ docker-compose up -d
Starting docker-simple_base_1 ... done
Recreating docker-simple_data_1 ... done
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------
docker-simple_base_1 tail -f /dev/null Up
docker-simple_data_1 /entrypoint -start Up
然后我们可以进入并查看我们的数据!
$ docker exec -it docker-simple_base_1 sh
/ # ls /data/
avocado.txt tomato.txt
元数据仍然可以通过与数据容器入口交互进行查询
$ docker exec docker-simple_data_1 /entrypoint -ls
/data/avocado.txt
/data/tomato.txt
根据您的用例,您可以在其他容器中轻松地使这变得可用。这是一个非常简单的用法,但这个想法非常强大!我们可以与数据集交互并对其进行搜索,而无需操作系统。因此,我们可以根据数据内部(例如,知道如何公开输入、输出等的特定数据容器)的格式/组织开发定制数据容器。
Python 使用
上述内容不需要您安装容器数据库(cdb)元数据生成器,但是如果您想(以开发或其他方式交互),您可以执行以下操作。首先,从 PyPI 或本地仓库安装 cdb
$ pip install cdb
或
git clone git@github.com:vsoch/cdb
cd cdb
pip install -e .
命令行
下一步是生成用于编译的 goLang 文件。您接下来需要将工作目录更改为您有数据文件夹的位置。例如,在 tests 中我们有一个模拟的 "data" 文件夹。
cd tests/
然后我们可以运行 cdb generate
以创建针对 tests/data 文件夹的容器二进制文件
$ cdb generate data --out db.go
db.go 文件随后位于当前工作目录。您可以选择将其在多阶段构建中构建,就像 Dockerfile 中的那样,或者使用您自己的 GoLang 安装在本地进行构建,然后将它添加到容器中。例如,为了编译
go get github.com/vsoch/containerdb && \
GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /db -i /db.go
然后需要一个非常基础的 Dockerfile,需要添加指定路径的数据,以及编译后的入口点。
FROM scratch
WORKDIR /data
COPY data/ .
COPY db /db
CMD ["/db"]
很快将开发一个更有用的入口点!这仅仅是库的非常基础的开始。
Python
您可以使用 Python 以交互方式运行相同的生成函数。
from cdb.main import ContainerDatabase
db = ContainerDatabase(path="data")
# <cdb.main.ContainerDatabase at 0x7fcaa9cb8950>
查看 db.files
中有一个文件生成器
db.files
<generator object recursive_find at 0x7fcaaa4ae950>
然后生成!如果不提供输出文件,则返回一个字符串。否则,返回输出文件名。
output = db.generate(output="db.go", force=True)
目前,解析元数据的函数名称在 cdb/functions.py 中,但您也可以定义自定义导入路径。这尚未经过测试,但很快就会进行测试。我们还将很快添加更多实际例子。
许可协议
- 免费软件:MPL 2.0 许可证
项目详情
cdb-0.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95195ea93dee9bbe9f1d2fd2d6060ec23e18405b83e04ace8d62d23fb44be953 |
|
MD5 | a5cd1fba810968a880fcb708b00c6c0c |
|
BLAKE2b-256 | bd416a1bed74b0c0294d2856d3a68bf26104e906a9d8d59d1d534dac6601618a |