# BanyanDB

[![Continuous Integration](https://github.com/apache/skywalking-banyandb/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/apache/skywalking-banyandb/actions/workflows/ci.yml)
[![Go Report Card](https://goreportcard.com/badge/github.com/apache/skywalking-banyandb)](https://goreportcard.com/report/github.com/apache/skywalking-banyandb)
[![GitHub release](https://img.shields.io/github/tag/apache/skywalking-banyandb.svg?label=release)](https://github.com/apache/skywalking-banyandb/releases)
[![GitHub release date](https://img.shields.io/github/release-date/apache/skywalking-banyandb.svg)](https://github.com/apache/skywalking-banyandb/releases)
[![GoDoc](https://img.shields.io/badge/Godoc-reference-blue.svg)](https://godoc.org/github.com/apache/skywalking-banyandb)

![](./assets/banyandb_small.jpg)

BanyanDB, as an observability database, aims to ingest, analyze and store Metrics, Tracing and Logging data.
It's designed to handle observability data generated by observability platform and APM system, like [Apache SkyWalking](https://github.com/apache/skywalking) etc.

## Introduction

BanyanDB, as an observability database, aims to ingest, analyze and store Metrics, Tracing, and Logging data. It's designed to handle observability data generated by Apache SkyWalking. Before BanyanDB emerges, the Databases that SkyWalking adopted are not ideal for the APM data model, especially for saving tracing and logging data. Consequently, There’s room to improve the performance and resource usage based on the nature of SkyWalking data patterns.

The database research community usually uses [RUM Conjecture](http://daslab.seas.harvard.edu/rum-conjecture/) to describe how a database access data. BanyanDB combines several access methods to build a comprehensive APM database to balance read cost, update cost, and memory overhead.

## Contact us

* Submit [an issue](https://github.com/apache/skywalking/issues/new) by selecting the [BanyanDB](https://github.com/apache/skywalking/issues?q=is%3Aopen+is%3Aissue+label%3Adatabase) component.
* Mail list: **dev@skywalking.apache.org**. Mail to dev-subscribe@skywalking.apache.org, follow the reply to subscribe the mail list.
* Send `Request to join SkyWalking slack` mail to the mail list(`dev@skywalking.apache.org`), we will invite you in.
* For Chinese speaker, send `[CN] Request to join SkyWalking slack` mail to the mail list(`dev@skywalking.apache.org`), we will invite you in.
* X (Twitter): [@BanyanDB](https://twitter.com/BanyanDB) and [@ASFSkyWalking](https://twitter.com/ASFSkyWalking)

## Documentation

- [Dev version doc](https://skywalking.apache.org/docs/skywalking-banyandb/next/readme/)
- [Latest release doc](https://skywalking.apache.org/docs/skywalking-banyandb/latest/readme/)

## Developer tooling

The `dump trace-source-catalog` subcommand validates the frozen downloaded trace benchmark shard and writes its deterministic
core and secondary-index ledgers. It requires `--source-path` and a new, outside-source `--output-path`; see the
[trace pipeline merge performance design](docs/design/trace-pipeline-merge-performance-test.md) for the source contract.

The `dump trace-generate-fixture` subcommand consumes that catalog and the immutable downloaded shard, verifies the default
SkyWalking sampler ratio, and writes the deterministic one-day core and secondary-index fixture through the data-node part
receipt path. It requires `--source-path`, `--catalog-path`, a new `--output-path`, and the built sampler `--plugin-path`.

The trace benchmark receiver can enable per-merge JSONL recording for the primary, boundary-drain, and cooldown phases.
Records classify actual sampler execution, preserve merge depth and input lineage, nest secondary-index work under its core
merge, and expose reconciled low-cardinality aggregates plus serial-attribution resource deltas.

## Contributing

For developers who want to contribute to this project, see the [Contribution Guide](CONTRIBUTING.md).

## License

[Apache 2.0 License.](LICENSE)
