跳转到主要内容

由RocksDB持久键值存储支持的Graph API,用于快速存储(如NVMe技术)

项目描述

basalt logo

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

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

DOI Build Status

文档目前托管在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软件包

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

CMake

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

Python API

Pypi

Basalt的Python绑定可在Pypi上找到。

Blue Brain 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模块。要克隆它们,请在克隆basalt时使用git clone --recursive选项。

如果您已经克隆了basalt,可以使用以下命令获取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

要安装包

  • 使用pip: pip3 install -U .
  • 使用distutils: python3 setup.py install
  • 以创建二进制tar包
    • 最简单的方法:python3 setup.py bdist
    • wheel: 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编译器选项的值。例如,“native”
  • Basalt_PRECOMMIT:BOOL:在git提交之前启用自动检查
  • Basalt_CXX_OPTIMIZE:BOOL:以优化编译C++
  • Basalt_CXX_SYMBOLS:BOOL:以调试符号编译C++
  • Basalt_CXX_WARNINGS:BOOL=ON:以警告编译C++

有关更详细的列表,请参阅CMake构建目录中的CMakeCache.txt文件。

CMake目标

  • basalt:构建纯C++库(不包含Python绑定)
  • _basalt:构建包含Python绑定的C++库
  • unit-tests:构建一个测试C++纯库的C++可执行文件
  • all:构建上述3个目标
  • test:执行测试。建议使用ctest --output-on-failure -VV命令
  • install:安装纯C++库和CMake配置,以便在另一个CMake项目中轻松使用basalt

Python setuptools命令

以下是可用的主要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

嵌入式第三方库

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

  • Catch2:适用于单元测试、TDD和BDD单元测试库的现代、C++本地、头文件仅有的测试框架。
  • fmt:一个现代格式化库 (尚未包含在CMake构建中)
  • pybind11:C++11和Python之间的无缝互操作性
  • SpdLog:快速的C++日志库。

贡献

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

项目详情


下载文件

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

源分发

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

上传时间

由以下支持