跳转到主要内容

容器数据库(cdb)元数据生成工具。

项目描述

容器数据库(cdb)

这是为 containerdb 提供的Python支持工具,用于生成 数据容器。Python在生成任意数据结构方面更为友好,并且在数据科学社区中很受欢迎,因此我选择了它来生成元数据,而不是使用GoLang。

PyPI version

拥有您的数据并使用它!

assets/img/logo/logo.png

有关文档和完整示例,请参阅 vsoch.github.io/cdb。这些示例也位于 examples 文件夹中。

入门

什么是数据容器?

数据容器通常是一个无操作系统的容器,它针对提供数据而优化,无论是用于查询/搜索还是绑定分析。数据容器的特点应该是

  1. 它可以挂载到带有操作系统的容器中运行分析
  2. 可以独立与之交互以搜索关于数据的元数据
  3. 它不应该有操作系统。

我们如何生成一个?

生成过程相当简单!它归结为一个三步骤的多阶段构建

  1. 步骤1 我们安装 cdb 以生成一个用于我们的数据(内存数据库)的GoLang模板
  2. 步骤2 我们将二进制文件编译成一个入口点
  3. 步骤 3 我们将数据和二进制入口添加到临时容器中(没有操作系统)。

然后我们与之交互!本教程将向您展示使用简单的 Dockerfile 和数据文件夹执行多阶段构建的基本步骤。仓库根目录下的 Dockerfile 也是一个很好的例子。

使用方法

Docker 使用

预期通过 Docker 使用,因此您不必担心安装 Python、GoLang 和多阶段构建等基本操作。

  1. 生成 db.go 模板
  2. 编译它
  3. 将数据作为数据容器入口添加到临时容器中。

因此,要使用 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 (23.6 kB 查看哈希值)

上传时间 源代码

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面