由RocksDB持久键值存储支持的Graph API,用于快速存储(如NVMe技术)
项目描述
Basalt - C++和Python的图存储API
Basalt是一个由RocksDB持久键值存储支持的图存储API,用于快速存储,如NVMe技术。
文档目前托管在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'
手动构建和安装说明
要求
获取代码
此存储库会获取几个第三方库作为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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6769485d62eaf3ee1e8e4900489a0465e9da6be96fa2884921058fc537e4195d |
|
MD5 | 615738a7cd4b30b083b9c2a24fd9e66d |
|
BLAKE2b-256 | fae94d3b8eff717ca54616dce28139a7597e9cd2233fcda7c95c268a1e69b081 |