You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/05/09 12:16:07 UTC

[skywalking-banyandb] branch main updated: Add docs (#111)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git


The following commit(s) were added to refs/heads/main by this push:
     new 69420e6  Add docs (#111)
69420e6 is described below

commit 69420e64743b30e9b7fb6738a9eee8e00a632722
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Mon May 9 20:16:01 2022 +0800

    Add docs (#111)
---
 README.md                          |   26 +-
 api/Makefile                       |    2 +
 api/buf.gen.yaml                   |    4 +
 banyand/internal/cmd/standalone.go |    2 +
 banyand/liaison/grpc/server.go     |   10 +-
 docs/README.md                     |   26 +
 docs/api-reference.md              | 2729 ++++++++++++++++++++++++++++++++++++
 docs/clients.md                    |   38 +
 docs/crud/measure/query.md         |    7 +
 docs/crud/measure/write.md         |    7 +
 docs/crud/property/create.md       |    7 +
 docs/crud/property/delete.md       |    7 +
 docs/crud/property/query.md        |    7 +
 docs/crud/property/update.md       |    7 +
 docs/crud/stream/query.md          |    7 +
 docs/crud/stream/write.md          |    7 +
 docs/installation.md               |  118 ++
 docs/menu.yml                      |   50 +
 docs/schema.md                     |   58 +
 scripts/build/base.mk              |    2 +
 20 files changed, 3108 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index 976f6e0..f86f1ff 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,30 @@
-BanyanDB
-============
+# BanyanDB
 
 ![](https://github.com/apache/skywalking-banyandb/workflows/Build/badge.svg?branch=main)
 
 ![](./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. 
+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.
 
-# Resource
+## Introduction
 
- - [Data model design](https://docs.google.com/document/d/1XFzHWXSWyIC7AVNIx0ifQ0eJAJYfoPO-2j_lgbl9zu8/edit?usp=sharing)
+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. In this talk, I will share the details about BanyanDB based on this conjecture, explaining why BanyanDB is more effective and reliable than other storage layers.
+
+## Documents
+
+[Documents](./docs/)
+
+## Resource
+
+- [Data model design](https://docs.google.com/document/d/1XFzHWXSWyIC7AVNIx0ifQ0eJAJYfoPO-2j_lgbl9zu8/edit?usp=sharing)
+
+## Contributing
 
-# Contributing
 For developers who want to contribute to this project, see [Contribution Guide](CONTRIBUTING.md)
 
-# License
+## License
+
 [Apache 2.0 License.](/LICENSE)
diff --git a/api/Makefile b/api/Makefile
index ffe3cf2..b27dbaf 100644
--- a/api/Makefile
+++ b/api/Makefile
@@ -25,6 +25,8 @@ proto_dir := $(root_dir)/api/proto
 
 generate: $(BUF)
 	@PATH=$(tool_bin):$(proto_dir) $(BUF) generate
+	@echo "Protobuf schema files are compiled"
+	mv proto/api-reference.md $(root_dir)/docs
 
 lint: $(PROTOC)
 	@PATH=$(tool_bin):$(proto_dir) $(BUF) lint
diff --git a/api/buf.gen.yaml b/api/buf.gen.yaml
index 4cfe657..5997dc0 100644
--- a/api/buf.gen.yaml
+++ b/api/buf.gen.yaml
@@ -25,3 +25,7 @@ plugins:
   - name: go-grpc
     out: proto
     opt: paths=source_relative
+  - name: doc
+    out: proto
+    opt: markdown,api-reference.md
+    strategy: all
diff --git a/banyand/internal/cmd/standalone.go b/banyand/internal/cmd/standalone.go
index 2919212..709c119 100644
--- a/banyand/internal/cmd/standalone.go
+++ b/banyand/internal/cmd/standalone.go
@@ -19,6 +19,7 @@ package cmd
 
 import (
 	"context"
+	"fmt"
 	"os"
 
 	"github.com/spf13/cobra"
@@ -102,6 +103,7 @@ func newStandaloneCmd() *cobra.Command {
 			return logger.Init(logging)
 		},
 		RunE: func(cmd *cobra.Command, args []string) (err error) {
+			fmt.Print(logo)
 			logger.GetLogger().Info().Msg("starting as a standalone server")
 			// Spawn our go routines and wait for shutdown.
 			if err := g.Run(); err != nil {
diff --git a/banyand/liaison/grpc/server.go b/banyand/liaison/grpc/server.go
index d5bad43..a78c97d 100644
--- a/banyand/liaison/grpc/server.go
+++ b/banyand/liaison/grpc/server.go
@@ -144,11 +144,11 @@ func (s *Server) Name() string {
 
 func (s *Server) FlagSet() *run.FlagSet {
 	fs := run.NewFlagSet("grpc")
-	fs.IntVarP(&s.maxRecvMsgSize, "max-recv-msg-size", "", defaultRecvSize, "The size of max receiving message")
-	fs.BoolVarP(&s.tls, "tls", "", false, "Connection uses TLS if true, else plain TCP")
-	fs.StringVarP(&s.certFile, "cert-file", "", "", "The TLS cert file")
-	fs.StringVarP(&s.keyFile, "key-file", "", "", "The TLS key file")
-	fs.StringVarP(&s.addr, "addr", "", ":17912", "The address of banyand listens")
+	fs.IntVarP(&s.maxRecvMsgSize, "max-recv-msg-size", "", defaultRecvSize, "the size of max receiving message")
+	fs.BoolVarP(&s.tls, "tls", "", false, "connection uses TLS if true, else plain TCP")
+	fs.StringVarP(&s.certFile, "cert-file", "", "", "the TLS cert file")
+	fs.StringVarP(&s.keyFile, "key-file", "", "", "the TLS key file")
+	fs.StringVarP(&s.addr, "addr", "", ":17912", "the address of banyand listens")
 	return fs
 }
 
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..cd6c79d
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,26 @@
+# Welcome
+
+## Welcome to the BanyanDB
+
+Here you can learn all you need to know about BanyanDB. 
+
+- **Installation**. Instruments about how to download and onboard BanyanDB server, Banyand.
+- **Clients**. Some native clients to access Banyand.
+- **Schema**. Pivotal database native resources.
+- **CRUD Operations**. To create, read, update, and delete data points or entities on resources in the schema.
+
+You might also find these links interesting:
+
+- The latest and old releases are all available
+  at [Apache SkyWalking release page](https://skywalking.apache.org/downloads/). The change logs can be
+  found [here](https://github.com/apache/skywalking/tree/master/changes).
+
+- [SkyWalking WIKI](https://cwiki.apache.org/confluence/display/SKYWALKING/Home) hosts the context of some changes and
+  events.
+
+- You can find the conference schedules, video recordings, and articles about SkyWalking in
+  the [community resource catalog](https://github.com/OpenSkywalking/Community).
+
+We're always looking for help to improve our documentation and codes, so please don’t hesitate
+to [file an issue](https://github.com/apache/skywalking/issues/new) if you see any problems. Or better yet, directly
+contribute by submitting a pull request to help us get better!
diff --git a/docs/api-reference.md b/docs/api-reference.md
new file mode 100644
index 0000000..f17682c
--- /dev/null
+++ b/docs/api-reference.md
@@ -0,0 +1,2729 @@
+# Protocol Documentation
+<a name="top"></a>
+
+## Table of Contents
+
+- [banyandb/common/v1/common.proto](#banyandb_common_v1_common-proto)
+    - [Group](#banyandb-common-v1-Group)
+    - [Metadata](#banyandb-common-v1-Metadata)
+    - [ResourceOpts](#banyandb-common-v1-ResourceOpts)
+  
+    - [Catalog](#banyandb-common-v1-Catalog)
+  
+- [banyandb/database/v1/database.proto](#banyandb_database_v1_database-proto)
+    - [Node](#banyandb-database-v1-Node)
+    - [Shard](#banyandb-database-v1-Shard)
+  
+- [banyandb/model/v1/common.proto](#banyandb_model_v1_common-proto)
+    - [FieldValue](#banyandb-model-v1-FieldValue)
+    - [ID](#banyandb-model-v1-ID)
+    - [Int](#banyandb-model-v1-Int)
+    - [IntArray](#banyandb-model-v1-IntArray)
+    - [Str](#banyandb-model-v1-Str)
+    - [StrArray](#banyandb-model-v1-StrArray)
+    - [TagFamilyForWrite](#banyandb-model-v1-TagFamilyForWrite)
+    - [TagValue](#banyandb-model-v1-TagValue)
+  
+    - [AggregationFunction](#banyandb-model-v1-AggregationFunction)
+  
+- [banyandb/model/v1/query.proto](#banyandb_model_v1_query-proto)
+    - [Condition](#banyandb-model-v1-Condition)
+    - [Criteria](#banyandb-model-v1-Criteria)
+    - [QueryOrder](#banyandb-model-v1-QueryOrder)
+    - [Tag](#banyandb-model-v1-Tag)
+    - [TagFamily](#banyandb-model-v1-TagFamily)
+    - [TagProjection](#banyandb-model-v1-TagProjection)
+    - [TagProjection.TagFamily](#banyandb-model-v1-TagProjection-TagFamily)
+    - [TimeRange](#banyandb-model-v1-TimeRange)
+  
+    - [Condition.BinaryOp](#banyandb-model-v1-Condition-BinaryOp)
+    - [Sort](#banyandb-model-v1-Sort)
+  
+- [banyandb/database/v1/schema.proto](#banyandb_database_v1_schema-proto)
+    - [Entity](#banyandb-database-v1-Entity)
+    - [FieldSpec](#banyandb-database-v1-FieldSpec)
+    - [IndexRule](#banyandb-database-v1-IndexRule)
+    - [IndexRuleBinding](#banyandb-database-v1-IndexRuleBinding)
+    - [Measure](#banyandb-database-v1-Measure)
+    - [Stream](#banyandb-database-v1-Stream)
+    - [Subject](#banyandb-database-v1-Subject)
+    - [TagFamilySpec](#banyandb-database-v1-TagFamilySpec)
+    - [TagSpec](#banyandb-database-v1-TagSpec)
+    - [TopNAggregation](#banyandb-database-v1-TopNAggregation)
+  
+    - [CompressionMethod](#banyandb-database-v1-CompressionMethod)
+    - [EncodingMethod](#banyandb-database-v1-EncodingMethod)
+    - [FieldType](#banyandb-database-v1-FieldType)
+    - [IndexRule.Location](#banyandb-database-v1-IndexRule-Location)
+    - [IndexRule.Type](#banyandb-database-v1-IndexRule-Type)
+    - [TagType](#banyandb-database-v1-TagType)
+  
+- [banyandb/database/v1/event.proto](#banyandb_database_v1_event-proto)
+    - [EntityEvent](#banyandb-database-v1-EntityEvent)
+    - [EntityEvent.TagLocator](#banyandb-database-v1-EntityEvent-TagLocator)
+    - [ShardEvent](#banyandb-database-v1-ShardEvent)
+  
+    - [Action](#banyandb-database-v1-Action)
+  
+- [banyandb/database/v1/rpc.proto](#banyandb_database_v1_rpc-proto)
+    - [GroupRegistryServiceCreateRequest](#banyandb-database-v1-GroupRegistryServiceCreateRequest)
+    - [GroupRegistryServiceCreateResponse](#banyandb-database-v1-GroupRegistryServiceCreateResponse)
+    - [GroupRegistryServiceDeleteRequest](#banyandb-database-v1-GroupRegistryServiceDeleteRequest)
+    - [GroupRegistryServiceDeleteResponse](#banyandb-database-v1-GroupRegistryServiceDeleteResponse)
+    - [GroupRegistryServiceGetRequest](#banyandb-database-v1-GroupRegistryServiceGetRequest)
+    - [GroupRegistryServiceGetResponse](#banyandb-database-v1-GroupRegistryServiceGetResponse)
+    - [GroupRegistryServiceListRequest](#banyandb-database-v1-GroupRegistryServiceListRequest)
+    - [GroupRegistryServiceListResponse](#banyandb-database-v1-GroupRegistryServiceListResponse)
+    - [GroupRegistryServiceUpdateRequest](#banyandb-database-v1-GroupRegistryServiceUpdateRequest)
+    - [GroupRegistryServiceUpdateResponse](#banyandb-database-v1-GroupRegistryServiceUpdateResponse)
+    - [IndexRuleBindingRegistryServiceCreateRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceCreateRequest)
+    - [IndexRuleBindingRegistryServiceCreateResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceCreateResponse)
+    - [IndexRuleBindingRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteRequest)
+    - [IndexRuleBindingRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteResponse)
+    - [IndexRuleBindingRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetRequest)
+    - [IndexRuleBindingRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetResponse)
+    - [IndexRuleBindingRegistryServiceListRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceListRequest)
+    - [IndexRuleBindingRegistryServiceListResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceListResponse)
+    - [IndexRuleBindingRegistryServiceUpdateRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceUpdateRequest)
+    - [IndexRuleBindingRegistryServiceUpdateResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceUpdateResponse)
+    - [IndexRuleRegistryServiceCreateRequest](#banyandb-database-v1-IndexRuleRegistryServiceCreateRequest)
+    - [IndexRuleRegistryServiceCreateResponse](#banyandb-database-v1-IndexRuleRegistryServiceCreateResponse)
+    - [IndexRuleRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleRegistryServiceDeleteRequest)
+    - [IndexRuleRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleRegistryServiceDeleteResponse)
+    - [IndexRuleRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleRegistryServiceGetRequest)
+    - [IndexRuleRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleRegistryServiceGetResponse)
+    - [IndexRuleRegistryServiceListRequest](#banyandb-database-v1-IndexRuleRegistryServiceListRequest)
+    - [IndexRuleRegistryServiceListResponse](#banyandb-database-v1-IndexRuleRegistryServiceListResponse)
+    - [IndexRuleRegistryServiceUpdateRequest](#banyandb-database-v1-IndexRuleRegistryServiceUpdateRequest)
+    - [IndexRuleRegistryServiceUpdateResponse](#banyandb-database-v1-IndexRuleRegistryServiceUpdateResponse)
+    - [MeasureRegistryServiceCreateRequest](#banyandb-database-v1-MeasureRegistryServiceCreateRequest)
+    - [MeasureRegistryServiceCreateResponse](#banyandb-database-v1-MeasureRegistryServiceCreateResponse)
+    - [MeasureRegistryServiceDeleteRequest](#banyandb-database-v1-MeasureRegistryServiceDeleteRequest)
+    - [MeasureRegistryServiceDeleteResponse](#banyandb-database-v1-MeasureRegistryServiceDeleteResponse)
+    - [MeasureRegistryServiceGetRequest](#banyandb-database-v1-MeasureRegistryServiceGetRequest)
+    - [MeasureRegistryServiceGetResponse](#banyandb-database-v1-MeasureRegistryServiceGetResponse)
+    - [MeasureRegistryServiceListRequest](#banyandb-database-v1-MeasureRegistryServiceListRequest)
+    - [MeasureRegistryServiceListResponse](#banyandb-database-v1-MeasureRegistryServiceListResponse)
+    - [MeasureRegistryServiceUpdateRequest](#banyandb-database-v1-MeasureRegistryServiceUpdateRequest)
+    - [MeasureRegistryServiceUpdateResponse](#banyandb-database-v1-MeasureRegistryServiceUpdateResponse)
+    - [StreamRegistryServiceCreateRequest](#banyandb-database-v1-StreamRegistryServiceCreateRequest)
+    - [StreamRegistryServiceCreateResponse](#banyandb-database-v1-StreamRegistryServiceCreateResponse)
+    - [StreamRegistryServiceDeleteRequest](#banyandb-database-v1-StreamRegistryServiceDeleteRequest)
+    - [StreamRegistryServiceDeleteResponse](#banyandb-database-v1-StreamRegistryServiceDeleteResponse)
+    - [StreamRegistryServiceGetRequest](#banyandb-database-v1-StreamRegistryServiceGetRequest)
+    - [StreamRegistryServiceGetResponse](#banyandb-database-v1-StreamRegistryServiceGetResponse)
+    - [StreamRegistryServiceListRequest](#banyandb-database-v1-StreamRegistryServiceListRequest)
+    - [StreamRegistryServiceListResponse](#banyandb-database-v1-StreamRegistryServiceListResponse)
+    - [StreamRegistryServiceUpdateRequest](#banyandb-database-v1-StreamRegistryServiceUpdateRequest)
+    - [StreamRegistryServiceUpdateResponse](#banyandb-database-v1-StreamRegistryServiceUpdateResponse)
+    - [TopNAggregationRegistryServiceCreateRequest](#banyandb-database-v1-TopNAggregationRegistryServiceCreateRequest)
+    - [TopNAggregationRegistryServiceCreateResponse](#banyandb-database-v1-TopNAggregationRegistryServiceCreateResponse)
+    - [TopNAggregationRegistryServiceDeleteRequest](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteRequest)
+    - [TopNAggregationRegistryServiceDeleteResponse](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteResponse)
+    - [TopNAggregationRegistryServiceGetRequest](#banyandb-database-v1-TopNAggregationRegistryServiceGetRequest)
+    - [TopNAggregationRegistryServiceGetResponse](#banyandb-database-v1-TopNAggregationRegistryServiceGetResponse)
+    - [TopNAggregationRegistryServiceListRequest](#banyandb-database-v1-TopNAggregationRegistryServiceListRequest)
+    - [TopNAggregationRegistryServiceListResponse](#banyandb-database-v1-TopNAggregationRegistryServiceListResponse)
+    - [TopNAggregationRegistryServiceUpdateRequest](#banyandb-database-v1-TopNAggregationRegistryServiceUpdateRequest)
+    - [TopNAggregationRegistryServiceUpdateResponse](#banyandb-database-v1-TopNAggregationRegistryServiceUpdateResponse)
+  
+    - [GroupRegistryService](#banyandb-database-v1-GroupRegistryService)
+    - [IndexRuleBindingRegistryService](#banyandb-database-v1-IndexRuleBindingRegistryService)
+    - [IndexRuleRegistryService](#banyandb-database-v1-IndexRuleRegistryService)
+    - [MeasureRegistryService](#banyandb-database-v1-MeasureRegistryService)
+    - [StreamRegistryService](#banyandb-database-v1-StreamRegistryService)
+    - [TopNAggregationRegistryService](#banyandb-database-v1-TopNAggregationRegistryService)
+  
+- [banyandb/measure/v1/query.proto](#banyandb_measure_v1_query-proto)
+    - [DataPoint](#banyandb-measure-v1-DataPoint)
+    - [DataPoint.Field](#banyandb-measure-v1-DataPoint-Field)
+    - [QueryRequest](#banyandb-measure-v1-QueryRequest)
+    - [QueryRequest.Aggregation](#banyandb-measure-v1-QueryRequest-Aggregation)
+    - [QueryRequest.FieldProjection](#banyandb-measure-v1-QueryRequest-FieldProjection)
+    - [QueryRequest.GroupBy](#banyandb-measure-v1-QueryRequest-GroupBy)
+    - [QueryRequest.Top](#banyandb-measure-v1-QueryRequest-Top)
+    - [QueryResponse](#banyandb-measure-v1-QueryResponse)
+  
+- [banyandb/measure/v1/write.proto](#banyandb_measure_v1_write-proto)
+    - [DataPointValue](#banyandb-measure-v1-DataPointValue)
+    - [InternalWriteRequest](#banyandb-measure-v1-InternalWriteRequest)
+    - [WriteRequest](#banyandb-measure-v1-WriteRequest)
+    - [WriteResponse](#banyandb-measure-v1-WriteResponse)
+  
+- [banyandb/measure/v1/topn.proto](#banyandb_measure_v1_topn-proto)
+    - [TopNList](#banyandb-measure-v1-TopNList)
+    - [TopNList.Item](#banyandb-measure-v1-TopNList-Item)
+    - [TopNRequest](#banyandb-measure-v1-TopNRequest)
+    - [TopNResponse](#banyandb-measure-v1-TopNResponse)
+  
+- [banyandb/measure/v1/rpc.proto](#banyandb_measure_v1_rpc-proto)
+    - [MeasureService](#banyandb-measure-v1-MeasureService)
+  
+- [banyandb/property/v1/property.proto](#banyandb_property_v1_property-proto)
+    - [Metadata](#banyandb-property-v1-Metadata)
+    - [Property](#banyandb-property-v1-Property)
+  
+- [banyandb/property/v1/rpc.proto](#banyandb_property_v1_rpc-proto)
+    - [CreateRequest](#banyandb-property-v1-CreateRequest)
+    - [CreateResponse](#banyandb-property-v1-CreateResponse)
+    - [DeleteRequest](#banyandb-property-v1-DeleteRequest)
+    - [DeleteResponse](#banyandb-property-v1-DeleteResponse)
+    - [GetRequest](#banyandb-property-v1-GetRequest)
+    - [GetResponse](#banyandb-property-v1-GetResponse)
+    - [ListRequest](#banyandb-property-v1-ListRequest)
+    - [ListResponse](#banyandb-property-v1-ListResponse)
+    - [UpdateRequest](#banyandb-property-v1-UpdateRequest)
+    - [UpdateResponse](#banyandb-property-v1-UpdateResponse)
+  
+    - [PropertyService](#banyandb-property-v1-PropertyService)
+  
+- [banyandb/stream/v1/query.proto](#banyandb_stream_v1_query-proto)
+    - [Element](#banyandb-stream-v1-Element)
+    - [QueryRequest](#banyandb-stream-v1-QueryRequest)
+    - [QueryResponse](#banyandb-stream-v1-QueryResponse)
+  
+- [banyandb/stream/v1/write.proto](#banyandb_stream_v1_write-proto)
+    - [ElementValue](#banyandb-stream-v1-ElementValue)
+    - [InternalWriteRequest](#banyandb-stream-v1-InternalWriteRequest)
+    - [WriteRequest](#banyandb-stream-v1-WriteRequest)
+    - [WriteResponse](#banyandb-stream-v1-WriteResponse)
+  
+- [banyandb/stream/v1/rpc.proto](#banyandb_stream_v1_rpc-proto)
+    - [StreamService](#banyandb-stream-v1-StreamService)
+  
+- [Scalar Value Types](#scalar-value-types)
+
+
+
+<a name="banyandb_common_v1_common-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/common/v1/common.proto
+
+
+
+<a name="banyandb-common-v1-Group"></a>
+
+### Group
+Group is an internal object for Group management
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [Metadata](#banyandb-common-v1-Metadata) |  | metadata define the group&#39;s identity |
+| catalog | [Catalog](#banyandb-common-v1-Catalog) |  | catalog denotes which type of data the group contains |
+| resource_opts | [ResourceOpts](#banyandb-common-v1-ResourceOpts) |  | resourceOpts indicates the structure of the underlying kv storage |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when resources of the group are updated |
+
+
+
+
+
+
+<a name="banyandb-common-v1-Metadata"></a>
+
+### Metadata
+Metadata is for multi-tenant, multi-model use
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  | group contains a set of options, like retention policy, max |
+| name | [string](#string) |  | name of the entity |
+| id | [uint32](#uint32) |  |  |
+| create_revision | [int64](#int64) |  | readonly. create_revision is the revision of last creation on this key. |
+| mod_revision | [int64](#int64) |  | readonly. mod_revision is the revision of last modification on this key. |
+
+
+
+
+
+
+<a name="banyandb-common-v1-ResourceOpts"></a>
+
+### ResourceOpts
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| shard_num | [uint32](#uint32) |  | shard_num is the number of shards |
+| block_num | [uint32](#uint32) |  | block_num specific how many blocks in a segment |
+| ttl | [string](#string) |  | ttl indicates time to live, how long the data will be cached |
+
+
+
+
+
+ 
+
+
+<a name="banyandb-common-v1-Catalog"></a>
+
+### Catalog
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| CATALOG_UNSPECIFIED | 0 |  |
+| CATALOG_STREAM | 1 |  |
+| CATALOG_MEASURE | 2 |  |
+
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_database_v1_database-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/database/v1/database.proto
+
+
+
+<a name="banyandb-database-v1-Node"></a>
+
+### Node
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| id | [string](#string) |  |  |
+| addr | [string](#string) |  |  |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+| created_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-Shard"></a>
+
+### Shard
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| id | [uint64](#uint64) |  |  |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+| catalog | [banyandb.common.v1.Catalog](#banyandb-common-v1-Catalog) |  |  |
+| node | [Node](#banyandb-database-v1-Node) |  |  |
+| total | [uint32](#uint32) |  |  |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+| created_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_model_v1_common-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/model/v1/common.proto
+
+
+
+<a name="banyandb-model-v1-FieldValue"></a>
+
+### FieldValue
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| null | [google.protobuf.NullValue](#google-protobuf-NullValue) |  |  |
+| str | [Str](#banyandb-model-v1-Str) |  |  |
+| int | [Int](#banyandb-model-v1-Int) |  |  |
+| binary_data | [bytes](#bytes) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-ID"></a>
+
+### ID
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| value | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-Int"></a>
+
+### Int
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| value | [int64](#int64) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-IntArray"></a>
+
+### IntArray
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| value | [int64](#int64) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-Str"></a>
+
+### Str
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| value | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-StrArray"></a>
+
+### StrArray
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| value | [string](#string) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-TagFamilyForWrite"></a>
+
+### TagFamilyForWrite
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| tags | [TagValue](#banyandb-model-v1-TagValue) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-TagValue"></a>
+
+### TagValue
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| null | [google.protobuf.NullValue](#google-protobuf-NullValue) |  |  |
+| str | [Str](#banyandb-model-v1-Str) |  |  |
+| str_array | [StrArray](#banyandb-model-v1-StrArray) |  |  |
+| int | [Int](#banyandb-model-v1-Int) |  |  |
+| int_array | [IntArray](#banyandb-model-v1-IntArray) |  |  |
+| binary_data | [bytes](#bytes) |  |  |
+| id | [ID](#banyandb-model-v1-ID) |  |  |
+
+
+
+
+
+ 
+
+
+<a name="banyandb-model-v1-AggregationFunction"></a>
+
+### AggregationFunction
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| AGGREGATION_FUNCTION_UNSPECIFIED | 0 |  |
+| AGGREGATION_FUNCTION_MEAN | 1 |  |
+| AGGREGATION_FUNCTION_MAX | 2 |  |
+| AGGREGATION_FUNCTION_MIN | 3 |  |
+| AGGREGATION_FUNCTION_COUNT | 4 |  |
+| AGGREGATION_FUNCTION_SUM | 5 |  |
+
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_model_v1_query-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/model/v1/query.proto
+
+
+
+<a name="banyandb-model-v1-Condition"></a>
+
+### Condition
+Condition consists of the query condition with a single binary operator to be imposed
+For 1:1 BinaryOp, values in condition must be an array with length = 1,
+while for 1:N BinaryOp, values can be an array with length &gt;= 1.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| op | [Condition.BinaryOp](#banyandb-model-v1-Condition-BinaryOp) |  |  |
+| value | [TagValue](#banyandb-model-v1-TagValue) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-Criteria"></a>
+
+### Criteria
+tag_families are indexed.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| tag_family_name | [string](#string) |  |  |
+| conditions | [Condition](#banyandb-model-v1-Condition) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-QueryOrder"></a>
+
+### QueryOrder
+QueryOrder means a Sort operation to be done for a given index rule.
+The index_rule_name refers to the name of a index rule bound to the subject.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule_name | [string](#string) |  |  |
+| sort | [Sort](#banyandb-model-v1-Sort) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-Tag"></a>
+
+### Tag
+Pair is the building block of a record which is equivalent to a key-value pair.
+In the context of Trace, it could be metadata of a trace such as service_name, service_instance, etc.
+Besides, other tags are organized in key-value pair in the underlying storage layer.
+One should notice that the values can be a multi-value.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| key | [string](#string) |  |  |
+| value | [TagValue](#banyandb-model-v1-TagValue) |  |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-TagFamily"></a>
+
+### TagFamily
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| tags | [Tag](#banyandb-model-v1-Tag) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-TagProjection"></a>
+
+### TagProjection
+TagProjection is used to select the names of keys to be returned.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| tag_families | [TagProjection.TagFamily](#banyandb-model-v1-TagProjection-TagFamily) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-TagProjection-TagFamily"></a>
+
+### TagProjection.TagFamily
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| tags | [string](#string) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-model-v1-TimeRange"></a>
+
+### TimeRange
+TimeRange is a range query for uint64,
+the range here follows left-inclusive and right-exclusive rule, i.e. [begin, end) if both edges exist
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| begin | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+| end | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+
+
+
+
+
+ 
+
+
+<a name="banyandb-model-v1-Condition-BinaryOp"></a>
+
+### Condition.BinaryOp
+BinaryOp specifies the operation imposed to the given query condition
+For EQ, NE, LT, GT, LE and GE, only one operand should be given, i.e. one-to-one relationship.
+HAVING and NOT_HAVING allow multi-value to be the operand such as array/vector, i.e. one-to-many relationship.
+For example, &#34;keyA&#34; contains &#34;valueA&#34; **and** &#34;valueB&#34;
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| BINARY_OP_UNSPECIFIED | 0 |  |
+| BINARY_OP_EQ | 1 |  |
+| BINARY_OP_NE | 2 |  |
+| BINARY_OP_LT | 3 |  |
+| BINARY_OP_GT | 4 |  |
+| BINARY_OP_LE | 5 |  |
+| BINARY_OP_GE | 6 |  |
+| BINARY_OP_HAVING | 7 |  |
+| BINARY_OP_NOT_HAVING | 8 |  |
+| BINARY_OP_IN | 9 |  |
+| BINARY_OP_NOT_IN | 10 |  |
+
+
+
+<a name="banyandb-model-v1-Sort"></a>
+
+### Sort
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| SORT_UNSPECIFIED | 0 |  |
+| SORT_DESC | 1 |  |
+| SORT_ASC | 2 |  |
+
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_database_v1_schema-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/database/v1/schema.proto
+
+
+
+<a name="banyandb-database-v1-Entity"></a>
+
+### Entity
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| tag_names | [string](#string) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-FieldSpec"></a>
+
+### FieldSpec
+FieldSpec is the specification of field
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  | name is the identity of a field |
+| field_type | [FieldType](#banyandb-database-v1-FieldType) |  | field_type denotes the type of field value |
+| encoding_method | [EncodingMethod](#banyandb-database-v1-EncodingMethod) |  | encoding_method indicates how to encode data during writing |
+| compression_method | [CompressionMethod](#banyandb-database-v1-CompressionMethod) |  | compression_method indicates how to compress data during writing |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRule"></a>
+
+### IndexRule
+IndexRule defines how to generate indices based on tags and the index type
+IndexRule should bind to a subject through an IndexRuleBinding to generate proper indices.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata define the rule&#39;s identity |
+| tags | [string](#string) | repeated | tags are the combination that refers to an indexed object If the elements in tags are more than 1, the object will generate a multi-tag index Caveat: All tags in a multi-tag MUST have an identical IndexType |
+| type | [IndexRule.Type](#banyandb-database-v1-IndexRule-Type) |  | type is the IndexType of this IndexObject. |
+| location | [IndexRule.Location](#banyandb-database-v1-IndexRule-Location) |  | location indicates where to store index. |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when the IndexRule is updated |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBinding"></a>
+
+### IndexRuleBinding
+IndexRuleBinding is a bridge to connect severalIndexRules to a subject
+This binding is valid between begin_at_nanoseconds and expire_at_nanoseconds, that provides flexible strategies
+to control how to generate time series indices.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is the identity of this binding |
+| rules | [string](#string) | repeated | rules refers to the IndexRule |
+| subject | [Subject](#banyandb-database-v1-Subject) |  | subject indicates the subject of binding action |
+| begin_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | begin_at_nanoseconds is the timestamp, after which the binding will be active |
+| expire_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | expire_at_nanoseconds it the timestamp, after which the binding will be inactive expire_at_nanoseconds must be larger than begin_at_nanoseconds |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when the IndexRuleBinding is updated |
+
+
+
+
+
+
+<a name="banyandb-database-v1-Measure"></a>
+
+### Measure
+Measure intends to store data point
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is the identity of a measure |
+| tag_families | [TagFamilySpec](#banyandb-database-v1-TagFamilySpec) | repeated | tag_families are for filter measures |
+| fields | [FieldSpec](#banyandb-database-v1-FieldSpec) | repeated | fields denote measure values |
+| entity | [Entity](#banyandb-database-v1-Entity) |  | entity indicates which tags will be to generate a series and shard a measure |
+| interval | [string](#string) |  | interval indicates how frequently to send a data point valid time units are &#34;ns&#34;, &#34;us&#34; (or &#34;µs&#34;), &#34;ms&#34;, &#34;s&#34;, &#34;m&#34;, &#34;h&#34;, &#34;d&#34;. |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when the measure is updated |
+
+
+
+
+
+
+<a name="banyandb-database-v1-Stream"></a>
+
+### Stream
+Stream intends to store streaming data, for example, traces or logs
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is the identity of a trace series |
+| tag_families | [TagFamilySpec](#banyandb-database-v1-TagFamilySpec) | repeated | tag_families |
+| entity | [Entity](#banyandb-database-v1-Entity) |  | entity indicates how to generate a series and shard a stream |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when the stream is updated |
+
+
+
+
+
+
+<a name="banyandb-database-v1-Subject"></a>
+
+### Subject
+Subject defines which stream or measure would generate indices
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| catalog | [banyandb.common.v1.Catalog](#banyandb-common-v1-Catalog) |  | catalog is where the subject belongs to |
+| name | [string](#string) |  | name refers to a stream or measure in a particular catalog |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TagFamilySpec"></a>
+
+### TagFamilySpec
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| tags | [TagSpec](#banyandb-database-v1-TagSpec) | repeated | tags defines accepted tags |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TagSpec"></a>
+
+### TagSpec
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| type | [TagType](#banyandb-database-v1-TagType) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregation"></a>
+
+### TopNAggregation
+TopNAggregation generates offline TopN statistics for a measure&#39;s TopN approximation
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is the identity of an aggregation |
+| source_measure | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | source_measure denotes the data source of this aggregation |
+| field_name | [string](#string) |  | field_name is the name of field used for ranking |
+| field_value_sort | [banyandb.model.v1.Sort](#banyandb-model-v1-Sort) |  | field_value_sort indicates how to sort fields ASC: bottomN DESC: topN UNSPECIFIED: topN &#43; bottomN |
+| group_by_tag_names | [string](#string) | repeated | group_by_tag_names groups data points into statistical counters |
+| criteria | [banyandb.model.v1.Criteria](#banyandb-model-v1-Criteria) | repeated | criteria select partial data points from measure |
+| counters_number | [int32](#int32) |  | counters_number sets the number of counters to be tracked. The default value is 1000 |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when the measure is updated |
+
+
+
+
+
+ 
+
+
+<a name="banyandb-database-v1-CompressionMethod"></a>
+
+### CompressionMethod
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| COMPRESSION_METHOD_UNSPECIFIED | 0 |  |
+| COMPRESSION_METHOD_ZSTD | 1 |  |
+
+
+
+<a name="banyandb-database-v1-EncodingMethod"></a>
+
+### EncodingMethod
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| ENCODING_METHOD_UNSPECIFIED | 0 |  |
+| ENCODING_METHOD_GORILLA | 1 |  |
+
+
+
+<a name="banyandb-database-v1-FieldType"></a>
+
+### FieldType
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| FIELD_TYPE_UNSPECIFIED | 0 |  |
+| FIELD_TYPE_STRING | 1 |  |
+| FIELD_TYPE_INT | 2 |  |
+| FIELD_TYPE_DATA_BINARY | 3 |  |
+
+
+
+<a name="banyandb-database-v1-IndexRule-Location"></a>
+
+### IndexRule.Location
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| LOCATION_UNSPECIFIED | 0 |  |
+| LOCATION_SERIES | 1 |  |
+| LOCATION_GLOBAL | 2 |  |
+
+
+
+<a name="banyandb-database-v1-IndexRule-Type"></a>
+
+### IndexRule.Type
+Type determine the index structure under the hood
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| TYPE_UNSPECIFIED | 0 |  |
+| TYPE_TREE | 1 |  |
+| TYPE_INVERTED | 2 |  |
+
+
+
+<a name="banyandb-database-v1-TagType"></a>
+
+### TagType
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| TAG_TYPE_UNSPECIFIED | 0 |  |
+| TAG_TYPE_STRING | 1 |  |
+| TAG_TYPE_INT | 2 |  |
+| TAG_TYPE_STRING_ARRAY | 3 |  |
+| TAG_TYPE_INT_ARRAY | 4 |  |
+| TAG_TYPE_DATA_BINARY | 5 |  |
+| TAG_TYPE_ID | 6 |  |
+
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_database_v1_event-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/database/v1/event.proto
+
+
+
+<a name="banyandb-database-v1-EntityEvent"></a>
+
+### EntityEvent
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| subject | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+| entity_locator | [EntityEvent.TagLocator](#banyandb-database-v1-EntityEvent-TagLocator) | repeated |  |
+| action | [Action](#banyandb-database-v1-Action) |  |  |
+| time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-EntityEvent-TagLocator"></a>
+
+### EntityEvent.TagLocator
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| family_offset | [uint32](#uint32) |  |  |
+| tag_offset | [uint32](#uint32) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-ShardEvent"></a>
+
+### ShardEvent
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| shard | [Shard](#banyandb-database-v1-Shard) |  |  |
+| action | [Action](#banyandb-database-v1-Action) |  |  |
+| time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  |  |
+
+
+
+
+
+ 
+
+
+<a name="banyandb-database-v1-Action"></a>
+
+### Action
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| ACTION_UNSPECIFIED | 0 |  |
+| ACTION_PUT | 1 |  |
+| ACTION_DELETE | 2 |  |
+
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_database_v1_rpc-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/database/v1/rpc.proto
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceCreateRequest"></a>
+
+### GroupRegistryServiceCreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [banyandb.common.v1.Group](#banyandb-common-v1-Group) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceCreateResponse"></a>
+
+### GroupRegistryServiceCreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceDeleteRequest"></a>
+
+### GroupRegistryServiceDeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceDeleteResponse"></a>
+
+### GroupRegistryServiceDeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceGetRequest"></a>
+
+### GroupRegistryServiceGetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceGetResponse"></a>
+
+### GroupRegistryServiceGetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [banyandb.common.v1.Group](#banyandb-common-v1-Group) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceListRequest"></a>
+
+### GroupRegistryServiceListRequest
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceListResponse"></a>
+
+### GroupRegistryServiceListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [banyandb.common.v1.Group](#banyandb-common-v1-Group) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceUpdateRequest"></a>
+
+### GroupRegistryServiceUpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [banyandb.common.v1.Group](#banyandb-common-v1-Group) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-GroupRegistryServiceUpdateResponse"></a>
+
+### GroupRegistryServiceUpdateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceCreateRequest"></a>
+
+### IndexRuleBindingRegistryServiceCreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule_binding | [IndexRuleBinding](#banyandb-database-v1-IndexRuleBinding) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceCreateResponse"></a>
+
+### IndexRuleBindingRegistryServiceCreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteRequest"></a>
+
+### IndexRuleBindingRegistryServiceDeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteResponse"></a>
+
+### IndexRuleBindingRegistryServiceDeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceGetRequest"></a>
+
+### IndexRuleBindingRegistryServiceGetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceGetResponse"></a>
+
+### IndexRuleBindingRegistryServiceGetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule_binding | [IndexRuleBinding](#banyandb-database-v1-IndexRuleBinding) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceListRequest"></a>
+
+### IndexRuleBindingRegistryServiceListRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceListResponse"></a>
+
+### IndexRuleBindingRegistryServiceListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule_binding | [IndexRuleBinding](#banyandb-database-v1-IndexRuleBinding) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceUpdateRequest"></a>
+
+### IndexRuleBindingRegistryServiceUpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule_binding | [IndexRuleBinding](#banyandb-database-v1-IndexRuleBinding) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryServiceUpdateResponse"></a>
+
+### IndexRuleBindingRegistryServiceUpdateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceCreateRequest"></a>
+
+### IndexRuleRegistryServiceCreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule | [IndexRule](#banyandb-database-v1-IndexRule) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceCreateResponse"></a>
+
+### IndexRuleRegistryServiceCreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceDeleteRequest"></a>
+
+### IndexRuleRegistryServiceDeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceDeleteResponse"></a>
+
+### IndexRuleRegistryServiceDeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceGetRequest"></a>
+
+### IndexRuleRegistryServiceGetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceGetResponse"></a>
+
+### IndexRuleRegistryServiceGetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule | [IndexRule](#banyandb-database-v1-IndexRule) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceListRequest"></a>
+
+### IndexRuleRegistryServiceListRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceListResponse"></a>
+
+### IndexRuleRegistryServiceListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule | [IndexRule](#banyandb-database-v1-IndexRule) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceUpdateRequest"></a>
+
+### IndexRuleRegistryServiceUpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| index_rule | [IndexRule](#banyandb-database-v1-IndexRule) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryServiceUpdateResponse"></a>
+
+### IndexRuleRegistryServiceUpdateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceCreateRequest"></a>
+
+### MeasureRegistryServiceCreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| measure | [Measure](#banyandb-database-v1-Measure) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceCreateResponse"></a>
+
+### MeasureRegistryServiceCreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceDeleteRequest"></a>
+
+### MeasureRegistryServiceDeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceDeleteResponse"></a>
+
+### MeasureRegistryServiceDeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceGetRequest"></a>
+
+### MeasureRegistryServiceGetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceGetResponse"></a>
+
+### MeasureRegistryServiceGetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| measure | [Measure](#banyandb-database-v1-Measure) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceListRequest"></a>
+
+### MeasureRegistryServiceListRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceListResponse"></a>
+
+### MeasureRegistryServiceListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| measure | [Measure](#banyandb-database-v1-Measure) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceUpdateRequest"></a>
+
+### MeasureRegistryServiceUpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| measure | [Measure](#banyandb-database-v1-Measure) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-MeasureRegistryServiceUpdateResponse"></a>
+
+### MeasureRegistryServiceUpdateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceCreateRequest"></a>
+
+### StreamRegistryServiceCreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| stream | [Stream](#banyandb-database-v1-Stream) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceCreateResponse"></a>
+
+### StreamRegistryServiceCreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceDeleteRequest"></a>
+
+### StreamRegistryServiceDeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceDeleteResponse"></a>
+
+### StreamRegistryServiceDeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceGetRequest"></a>
+
+### StreamRegistryServiceGetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceGetResponse"></a>
+
+### StreamRegistryServiceGetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| stream | [Stream](#banyandb-database-v1-Stream) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceListRequest"></a>
+
+### StreamRegistryServiceListRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceListResponse"></a>
+
+### StreamRegistryServiceListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| stream | [Stream](#banyandb-database-v1-Stream) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceUpdateRequest"></a>
+
+### StreamRegistryServiceUpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| stream | [Stream](#banyandb-database-v1-Stream) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-StreamRegistryServiceUpdateResponse"></a>
+
+### StreamRegistryServiceUpdateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceCreateRequest"></a>
+
+### TopNAggregationRegistryServiceCreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| top_n_aggregation | [TopNAggregation](#banyandb-database-v1-TopNAggregation) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceCreateResponse"></a>
+
+### TopNAggregationRegistryServiceCreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceDeleteRequest"></a>
+
+### TopNAggregationRegistryServiceDeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceDeleteResponse"></a>
+
+### TopNAggregationRegistryServiceDeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceGetRequest"></a>
+
+### TopNAggregationRegistryServiceGetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceGetResponse"></a>
+
+### TopNAggregationRegistryServiceGetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| top_n_aggregation | [TopNAggregation](#banyandb-database-v1-TopNAggregation) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceListRequest"></a>
+
+### TopNAggregationRegistryServiceListRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| group | [string](#string) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceListResponse"></a>
+
+### TopNAggregationRegistryServiceListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| top_n_aggregation | [TopNAggregation](#banyandb-database-v1-TopNAggregation) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceUpdateRequest"></a>
+
+### TopNAggregationRegistryServiceUpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| top_n_aggregation | [TopNAggregation](#banyandb-database-v1-TopNAggregation) |  |  |
+
+
+
+
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryServiceUpdateResponse"></a>
+
+### TopNAggregationRegistryServiceUpdateResponse
+
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+
+<a name="banyandb-database-v1-GroupRegistryService"></a>
+
+### GroupRegistryService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [GroupRegistryServiceCreateRequest](#banyandb-database-v1-GroupRegistryServiceCreateRequest) | [GroupRegistryServiceCreateResponse](#banyandb-database-v1-GroupRegistryServiceCreateResponse) |  |
+| Update | [GroupRegistryServiceUpdateRequest](#banyandb-database-v1-GroupRegistryServiceUpdateRequest) | [GroupRegistryServiceUpdateResponse](#banyandb-database-v1-GroupRegistryServiceUpdateResponse) |  |
+| Delete | [GroupRegistryServiceDeleteRequest](#banyandb-database-v1-GroupRegistryServiceDeleteRequest) | [GroupRegistryServiceDeleteResponse](#banyandb-database-v1-GroupRegistryServiceDeleteResponse) |  |
+| Get | [GroupRegistryServiceGetRequest](#banyandb-database-v1-GroupRegistryServiceGetRequest) | [GroupRegistryServiceGetResponse](#banyandb-database-v1-GroupRegistryServiceGetResponse) |  |
+| List | [GroupRegistryServiceListRequest](#banyandb-database-v1-GroupRegistryServiceListRequest) | [GroupRegistryServiceListResponse](#banyandb-database-v1-GroupRegistryServiceListResponse) |  |
+
+
+<a name="banyandb-database-v1-IndexRuleBindingRegistryService"></a>
+
+### IndexRuleBindingRegistryService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [IndexRuleBindingRegistryServiceCreateRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceCreateRequest) | [IndexRuleBindingRegistryServiceCreateResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceCreateResponse) |  |
+| Update | [IndexRuleBindingRegistryServiceUpdateRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceUpdateRequest) | [IndexRuleBindingRegistryServiceUpdateResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceUpdateResponse) |  |
+| Delete | [IndexRuleBindingRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteRequest) | [IndexRuleBindingRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceDeleteResponse) |  |
+| Get | [IndexRuleBindingRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetRequest) | [IndexRuleBindingRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceGetResponse) |  |
+| List | [IndexRuleBindingRegistryServiceListRequest](#banyandb-database-v1-IndexRuleBindingRegistryServiceListRequest) | [IndexRuleBindingRegistryServiceListResponse](#banyandb-database-v1-IndexRuleBindingRegistryServiceListResponse) |  |
+
+
+<a name="banyandb-database-v1-IndexRuleRegistryService"></a>
+
+### IndexRuleRegistryService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [IndexRuleRegistryServiceCreateRequest](#banyandb-database-v1-IndexRuleRegistryServiceCreateRequest) | [IndexRuleRegistryServiceCreateResponse](#banyandb-database-v1-IndexRuleRegistryServiceCreateResponse) |  |
+| Update | [IndexRuleRegistryServiceUpdateRequest](#banyandb-database-v1-IndexRuleRegistryServiceUpdateRequest) | [IndexRuleRegistryServiceUpdateResponse](#banyandb-database-v1-IndexRuleRegistryServiceUpdateResponse) |  |
+| Delete | [IndexRuleRegistryServiceDeleteRequest](#banyandb-database-v1-IndexRuleRegistryServiceDeleteRequest) | [IndexRuleRegistryServiceDeleteResponse](#banyandb-database-v1-IndexRuleRegistryServiceDeleteResponse) |  |
+| Get | [IndexRuleRegistryServiceGetRequest](#banyandb-database-v1-IndexRuleRegistryServiceGetRequest) | [IndexRuleRegistryServiceGetResponse](#banyandb-database-v1-IndexRuleRegistryServiceGetResponse) |  |
+| List | [IndexRuleRegistryServiceListRequest](#banyandb-database-v1-IndexRuleRegistryServiceListRequest) | [IndexRuleRegistryServiceListResponse](#banyandb-database-v1-IndexRuleRegistryServiceListResponse) |  |
+
+
+<a name="banyandb-database-v1-MeasureRegistryService"></a>
+
+### MeasureRegistryService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [MeasureRegistryServiceCreateRequest](#banyandb-database-v1-MeasureRegistryServiceCreateRequest) | [MeasureRegistryServiceCreateResponse](#banyandb-database-v1-MeasureRegistryServiceCreateResponse) |  |
+| Update | [MeasureRegistryServiceUpdateRequest](#banyandb-database-v1-MeasureRegistryServiceUpdateRequest) | [MeasureRegistryServiceUpdateResponse](#banyandb-database-v1-MeasureRegistryServiceUpdateResponse) |  |
+| Delete | [MeasureRegistryServiceDeleteRequest](#banyandb-database-v1-MeasureRegistryServiceDeleteRequest) | [MeasureRegistryServiceDeleteResponse](#banyandb-database-v1-MeasureRegistryServiceDeleteResponse) |  |
+| Get | [MeasureRegistryServiceGetRequest](#banyandb-database-v1-MeasureRegistryServiceGetRequest) | [MeasureRegistryServiceGetResponse](#banyandb-database-v1-MeasureRegistryServiceGetResponse) |  |
+| List | [MeasureRegistryServiceListRequest](#banyandb-database-v1-MeasureRegistryServiceListRequest) | [MeasureRegistryServiceListResponse](#banyandb-database-v1-MeasureRegistryServiceListResponse) |  |
+
+
+<a name="banyandb-database-v1-StreamRegistryService"></a>
+
+### StreamRegistryService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [StreamRegistryServiceCreateRequest](#banyandb-database-v1-StreamRegistryServiceCreateRequest) | [StreamRegistryServiceCreateResponse](#banyandb-database-v1-StreamRegistryServiceCreateResponse) |  |
+| Update | [StreamRegistryServiceUpdateRequest](#banyandb-database-v1-StreamRegistryServiceUpdateRequest) | [StreamRegistryServiceUpdateResponse](#banyandb-database-v1-StreamRegistryServiceUpdateResponse) |  |
+| Delete | [StreamRegistryServiceDeleteRequest](#banyandb-database-v1-StreamRegistryServiceDeleteRequest) | [StreamRegistryServiceDeleteResponse](#banyandb-database-v1-StreamRegistryServiceDeleteResponse) |  |
+| Get | [StreamRegistryServiceGetRequest](#banyandb-database-v1-StreamRegistryServiceGetRequest) | [StreamRegistryServiceGetResponse](#banyandb-database-v1-StreamRegistryServiceGetResponse) |  |
+| List | [StreamRegistryServiceListRequest](#banyandb-database-v1-StreamRegistryServiceListRequest) | [StreamRegistryServiceListResponse](#banyandb-database-v1-StreamRegistryServiceListResponse) |  |
+
+
+<a name="banyandb-database-v1-TopNAggregationRegistryService"></a>
+
+### TopNAggregationRegistryService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [TopNAggregationRegistryServiceCreateRequest](#banyandb-database-v1-TopNAggregationRegistryServiceCreateRequest) | [TopNAggregationRegistryServiceCreateResponse](#banyandb-database-v1-TopNAggregationRegistryServiceCreateResponse) |  |
+| Update | [TopNAggregationRegistryServiceUpdateRequest](#banyandb-database-v1-TopNAggregationRegistryServiceUpdateRequest) | [TopNAggregationRegistryServiceUpdateResponse](#banyandb-database-v1-TopNAggregationRegistryServiceUpdateResponse) |  |
+| Delete | [TopNAggregationRegistryServiceDeleteRequest](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteRequest) | [TopNAggregationRegistryServiceDeleteResponse](#banyandb-database-v1-TopNAggregationRegistryServiceDeleteResponse) |  |
+| Get | [TopNAggregationRegistryServiceGetRequest](#banyandb-database-v1-TopNAggregationRegistryServiceGetRequest) | [TopNAggregationRegistryServiceGetResponse](#banyandb-database-v1-TopNAggregationRegistryServiceGetResponse) |  |
+| List | [TopNAggregationRegistryServiceListRequest](#banyandb-database-v1-TopNAggregationRegistryServiceListRequest) | [TopNAggregationRegistryServiceListResponse](#banyandb-database-v1-TopNAggregationRegistryServiceListResponse) |  |
+
+ 
+
+
+
+<a name="banyandb_measure_v1_query-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/measure/v1/query.proto
+
+
+
+<a name="banyandb-measure-v1-DataPoint"></a>
+
+### DataPoint
+DataPoint is stored in Measures
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | timestamp is in the timeunit of milliseconds. |
+| tag_families | [banyandb.model.v1.TagFamily](#banyandb-model-v1-TagFamily) | repeated | tag_families contains tags selected in the projection |
+| fields | [DataPoint.Field](#banyandb-measure-v1-DataPoint-Field) | repeated | fields contains fields selected in the projection |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-DataPoint-Field"></a>
+
+### DataPoint.Field
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| value | [banyandb.model.v1.FieldValue](#banyandb-model-v1-FieldValue) |  |  |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-QueryRequest"></a>
+
+### QueryRequest
+QueryRequest is the request contract for query.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is required |
+| time_range | [banyandb.model.v1.TimeRange](#banyandb-model-v1-TimeRange) |  | time_range is a range query with begin/end time of entities in the timeunit of milliseconds. |
+| criteria | [banyandb.model.v1.Criteria](#banyandb-model-v1-Criteria) | repeated | tag_families are indexed. |
+| tag_projection | [banyandb.model.v1.TagProjection](#banyandb-model-v1-TagProjection) |  | tag_projection can be used to select tags of the data points in the response |
+| field_projection | [QueryRequest.FieldProjection](#banyandb-measure-v1-QueryRequest-FieldProjection) |  | field_projection can be used to select fields of the data points in the response |
+| group_by | [QueryRequest.GroupBy](#banyandb-measure-v1-QueryRequest-GroupBy) |  | group_by groups data points based on their field value for a specific tag and use field_name as the projection name |
+| agg | [QueryRequest.Aggregation](#banyandb-measure-v1-QueryRequest-Aggregation) |  | agg aggregates data points based on a field |
+| top | [QueryRequest.Top](#banyandb-measure-v1-QueryRequest-Top) |  | top limit the result based on a particular field |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-QueryRequest-Aggregation"></a>
+
+### QueryRequest.Aggregation
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| function | [banyandb.model.v1.AggregationFunction](#banyandb-model-v1-AggregationFunction) |  |  |
+| field_name | [string](#string) |  | field_name must be one of files indicated by the field_projection |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-QueryRequest-FieldProjection"></a>
+
+### QueryRequest.FieldProjection
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| names | [string](#string) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-QueryRequest-GroupBy"></a>
+
+### QueryRequest.GroupBy
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| tag_projection | [banyandb.model.v1.TagProjection](#banyandb-model-v1-TagProjection) |  | tag_projection must be a subset of the tag_projection of QueryRequest |
+| field_name | [string](#string) |  | field_name must be one of fields indicated by field_projection |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-QueryRequest-Top"></a>
+
+### QueryRequest.Top
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| number | [int32](#int32) |  | number set the how many items should be returned |
+| field_name | [string](#string) |  | field_name must be one of files indicated by the field_projection |
+| field_value_sort | [banyandb.model.v1.Sort](#banyandb-model-v1-Sort) |  | field_value_sort indicates how to sort fields ASC: bottomN DESC: topN UNSPECIFIED: topN |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-QueryResponse"></a>
+
+### QueryResponse
+QueryResponse is the response for a query to the Query module.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| data_points | [DataPoint](#banyandb-measure-v1-DataPoint) | repeated | data_points are the actual data returned |
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_measure_v1_write-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/measure/v1/write.proto
+
+
+
+<a name="banyandb-measure-v1-DataPointValue"></a>
+
+### DataPointValue
+DataPointValue is the data point for writing. It only contains values.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | timestamp is in the timeunit of milliseconds. |
+| tag_families | [banyandb.model.v1.TagFamilyForWrite](#banyandb-model-v1-TagFamilyForWrite) | repeated | the order of tag_families&#39; items match the measure schema |
+| fields | [banyandb.model.v1.FieldValue](#banyandb-model-v1-FieldValue) | repeated | the order of fields match the measure schema |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-InternalWriteRequest"></a>
+
+### InternalWriteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| shard_id | [uint32](#uint32) |  |  |
+| series_hash | [bytes](#bytes) |  |  |
+| request | [WriteRequest](#banyandb-measure-v1-WriteRequest) |  |  |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-WriteRequest"></a>
+
+### WriteRequest
+WriteRequest is the request contract for write
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | the metadata is required. |
+| data_point | [DataPointValue](#banyandb-measure-v1-DataPointValue) |  | the data_point is required. |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-WriteResponse"></a>
+
+### WriteResponse
+WriteResponse is the response contract for write
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_measure_v1_topn-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/measure/v1/topn.proto
+
+
+
+<a name="banyandb-measure-v1-TopNList"></a>
+
+### TopNList
+TopNList contains a series of topN items
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | timestamp is in the timeunit of milliseconds. |
+| items | [TopNList.Item](#banyandb-measure-v1-TopNList-Item) | repeated | items contains top-n items in a list |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-TopNList-Item"></a>
+
+### TopNList.Item
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| name | [string](#string) |  |  |
+| value | [banyandb.model.v1.FieldValue](#banyandb-model-v1-FieldValue) |  |  |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-TopNRequest"></a>
+
+### TopNRequest
+TopNRequest is the request contract for query.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is required |
+| time_range | [banyandb.model.v1.TimeRange](#banyandb-model-v1-TimeRange) |  | time_range is a range query with begin/end time of entities in the timeunit of milliseconds. |
+| top_n | [int32](#int32) |  | top_n set the how many items should be returned in each list. |
+| agg | [banyandb.model.v1.AggregationFunction](#banyandb-model-v1-AggregationFunction) |  | agg aggregates lists grouped by field names in the time_range |
+| conditions | [banyandb.model.v1.Condition](#banyandb-model-v1-Condition) | repeated | criteria select counters. |
+| field_value_sort | [banyandb.model.v1.Sort](#banyandb-model-v1-Sort) |  | field_value_sort indicates how to sort fields |
+
+
+
+
+
+
+<a name="banyandb-measure-v1-TopNResponse"></a>
+
+### TopNResponse
+TopNResponse is the response for a query to the Query module.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| lists | [TopNList](#banyandb-measure-v1-TopNList) | repeated | lists contain a series topN lists ranked by timestamp if agg_func in query request is specified, lists&#39; size should be one. |
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_measure_v1_rpc-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/measure/v1/rpc.proto
+
+
+ 
+
+ 
+
+ 
+
+
+<a name="banyandb-measure-v1-MeasureService"></a>
+
+### MeasureService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Query | [QueryRequest](#banyandb-measure-v1-QueryRequest) | [QueryResponse](#banyandb-measure-v1-QueryResponse) |  |
+| Write | [WriteRequest](#banyandb-measure-v1-WriteRequest) stream | [WriteResponse](#banyandb-measure-v1-WriteResponse) stream |  |
+| TopN | [TopNRequest](#banyandb-measure-v1-TopNRequest) | [TopNResponse](#banyandb-measure-v1-TopNResponse) |  |
+
+ 
+
+
+
+<a name="banyandb_property_v1_property-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/property/v1/property.proto
+
+
+
+<a name="banyandb-property-v1-Metadata"></a>
+
+### Metadata
+Metadata is for multi-tenant use
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| container | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | container is created when it recevies the first property |
+| id | [string](#string) |  | id identifies a property |
+
+
+
+
+
+
+<a name="banyandb-property-v1-Property"></a>
+
+### Property
+Property stores the user defined data
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [Metadata](#banyandb-property-v1-Metadata) |  | metadata is the identity of a property |
+| tags | [banyandb.model.v1.Tag](#banyandb-model-v1-Tag) | repeated | tag stores the content of a property |
+| updated_at | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | updated_at indicates when the property is updated |
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_property_v1_rpc-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/property/v1/rpc.proto
+
+
+
+<a name="banyandb-property-v1-CreateRequest"></a>
+
+### CreateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| property | [Property](#banyandb-property-v1-Property) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-CreateResponse"></a>
+
+### CreateResponse
+
+
+
+
+
+
+
+<a name="banyandb-property-v1-DeleteRequest"></a>
+
+### DeleteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [Metadata](#banyandb-property-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-DeleteResponse"></a>
+
+### DeleteResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| deleted | [bool](#bool) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-GetRequest"></a>
+
+### GetRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [Metadata](#banyandb-property-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-GetResponse"></a>
+
+### GetResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| property | [Property](#banyandb-property-v1-Property) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-ListRequest"></a>
+
+### ListRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| contaner | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-ListResponse"></a>
+
+### ListResponse
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| property | [Property](#banyandb-property-v1-Property) | repeated |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-UpdateRequest"></a>
+
+### UpdateRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| property | [Property](#banyandb-property-v1-Property) |  |  |
+
+
+
+
+
+
+<a name="banyandb-property-v1-UpdateResponse"></a>
+
+### UpdateResponse
+
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+
+<a name="banyandb-property-v1-PropertyService"></a>
+
+### PropertyService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Create | [CreateRequest](#banyandb-property-v1-CreateRequest) | [CreateResponse](#banyandb-property-v1-CreateResponse) |  |
+| Update | [UpdateRequest](#banyandb-property-v1-UpdateRequest) | [UpdateResponse](#banyandb-property-v1-UpdateResponse) |  |
+| Delete | [DeleteRequest](#banyandb-property-v1-DeleteRequest) | [DeleteResponse](#banyandb-property-v1-DeleteResponse) |  |
+| Get | [GetRequest](#banyandb-property-v1-GetRequest) | [GetResponse](#banyandb-property-v1-GetResponse) |  |
+| List | [ListRequest](#banyandb-property-v1-ListRequest) | [ListResponse](#banyandb-property-v1-ListResponse) |  |
+
+ 
+
+
+
+<a name="banyandb_stream_v1_query-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/stream/v1/query.proto
+
+
+
+<a name="banyandb-stream-v1-Element"></a>
+
+### Element
+Element represents
+(stream context) a Span defined in Google Dapper paper or equivalently a Segment in Skywalking.
+(Log context) a log
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| element_id | [string](#string) |  | element_id could be span_id of a Span or segment_id of a Segment in the context of stream |
+| timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | timestamp represents a millisecond 1) either the start time of a Span/Segment, 2) or the timestamp of a log |
+| tag_families | [banyandb.model.v1.TagFamily](#banyandb-model-v1-TagFamily) | repeated | fields contains all indexed Field. Some typical names, - stream_id - duration - service_name - service_instance_id - end_time_milliseconds |
+
+
+
+
+
+
+<a name="banyandb-stream-v1-QueryRequest"></a>
+
+### QueryRequest
+QueryRequest is the request contract for query.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | metadata is required |
+| time_range | [banyandb.model.v1.TimeRange](#banyandb-model-v1-TimeRange) |  | time_range is a range query with begin/end time of entities in the timeunit of milliseconds. In the context of stream, it represents the range of the `startTime` for spans/segments, while in the context of Log, it means the range of the timestamp(s) for logs. it is always recommended to specify time range for performance reason |
+| offset | [uint32](#uint32) |  | offset is used to support pagination, together with the following limit |
+| limit | [uint32](#uint32) |  | limit is used to impose a boundary on the number of records being returned |
+| order_by | [banyandb.model.v1.QueryOrder](#banyandb-model-v1-QueryOrder) |  | order_by is given to specify the sort for a field. So far, only fields in the type of Integer are supported |
+| criteria | [banyandb.model.v1.Criteria](#banyandb-model-v1-Criteria) | repeated | tag_families are indexed. |
+| projection | [banyandb.model.v1.TagProjection](#banyandb-model-v1-TagProjection) |  | projection can be used to select the key names of the element in the response |
+
+
+
+
+
+
+<a name="banyandb-stream-v1-QueryResponse"></a>
+
+### QueryResponse
+QueryResponse is the response for a query to the Query module.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| elements | [Element](#banyandb-stream-v1-Element) | repeated | elements are the actual data returned |
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_stream_v1_write-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/stream/v1/write.proto
+
+
+
+<a name="banyandb-stream-v1-ElementValue"></a>
+
+### ElementValue
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| element_id | [string](#string) |  | element_id could be span_id of a Span or segment_id of a Segment in the context of stream |
+| timestamp | [google.protobuf.Timestamp](#google-protobuf-Timestamp) |  | timestamp is in the timeunit of milliseconds. It represents 1) either the start time of a Span/Segment, 2) or the timestamp of a log |
+| tag_families | [banyandb.model.v1.TagFamilyForWrite](#banyandb-model-v1-TagFamilyForWrite) | repeated | the order of tag_families&#39; items match the stream schema |
+
+
+
+
+
+
+<a name="banyandb-stream-v1-InternalWriteRequest"></a>
+
+### InternalWriteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| shard_id | [uint32](#uint32) |  |  |
+| series_hash | [bytes](#bytes) |  |  |
+| request | [WriteRequest](#banyandb-stream-v1-WriteRequest) |  |  |
+
+
+
+
+
+
+<a name="banyandb-stream-v1-WriteRequest"></a>
+
+### WriteRequest
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| metadata | [banyandb.common.v1.Metadata](#banyandb-common-v1-Metadata) |  | the metadata is only required in the first write. |
+| element | [ElementValue](#banyandb-stream-v1-ElementValue) |  | the element is required. |
+
+
+
+
+
+
+<a name="banyandb-stream-v1-WriteResponse"></a>
+
+### WriteResponse
+
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+<a name="banyandb_stream_v1_rpc-proto"></a>
+<p align="right"><a href="#top">Top</a></p>
+
+## banyandb/stream/v1/rpc.proto
+
+
+ 
+
+ 
+
+ 
+
+
+<a name="banyandb-stream-v1-StreamService"></a>
+
+### StreamService
+
+
+| Method Name | Request Type | Response Type | Description |
+| ----------- | ------------ | ------------- | ------------|
+| Query | [QueryRequest](#banyandb-stream-v1-QueryRequest) | [QueryResponse](#banyandb-stream-v1-QueryResponse) |  |
+| Write | [WriteRequest](#banyandb-stream-v1-WriteRequest) stream | [WriteResponse](#banyandb-stream-v1-WriteResponse) stream |  |
+
+ 
+
+
+
+## Scalar Value Types
+
+| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
+| ----------- | ----- | --- | ---- | ------ | -- | -- | --- | ---- |
+| <a name="double" /> double |  | double | double | float | float64 | double | float | Float |
+| <a name="float" /> float |  | float | float | float | float32 | float | float | Float |
+| <a name="int32" /> int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
+| <a name="int64" /> int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
+| <a name="uint32" /> uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
+| <a name="uint64" /> uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
+| <a name="sint32" /> sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
+| <a name="sint64" /> sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
+| <a name="fixed32" /> fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
+| <a name="fixed64" /> fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
+| <a name="sfixed32" /> sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
+| <a name="sfixed64" /> sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
+| <a name="bool" /> bool |  | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass |
+| <a name="string" /> string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
+| <a name="bytes" /> bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |
+
diff --git a/docs/clients.md b/docs/clients.md
new file mode 100644
index 0000000..8e5a347
--- /dev/null
+++ b/docs/clients.md
@@ -0,0 +1,38 @@
+# Clients
+
+## gRPC command-line tool
+
+Users have a chance to use any command-line tool to interact with the Banyand server.
+The only limitation is the CLI tool has to support [file descriptor files](https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/descriptor.proto) since the database server does not support server reflection.
+
+[Buf](https://buf.build/) is a Protobuf building tooling the BanyanDB relies on. It can provide `FileDescriptorSet`s usable by gRPC CLI tools like [grpcurl](https://github.com/fullstorydev/grpcurl)
+
+BanyanDB recommends installing `Buf` by issuing
+
+```shell
+$ make -C api generate
+Protobuf schema files are compiled
+```
+
+Above command will compile `*.proto` after downloading `buf` into `<project_root>/bin`
+
+Users could leverage `buf`'s internal compiler to generate the `FileDescriptorSet`s
+
+```shell
+$ cd api
+$ ../bin/buf build -o image.bin
+```
+
+If grpcurl is the CLI tool to access the APIs of BanyanDb. To use `image.bin` with it on the fly:
+
+```shell
+$ grpcurl -plaintext -protoset image.bin localhost:17912 ...
+```
+
+## Java Client
+
+The java native client is hosted at [skywalking-banyandb-java-client](https://github.com/apache/skywalking-banyandb-java-client).
+
+## Web application (TBD)
+
+## Command Line (TBD)
diff --git a/docs/crud/measure/query.md b/docs/crud/measure/query.md
new file mode 100644
index 0000000..8bb862a
--- /dev/null
+++ b/docs/crud/measure/query.md
@@ -0,0 +1,7 @@
+# Query Measures
+
+## Examples
+
+## API Reference
+
+[MeasureService v1](../../api-reference.md#measureservice)
diff --git a/docs/crud/measure/write.md b/docs/crud/measure/write.md
new file mode 100644
index 0000000..727c626
--- /dev/null
+++ b/docs/crud/measure/write.md
@@ -0,0 +1,7 @@
+# Write and Update Measures
+
+## Examples
+
+## API Reference
+
+[MeasureService v1](../../api-reference.md#measureservice)
diff --git a/docs/crud/property/create.md b/docs/crud/property/create.md
new file mode 100644
index 0000000..4c3324e
--- /dev/null
+++ b/docs/crud/property/create.md
@@ -0,0 +1,7 @@
+# Create Property
+
+## Examples
+
+## API Reference
+
+[PropertyService v1](../../api-reference.md#propertyservice)
diff --git a/docs/crud/property/delete.md b/docs/crud/property/delete.md
new file mode 100644
index 0000000..bab7850
--- /dev/null
+++ b/docs/crud/property/delete.md
@@ -0,0 +1,7 @@
+# Delete Property
+
+## Examples
+
+## API Reference
+
+[PropertyService v1](../../api-reference.md#propertyservice)
diff --git a/docs/crud/property/query.md b/docs/crud/property/query.md
new file mode 100644
index 0000000..8bbc26e
--- /dev/null
+++ b/docs/crud/property/query.md
@@ -0,0 +1,7 @@
+# Query Property
+
+## Examples
+
+## API Reference
+
+[PropertyService v1](../../api-reference.md#propertyservice)
diff --git a/docs/crud/property/update.md b/docs/crud/property/update.md
new file mode 100644
index 0000000..61b5116
--- /dev/null
+++ b/docs/crud/property/update.md
@@ -0,0 +1,7 @@
+# Update Property
+
+## Examples
+
+## API Reference
+
+[PropertyService v1](../../api-reference.md#propertyservice)
diff --git a/docs/crud/stream/query.md b/docs/crud/stream/query.md
new file mode 100644
index 0000000..045dfc9
--- /dev/null
+++ b/docs/crud/stream/query.md
@@ -0,0 +1,7 @@
+# Query Streams
+
+## Examples
+
+## API Reference
+
+[StreamService v1](../../api-reference.md#streamservice)
diff --git a/docs/crud/stream/write.md b/docs/crud/stream/write.md
new file mode 100644
index 0000000..0350437
--- /dev/null
+++ b/docs/crud/stream/write.md
@@ -0,0 +1,7 @@
+# Write and Update Streams
+
+## Examples
+
+## API Reference
+
+[StreamService v1](../../api-reference.md#streamservice)
diff --git a/docs/installation.md b/docs/installation.md
new file mode 100644
index 0000000..4d7330d
--- /dev/null
+++ b/docs/installation.md
@@ -0,0 +1,118 @@
+
+# Installation
+
+`Banyand` is the daemon server of the BanyanDB database. This section will show several paths installing it in your environment.
+
+## Get Banyand
+
+### Build From Source
+
+#### Requirements
+
+Users who want to build a binary from sources have to set up:
+
+* Go >= 1.17
+* Linux or MacOS
+* GNU make
+
+#### Build Banyand
+
+To issue the below command to get a basic binary.
+
+```shell
+$ make build
+chmod +x build/bin/banyand-server
+Done building banyand server
+```
+
+The build system provides a series of binary options as well.
+
+* `make -C banyand banyand-server` generates a basic `banyand-server`.
+* `make -C banyand release` builds out a static binary for releasing.
+* `make -C banyand debug` gives a binary for debugging without the complier's optimizations.
+* `make -C banyand debug-static` is a static binary for debugging.
+
+Then users get binaries as below
+
+``` shell
+$ ls banyand/build/bin
+banyand-server  
+banyand-server-debug  
+banyand-server-debug-static  
+banyand-server-static
+```
+
+## Setup Banyand
+
+`Banyand` shows its available commands and arguments by
+
+```shell
+$ ./banyand-server
+
+██████╗  █████╗ ███╗   ██╗██╗   ██╗ █████╗ ███╗   ██╗██████╗ ██████╗ 
+██╔══██╗██╔══██╗████╗  ██║╚██╗ ██╔╝██╔══██╗████╗  ██║██╔══██╗██╔══██╗
+██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔██╗ ██║██║  ██║██████╔╝
+██╔══██╗██╔══██║██║╚██╗██║  ╚██╔╝  ██╔══██║██║╚██╗██║██║  ██║██╔══██╗
+██████╔╝██║  ██║██║ ╚████║   ██║   ██║  ██║██║ ╚████║██████╔╝██████╔╝
+╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═══╝╚═════╝ ╚═════╝ 
+
+BanyanDB, as an observability database, aims to ingest, analyze and store Metrics, Tracing and Logging data
+
+Usage:
+   [command]
+
+Available Commands:
+  completion  generate the autocompletion script for the specified shell
+  help        Help about any command
+  standalone  Run as the standalone mode
+
+Flags:
+  -h, --help      help for this command
+  -v, --version   version for this command
+
+Use " [command] --help" for more information about a command.
+```
+
+Banyand is running as a standalone process by
+
+```shell
+$ ./banyand-server standalone
+██████╗  █████╗ ███╗   ██╗██╗   ██╗ █████╗ ███╗   ██╗██████╗ ██████╗ 
+██╔══██╗██╔══██╗████╗  ██║╚██╗ ██╔╝██╔══██╗████╗  ██║██╔══██╗██╔══██╗
+██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔██╗ ██║██║  ██║██████╔╝
+██╔══██╗██╔══██║██║╚██╗██║  ╚██╔╝  ██╔══██║██║╚██╗██║██║  ██║██╔══██╗
+██████╔╝██║  ██║██║ ╚████║   ██║   ██║  ██║██║ ╚████║██████╔╝██████╔╝
+╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝  ╚═══╝╚═════╝ ╚═════╝ 
+***starting as a standalone server****
+...
+...
+***Listening to**** addr::17912 module:LIAISON-GRPC
+```
+
+The banyand-server would be listening on the `0.0.0.0:17912` if no errors occurred.
+
+To discovery more options to configure the banyand by
+
+```shell
+$ ./banyand-server standalone -h
+Usage:
+   standalone [flags]
+
+Flags:
+      --addr string                          the address of banyand listens (default ":17912")
+      --cert-file string                     the TLS cert file
+  -h, --help                                 help for standalone
+      --key-file string                      the TLS key file
+      --logging.env string                   the logging (default "dev")
+      --logging.level string                 the level of logging (default "debug")
+      --max-recv-msg-size int                the size of max receiving message (default 10485760)
+      --measure-root-path string             the root path of database (default "/tmp")
+      --metadata-root-path string            the root path of metadata (default "/tmp")
+  -n, --name string                          name of this service (default "standalone")
+      --observability-listener-addr string   listen addr for observability (default ":2121")
+      --pprof-listener-addr string           listen addr for pprof (default "127.0.0.1:6060")
+      --show-rungroup-units                  show rungroup units
+      --stream-root-path string              the root path of database (default "/tmp")
+      --tls                                  connection uses TLS if true, else plain TCP
+  -v, --version                              version for standalone
+```
diff --git a/docs/menu.yml b/docs/menu.yml
new file mode 100644
index 0000000..099ba51
--- /dev/null
+++ b/docs/menu.yml
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+catalog:
+  - name: "Welcome"
+    path: "/readme"
+  - name: "Installation"
+    path: "/installation"
+  - name: "Clients"
+    path: "/clients"
+  - name: "Schema"
+    path: "/schema"
+  - name: "CRUD Operations"
+    catalog:
+      - name: "Measure"
+        catalog:
+          - name: "Write and Update" 
+            path: "/crud/measure/write"
+          - name: "Query" 
+            path: "/crud/measure/query"
+      - name: "Stream"
+        catalog:
+          - name: "Write and Update" 
+            path: "/crud/stream/write"
+          - name: "Query" 
+            path: "/crud/stream/query"
+      - name: "Property"
+        catalog:
+          - name: "Create" 
+            path: "/crud/property/create"
+          - name: "Update" 
+            path: "/crud/property/update"
+          - name: "Delete" 
+            path: "/crud/property/delete"
+          - name: "Query" 
+            path: "/crud/property/query"
diff --git a/docs/schema.md b/docs/schema.md
new file mode 100644
index 0000000..99a2652
--- /dev/null
+++ b/docs/schema.md
@@ -0,0 +1,58 @@
+# Schema
+
+BanyanDB tends to control resource creation instead of auto-generation. Before ingesting data into the database, users create a hierarchical structure, determining how they are grouped and laid out. The index generation rule should be applied to the pre-defined resources, indicating how the BanyanDB generates indices.
+
+In general, BanyanDB groups resources into several kinds:
+
+* Time series: `Measure` and `Stream`. Resources identify incoming data as time series data points.
+* Index: `IndexRule` and `IndexRuleBinding`. Resources provide a `Many to Many` indexing rule bounding to other resources
+* Precalculation: `TopNAggregation`. Resources analyze and aggregate data from other resources, then corresponding output results.
+* Others: `Property`. Resources complement some particular scenarios.
+
+## Group
+
+`Group` does not provide a mechanism for isolating groups of resources within a single banyand-server but is the minimal unit to manage physical structures. Each group contains a set of options, like retention policy, shard number, etc. Several shards distribute in a group.
+
+Every other resource should belong to a group.
+
+[Group Registration Operations](api-reference.md#groupregistryservice)
+
+## Measure
+
+`Measure` consists of a sequence of data points. Each data point contains tags and fields.
+
+`Tags` are key-value pairs. The database engine can index tag values by referring to the index rules and rule bindings, confining the query to filtering data points based on tags bound to an index rule.
+
+A group of selected tags composite an `entity` that points out a specific time series the data point belongs. The database engine has capacities to encode and compress values in the same time series. Users should select appropriate tag combinations to optimize the data size. Another role of `entity` is the sharding key of data points, determining how to fragment data between shards.
+
+`Fields` are also key-value pairs like tags. But the value of each field is the actual value of a single data point. The database engine would encode and compress the field's values in the same time series. The query operation is forbidden to filter data points based on a field's value.
+
+Another option named `interval` plays a critical role in encoding. It indicates the time range between two adjacent data points in a time series and implies that all data points belonging to the same time series are distributed based on a fixed interval. A better practice for the naming measure is to append the interval literal to the tail, for example, `service_cpm_minute`.
+
+[Measure Registration Operations](api-reference.md#measureregistryservice)
+
+## Stream
+
+`Stream` shares many details with `Measure` except for abandoning `field`. Stream focus on the high throughput data collection, for example, tracing and logging. The database engine also supports compressing stream entries based on `entity`, but no encode process is involved.
+
+[Stream Registration Operations](api-reference.md#streamregistryservice)
+
+## Property
+
+`Property` is a standard key-value store. Users could store their metadata or items to a property and get a [sequential consistency](https://en.wikipedia.org/wiki/Consistency_model#Sequential_consistency) guarantee. BanyanDB's motivation for introducing such a particular structure is to support most APM scenarios that need to store critical data, especially for a distributed database cluster.
+
+Users __DO NOT__ have to define a schema before writing a Property
+
+## IndexRule and IndexRuleBinding
+
+An `IndexRule` indicates which tags are indexed. An `IndexRuleBinding` binds an index rule to the target resources or the `subject`. There might be several rule bindings to a single resource, but their effective time range could NOT overlap.
+
+IndexRule supports selecting two distinct kinds of index structures. `Inverted` index is the primary option when users set up an index rule. It's suitable for most tag indexing due to a better memory usage ratio and query performance. When there are many unique tag values here, such as the `ID` tag and numeric duration tag, the `Tree` index could be better. This index saves much memory space with high-cardinality data sets.
+
+IndexRule provides a `Global` location to place some indices on a higher layer of hierarchical structure. This option intends to optimize the full-scan operation for some querying cases of no time range specification, such as finding spans from a trace by `trace_id`.
+
+[IndexRule Registration Operations](api-reference.md#indexruleregistryservice)
+
+[IndexRuleBinding Registration Operations](api-reference.md#indexrulebindingregistryservice)
+
+## TopNAggregation (TBD)
diff --git a/scripts/build/base.mk b/scripts/build/base.mk
index 7f62f24..3f71525 100644
--- a/scripts/build/base.mk
+++ b/scripts/build/base.mk
@@ -32,11 +32,13 @@ $(BUF):
 	@echo "Install proto plugins..."
 	@rm -f $(tool_bin)/protoc-gen-go
 	@rm -f $(tool_bin)/protoc-gen-go-grpc
+	@rm -f $(tool_bin)/protoc-gen-doc
 	@rm -f $(tool_bin)/buf
 	@rm -f $(tool_bin)/protoc-gen-buf-breaking
 	@rm -f $(tool_bin)/protoc-gen-buf-lint
 	@GOBIN=$(tool_bin) go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
 	@GOBIN=$(tool_bin) go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0
+	@GOBIN=$(tool_bin) go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@v1.5.1
 	@GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/buf@$(buf_version)
 	@GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@$(buf_version)
 	@GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@$(buf_version)