Skip to content

Commit 7164069

Browse files
V VV V
authored andcommitted
update content: bitbin concepts, plugin-runtime introduction+management-api+errors
1 parent c417eeb commit 7164069

4 files changed

Lines changed: 413 additions & 6 deletions

File tree

apps/bitbin-docs/content/concepts.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ This means `key_id` must be unique within a `(tenant, entity)` pair. If you inse
125125

126126
---
127127

128-
## Queries as Geometry
128+
## How Queries Work
129129

130-
Every query defines a **bounding box** in the dimension space. You specify constraints on any subset of dimensions, and BitBin finds all records that fall within that box.
130+
A query has two parts: **what to filter** (`space`) and **what to compute** (`measure`). You describe the records you want, and BitBin finds them.
131131

132132
```json
133133
{
@@ -138,9 +138,21 @@ Every query defines a **bounding box** in the dimension space. You specify const
138138

139139
This is equivalent to: "Count all records where tenant=1 AND amount>500 AND region=3."
140140

141+
### Filter types
142+
141143
- **Exact match:** `"region": 3` → region = 3
142144
- **Range:** `"amount": [500, null]` → amount > 500
143-
- **Unconstrained:** omit the dimension entirely — zero cost
145+
- **Unconstrained:** omit a field entirely — it's free, not scanned
146+
147+
Think of it like metadata filtering in a vector database: you tag each record with structured fields, then query by combining any subset of those fields. The difference is that BitBin evaluates all fields simultaneously — you don't pick one "index" to query through. Every field is always indexed, always fast.
148+
149+
| If you've used... | BitBin equivalent |
150+
|---|---|
151+
| Pinecone `filter: {"genre": "comedy", "year": {"$gte": 2020}}` | `"space": {"category": 5, "key_id": [2020, null]}` |
152+
| Qdrant `must: [{key: "city", match: {value: "Berlin"}}]` | `"space": {"region": 7}` |
153+
| SQL `WHERE status = 1 AND amount > 500` | `"space": {"status": 1, "amount": [500, null]}` |
154+
155+
No index configuration, no filter plans, no "filterable attributes" to declare up front. Every field is queryable out of the box.
144156

145157
The result includes a `query_us` field showing execution time in microseconds. Typical queries complete in 1–50µs.
146158

@@ -169,7 +181,7 @@ Pipelines support three trigger types:
169181
- **`on_insert`** — fire automatically when matching records are inserted
170182
- **`on_schedule`** — fire on a time interval
171183

172-
See [Pipelines](/pipelines) for the full step reference.
184+
See [Pipelines](/${1#./}) for the full step reference.
173185

174186
---
175187

@@ -189,4 +201,4 @@ See [Pipelines](/pipelines) for the full step reference.
189201

190202
---
191203

192-
[← Previous: Getting Started](/getting-started) · **Chapter 2** · [Next: Query Language →](/query-language)
204+
[← Previous: Getting Started](/${1#./}) · **Chapter 2** · [Next: Query Language →](/${1#./})

0 commit comments

Comments
 (0)