Skip to main content

由 RocksDB 持久键值存储提供支持的图形 API,用于快速存储

项目描述

玄武岩标志

Basalt - C++ 和 Python 的图形存储 API

Basalt 是一个图形存储 API,由 RocksDB 持久键值存储提供支持,用于 NVMe 技术等快速存储。

DOI 构建状态

文档目前托管在 GitHub 上:[https://bluebrain.github.io/basalt]

发展阶段

Basalt 的 C++ 和 Python API 已经稳定,但未来可能会有大量的添加。因此,这个库的开发状态仍然是 beta。

用法

Python

图拓扑 API

class PLInfluences(basalt.GraphTopology):
    """A directed graph where vertices are programming languages.
    """
    directed(True)

    class Vertex(Enum):
        LANGUAGE = 1

    # Declare a vertex type
    vertex("language", Vertex.LANGUAGE)
    # Declare a directed edge between 2 programming languages
    # to represent how they relate.
    edge(Vertex.LANGUAGE, Vertex.LANGUAGE, name="influenced", plural="influenced")

    @classmethod
    def load_from_dbpedia(cls):
        # [...]

g = PLInfluences.load_from_dbpedia("/path/on/disk")
# Iterate over all vertices of type "languages"
for language in g.languages:
  print(language.id, language.data())
  # Iterate over all vertices connected to vertex `language`
  # through the `influenced` edge type.
  for influenced in language.influenced:
    print("  ", influenced.data())

低级 Python 绑定

# Load or initialize a graph on disk
g = basalt.UndirectedGraph("/path/on/disk")
# Add one vertex of type 0 and identifier 1
g.vertices.add((0, 1))
# Insert 10 vertices at once
# (10, 0), (10, 1), ... (10, 10)
g.vertices.add(numpy.full((10,), 1, dtype=numpy.int32), # types
               numpy.arange(10, dtype=numpy.int64)) # ids
# Connect 2 vertices
g.edges.add((0, 1), (1, 0))
# Connect vertex (0, 1) to several vertices at once
# (0,1)->(1,0), (0,1)->(1,1), ... (0,1)->(1,9)
g.edges.add((0, 1),
            numpy.full((9,), 1, dtype=numpy.int32),
            numpy.arange(9, dtype=numpy.int64)
# Commit changes on disk
g.commit()

C++ API

// Load or initialize a graph on disk
basalt::UndirectedGraph g("/path/on/disk");
// Add one vertex of type 0 and identifier 1
g.vertices().insert({0, 1});
// Add one vertex of type 0 and identifier 2
g.vertices().insert({0, 2});
// Iterate over vertices
for (const auto& vertex: g.vertices()) {
  std::clog << vertex << '\n';
}
// Connect both vertices
g.edges().insert({0, 1}, {0, 2}));
for (const auto& edge: g.edges()) {
  std::clog << edge.first << " -> " << edge.second << '\n';
}
// Commit changes on disk
g.commit();

安装

C++ API

柯南包

这个存储库提供了一个Conan包,可以轻松集成到您现有的项目中。

制作

也可以使用 CMake 构建和安装库,请参阅下面的构建部分

Python API

皮皮

玄武岩的 Python 绑定在Pypi上可用。

蓝脑 5 超级计算机

Basalt 目前作为 Blue Brain 5 超级计算机上的模块发布:

$ module purge
$ . /gpfs/bbp.cscs.ch/apps/hpc/jenkins/config/modules.sh
$ module load py-basalt
$ python3
Python 3.6.3 (default, Oct  3 2017, 07:47:49)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import basalt
>>> basalt.__version__
'0.2.2'
>>> basalt.__rocksdb_version__
'5.17.2'

手动构建和安装说明

要求

  • CMake构建系统,版本 3.5.1 或更高版本。
  • RocksDB,一个持久键值存储,版本 4.1.1 或更高版本。
  • Python 3 3.5 或更高版本。

获取代码

这个存储库抓取了一些第三方库作为git 模块。要在克隆玄武岩时克隆它们,请使用git clone --recursiveoption。

如果您已经克隆了玄武岩,您可以使用以下命令获取 git 子模块: git submodule update --recursive --init

建立图书馆 101

仅限 C++ 库

要构建 basalt C++ 共享库并运行测试:

cd /path/to/basalt
mkdir build
pushd build
cmake ..
CTEST_OUTPUT_ON_FAILURE=1 make all test

要安装库:

pushd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local .
make all install

Python 3 绑定

要构建和运行测试:

cd /path/to/basalt
python3 setup.py test

要安装软件包:

  • 点子pip3 install -U .
  • distutilspython3 setup.py install
  • 创建二进制压缩包:
    • 最简单的:python3 setup.py bdist
    • 轮子pip3 install wheel; python3 setup.py bdist_wheel
    • 可重定位档案:python3 setup.py bdist_dumb --relative

CMake 变量和目标

主要 CMake 变量:

  • Basalt_FORMATTING:BOOL:提供构建目标clang-format以检查 C++ 代码格式
  • Basalt_STATIC_ANALYSIS:BOOL:提供构建目标clang-tidy以执行 C++ 代码的静态分析
  • Basalt_ARCH: 赋予-m编译器选项的值。例如“原生”
  • Basalt_PRECOMMIT:BOOL: 在 git 提交之前启用自动检查
  • Basalt_CXX_OPTIMIZE:BOOL: 用优化编译 C++
  • Basalt_CXX_SYMBOLS:BOOL: 用调试符号编译 C++
  • Basalt_CXX_WARNINGS:BOOL=ON: 编译带有警告的 C++

如需更详细的列表,请参阅CMakeCache.txtCMake 构建目录中的文件。

CMake 目标:

  • basalt: 构建纯 C++ 库(没有 Python 绑定)
  • _basalt: 使用 Python 绑定构建 C++ 库
  • unit-tests: 构建一个 C++ 可执行文件来测试 C++ 纯库
  • all: 构建上面的 3 个目标
  • test: 执行测试。ctest --output-on-failure -VV建议改为执行命令
  • install:安装纯 C++ 库和在另一个 CMake 项目中轻松使用 basalt 所需的 CMake 配置

Python 设置工具命令

以下是可用的主要 Python setuptools 命令。

  • build: 构建原生库
  • test:构建和测试包。它还执行 C++ 单元测试以及 Sphinx 文档中的代码片段。
  • install: 安装 Python 包
  • doctest: 执行 Sphinx 文档中的代码片段
  • build_sphinx: 构建 Sphinx 文档

例如:python3 setup.py build_sphinx

文件布局

├── basalt ................... python code of the package
├── cmake
│   └── hpc-coding-conventions git module for C++ code guidelines
├── dev ...................... development related scripts
├── doc ...................... sphinx documentation source code
├── include
│   └── basalt ............... public headers of the C++ library
├── README.md ................ that's me!
├── src
│   ├── basalt ............... C++ library implementation
│   └── third_party .......... C++ libraries (mostly as git modules)
└── tests
    ├── benchmarks ........... scripts to execute before creating a git tag
    ├── py ................... python unit-tests
    └── unit ................. C++ unit-tests using Catch2

嵌入式第三方

外部库通过复制/粘贴或src/third_party目录中的 git 子模块包括在内。

  • Catch2:现代的、C++ 原生的、仅标头的、用于单元测试、TDD 和 BDD 单元测试库的测试框架。
  • fmt:一个现代格式库 (还不是 CMake 构建的一部分)
  • pybind11 : C++11 和 Python 之间的无缝可操作性
  • SpdLog:快速 C++ 日志库。

贡献

如果您想改进项目或发现任何问题,欢迎您的每一个贡献。请查看贡献指南以获取更多信息。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

basalt-0.2.9.tar.gz (1.2 MB 查看哈希

已上传 source