docs: add multi-language documentation (ru, fa, zh, tr, ar)

This commit is contained in:
2026-05-07 23:42:55 +03:00
parent abb382c419
commit e9d3c7e9de
157 changed files with 14339 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
# API پروتکل باینری
پروتکل سطح پایین برای اتصالات با کارایی بالا.
## فرمت پیام
همه پیام‌ها از ترتیب big-endian استفاده می‌کنند:
```
┌────────┬────────┬────────┬────────┬─────────────┐
│ Length │ Type │ Seq │ Status │ Payload │
│ 4 bytes│ 1 byte │ 2 bytes│ 1 byte │ N bytes │
└────────┴────────┴────────┴────────┴─────────────┘
```
## انواع پیام
### Query (0x01)
```nim
let msg = makeQueryMessage(seq, "SELECT * FROM users")
```
### Insert (0x02)
```nim
let msg = makeInsertMessage(seq, "users", data)
```
### Update (0x03)
```nim
let msg = makeUpdateMessage(seq, "users", updates, where)
```
### Delete (0x04)
```nim
let msg = makeDeleteMessage(seq, "users", where)
```
### Ready (0x05)
```nim
let msg = makeReadyMessage(seq)
```
### Error (0x06)
```nim
let msg = makeErrorMessage(seq, code, message)
```
## کدهای پاسخ
| کد | نام | توضیح |
|----|-----|--------|
| 0x00 | OK | موفق |
| 0x01 | ERROR | خطای عمومی |
| 0x02 | AUTH_REQUIRED | نیاز به احراز هویت |
| 0x03 | INVALID_QUERY | خطای نحوی |
| 0x04 | NOT_FOUND | منبع یافت نشد |
+62
View File
@@ -0,0 +1,62 @@
# HTTP/REST API
API REST مبتنی بر JSON برای برنامه‌های وب.
## Base URL
```
http://localhost:9470/api
```
## Endpoints
### GET /api/users
لیست همه کاربران:
```bash
curl http://localhost:9470/api/users
```
### GET /api/users/:id
دریافت کاربر با ID:
```bash
curl http://localhost:9470/api/users/1
```
### POST /api/users
ایجاد کاربر:
```bash
curl -X POST http://localhost:9470/api/users \
-d '{"name": "Charlie", "age": 35}'
```
### PUT /api/users/:id
به‌روزرسانی کاربر:
```bash
curl -X PUT http://localhost:9470/api/users/1 \
-d '{"name": "Alice", "age": 31}'
```
### DELETE /api/users/:id
حذف کاربر:
```bash
curl -X DELETE http://localhost:9470/api/users/1
```
## Query Endpoint
اجرای کوئری BaraQL:
```bash
curl -X POST http://localhost:9470/api/query \
-d '{"sql": "SELECT * FROM users WHERE age > 18"}'
```
+67
View File
@@ -0,0 +1,67 @@
# WebSocket API
استریم تمام‌دوطرفه برای فیدهای داده real-time.
## اتصال
```
ws://localhost:9471/ws
```
## مثال کلاینت
```javascript
const ws = new WebSocket('ws://localhost:9471/ws');
ws.onopen = () => {
ws.send(JSON.stringify({
type: 'query',
sql: 'SELECT * FROM users'
}));
};
ws.onmessage = (event) => {
console.log('Received:', JSON.parse(event.data));
};
```
## فرمت پیام
```json
{
"type": "query",
"id": "uuid",
"sql": "SELECT * FROM users"
}
```
## انواع پیام
### درخواست
```json
{
"type": "query",
"id": "123",
"sql": "SELECT * FROM users"
}
```
### پاسخ
```json
{
"type": "result",
"id": "123",
"data": [{"id": 1, "name": "Alice"}]
}
```
### اشتراک
```json
{
"type": "subscribe",
"table": "users"
}
```
+197
View File
@@ -0,0 +1,197 @@
# معماری BaraDB
## بررسی اجمالی
BaraDB یک **موتور پایگاه داده چند حالته** است که با Nim نوشته شده و ذخیره‌سازی سندی (KV)، گرافی، برداری، ستونی و جستجوی تمام‌متن را در یک موتور واحد با زبان پرس‌وجوی واحد **BaraQL** ترکیب می‌کند.
## معماری لایه‌ای
```
┌─────────────────────────────────────────────────────────┐
│ 1. لایه کلاینت │
│ پروتکل باینری │ HTTP/REST │ WebSocket │ توکار │
├─────────────────────────────────────────────────────────┤
│ 2. لایه پرس‌وجو (BaraQL) │
│ لکسر → پارسر → AST → IR → بهینه‌ساز → کد‌ژن │
├─────────────────────────────────────────────────────────┤
│ 3. موتور اجرا │
│ سند │ گراف │ بردار │ ستونی │ FTS │
├─────────────────────────────────────────────────────────┤
│ 4. ذخیره‌سازی │
│ LSM-Tree │ B-Tree │ WAL │ Bloom │ فشردهسازی │ کش │
├─────────────────────────────────────────────────────────┤
│ 5. توزیع‌شده │
│ Raft │ شاردینگ │ ریپلیکیشن │ Gossip │
└─────────────────────────────────────────────────────────┘
```
## لایه 1: لایه کلاینت
چندین پروتکل ارتباطی:
- **پروتکل باینری** (`protocol/wire.nim`): پروتکل باینری کارآمد big-endian با 16 نوع پیام
- **HTTP/REST** (`core/httpserver.nim`): API REST مبتنی بر JSON با چند نخی
- **WebSocket** (`core/websocket.nim`): استریم تمام‌دوطرفه
- **حالت توکار** (`storage/lsm.nim`): دسترسی مستقیم درون‌پروسه‌ای
### مدیریت اتصال
- **استخر اتصال** (`protocol/pool.nim`): محدودیت‌های کمینه/بیشینه اتصال با تایم‌اوت بیکاری
- **محدودیت نرخ** (`protocol/ratelimit.nim`): Token-bucket سراسری و برای هر کلاینت
- **احراز هویت** (`protocol/auth.nim`): JWT با HMAC-SHA256 و دسترسی مبتنی بر نقش
- **TLS/SSL** (`protocol/ssl.nim`): TLS 1.3 با گواهینامه‌های خودتولید
## لایه 2: لایه پرس‌وجو (BaraQL)
خط لوله BaraQL:
1. **لکسر** (`query/lexer.nim`): توکن‌سازی ورودی به بیش از 80 نوع توکن
2. **پارسر** (`query/parser.nim`): پارسر نزولی بازگشتی تولیدکننده AST
3. **AST** (`query/ast.nim`): بیش از 300 خط,覆盖 بیش از 25 نوع گره
4. **IR** (`query/ir.nim`): نمایش میانی برای نقشه‌های اجرا
5. **بهینه‌ساز** (`query/adaptive.nim`): بهینه‌سازی تطبیقی کross-modal
6. **کد‌ژن** (`query/codegen.nim`): ترجمه IR به عملیات ذخیره‌سازی
7. **اجراکننده** (`query/executor.nim`): اجرای نقشه‌ها با موازی‌سازی
### برنامه‌ریزی کross-modal
بهینه‌ساز (`query/adaptive.nim`) ترتیب اجرا را بین موتورها تعیین می‌کند:
```
1. تخمین گزینش‌پذیری برای هر شرط
2. ارسال گزینش‌پذیرترین شرط به موتور مربوطه اول
3. استفاده از فیلترهای Bloom برای جستجوهای KV
4. موازی‌سازی شاخه‌های مستقل
5. استریم نتایج برای اجتناب از مادی‌سازی
```
## لایه 3: موتور اجرا
### موتور سند/KV
- **LSM-Tree** (`storage/lsm.nim`): ذخیره‌سازی بهینه برای نوشتن با MemTable، WAL، SSTables
- **اندیس B-Tree** (`storage/btree.nim`): اندیس مرتب برای اسکن بازه‌ای با COW
### موتور برداری (`vector/`)
- **اندیس HNSW** (`vector/engine.nim`): گراف Navigable Small World سلسله‌مراتبی
- **اندیس IVF-PQ** (`vector/engine.nim`): فایل معکوس با کوانتیزاسیون محصول
- **عملیات SIMD** (`vector/simd.nim`): محاسبات فاصله بهینه‌شده با AVX2
- **کوانتیزاسیون** (`vector/quant.nim`): اسکالر، محصول، و باینری
### موتور گراف (`graph/`)
- **لیست مجاورت** (`graph/engine.nim`): گراف جهت‌دار با وزن یال
- **الگوریتم‌ها** (`graph/engine.nim`): BFS، DFS، Dijkstra، PageRank
- **تشخیص جامعه** (`graph/community.nim`): الگوریتم Louvain
- **تطبیق الگو** (`graph/community.nim`): ایزومورفیسم زیرگراف
- **پارسر Cypher** (`graph/cypher.nim`): پرس‌وجوهای گرافی Cypher-مانند
### جستجوی تمام‌متن (`fts/`)
- **اندیس معکوس** (`fts/engine.nim`): اندیس سند-ترم
- **رتبه‌بندی** (`fts/engine.nim`): امتیازدهی BM25 و TF-IDF
- **جستجوی تقریبی** (`fts/engine.nim`): تطبیق با فاصله Levenshtein
- **چندزبانه** (`fts/multilang.nim`): توکنایزرهایی برای EN، BG، DE، FR، RU
### موتور ستونی (`core/columnar.nim`)
- ذخیره‌سازی هر-ستونی برای پرس‌وجوهای تحلیلی
- کدگذاری RLE و دیکشنری
- تجمیع‌های شتاب‌گرفته با SIMD
## لایه 4: ذخیره‌سازی
- **LSM-Tree** (`storage/lsm.nim`): MemTable، WAL، SSTable، Bloom Filter، فشرده‌سازی
- **کش صفحه** (`storage/compaction.nim`): کش LRU با ردیابی نرخ hit
- **I/O نگاشته‌شده به حافظه** (`storage/mmap.nim`): دسترسی فایل مبتنی بر mmap
- **بازیابی** (`storage/recovery.nim`): بازپخش WAL و بازیابی پس از خرابی
### مسیر نوشتن
```
کلاینت → پروتکل → احراز → پارسر → AST → IR → کد‌ژن
→ StorageOp → MVCC Txn → WAL Write → MemTable → Commit
```
### مسیر خواندن
```
کلاینت → پروتکل → احراز → پارسر → AST → IR → کد‌ژن
→ StorageOp → MVCC Snapshot → MemTable → SSTable → Result
```
## لایه 5: توزیع‌شده
- **Raft Consensus** (`core/raft.nim`): انتخاب رهبر، تکثیر لاگ
- **شاردینگ** (`core/sharding.nim`): Hash، range، و consistent hashing
- **ریپلیکیشن** (`core/replication.nim`): حالت‌های sync، async، semi-sync
- **پروتکل Gossip** (`core/gossip.nim`): مدیریت عضویت SWIM-مانند
- **تراکنش‌های توزیع‌شده** (`core/disttxn.nim`): commit دو مرحله‌ای
## تصمیمات کلیدی طراحی
1. **Nim خالص**: بدون وابستگی به Cython، Python یا Rust
2. **ذخیره‌سازی یکپارچه**: یک موتور برای KV، گراف، بردار، FTS و ستونی
3. **حالت توکار**: می‌تواند به‌عنوان کتابخانه یا سرور اجرا شود
4. **پروتکل باینری**: پروتکل سیمی کارآمد سفارشی
5. **MVCC**: کنترل همزمانی چندنسخه‌ای
6. **طرحواره-اول**: سیستم طرحواره با نوع قوی با وراثت
7. **کross-modal**: زبان پرس‌وجوی واحد در تمام مدل‌های داده
8. **تأیید رسمی**: الگوریتم‌های اصلی توزیع‌شده در TLA+ مشخص و با TLC بررسی شده
## آمار ماژول‌ها
| دسته | ماژول‌ها | خطوط کد | هدف |
|------|----------|----------|-----|
| Core | 16 | ~4,200 | سرور، پروتکل‌ها، تراکنش‌ها، توزیع‌شده |
| Storage | 7 | ~3,100 | LSM، B-Tree، WAL، bloom، فشرده‌سازی، mmap |
| Query | 7 | ~2,800 | لکسر، پارسر، AST، IR، بهینه‌ساز، کد‌ژن، اجراکننده |
| Vector | 3 | ~1,200 | HNSW، IVF-PQ، کوانتیزاسیون، SIMD |
| Graph | 3 | ~1,000 | لیست مجاورت، الگوریتم‌ها، تشخیص جامعه |
| FTS | 2 | ~900 | اندیس معکوس، BM25، تقریبی، چندزبانه |
| Protocol | 7 | ~2,400 | Wire، HTTP، WebSocket، استخر، auth، محدودیت نرخ، SSL |
| Schema | 1 | ~600 | انواع، لینک‌ها، وراثت، مهاجرت‌ها |
| Client | 2 | ~800 | کلاینت باینری Nim، کمکی فایل |
| CLI | 1 | ~400 | شل تعاملی BaraQL |
| **مجموع** | **49** | **~14,100** | |
## نمودارهای جریان داده
### پرس‌وجوی ساده
```
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ Client │───→│ Lexer │───→│ Parser │───→│ IR │───→│ Codegen│
└────────┘ └────────┘ └────────┘ └────────┘ └───┬────┘
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ Result │←───│ Format │←───│ Execute│←───│ Storage│←──────┘
└────────┘ └────────┘ └────────┘ └────────┘
```
### پرس‌وجوی کross-modal
```
┌─────────────┐
│ Parser │
└──────┬──────┘
┌──────▼──────┐
│ Adaptive │
│ Optimizer │
└──────┬──────┘
┌───────────────┼───────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Vector │ │ Graph │ │ FTS │
│ Engine │ │ Engine │ │ Engine │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└───────────────┼───────────────┘
┌──────▼──────┐
│ Join │
│ & Sort │
└──────┬──────┘
┌──────▼──────┐
│ Result │
└─────────────┘
```
+81
View File
@@ -0,0 +1,81 @@
# پشتیبان‌گیری و بازیابی
## Snapshot آنلاین
BaraDB از snapshot آنلاین بدون توقف سرور پشتیبانی می‌کند.
### ایجاد snapshot
```nim
import barabadb/core/backup
var bm = newBackupManager()
bm.createSnapshot("/backup/baradb_2025-01-15")
```
### از طریق CLI
```bash
./build/baradadb --snapshot --output=/backup/snapshot.db
```
### از طریق HTTP API
```bash
curl -X POST http://localhost:9470/api/backup \
-d '{"destination": "/backup/snapshot.db"}'
```
### پشتیبان‌گیری خودکار
```bash
0 2 * * * /usr/local/bin/baradadb --snapshot --output=/backup/baradb_$(date +\%Y\%m\%d).db
find /backup -name "baradb_*.db" -mtime +7 -delete
```
## بازیابی نقطه‌درزمان (PITR)
### بازیابی از snapshot + WAL
```bash
./build/baradadb --recover \
--checkpoint=/backup/snapshot.db \
--wal-dir=/backup/wal
```
### بازیابی از طریق SQL
```sql
RECOVER TO TIMESTAMP '2026-05-07T12:00:00';
```
## سناریوهای بازیابی
### سناریو 1: خرابی فایل
```bash
cp /backup/sstables/000012.sst ./data/sstables/
./build/baradadb --rebuild-index
```
### سناریو 2: از دست دادن کامل داده
```bash
cp /backup/snapshot.db ./data/
./build/baradadb --recover --wal-dir=/backup/wal
```
### سناریو 3: خرابی گره کلاستر
```bash
BARADB_RAFT_NODE_ID=newnode \
BARADB_RAFT_PEERS=node1:9001,node2:9001 \
./build/baradadb
```
## بهترین شیوه‌ها
1. بازیابی را مرتب تست کنید
2. پشتیبان‌ها را خارج از سایت ذخیره کنید
3. پشتیبان‌ها را رمزنگاری کنید
4. کارهای پشتیبان‌گیری را مانیتور کنید
+492
View File
@@ -0,0 +1,492 @@
# مرجع زبان پرس‌وجو BaraQL
BaraQL یک زبان پرس‌وجو سازگار با SQL با افزونه‌هایی برای عملیات گراف، بردار و سند است.
## انواع داده
| نوع | توضیح | مثال |
|------|--------|------|
| `null` | مقدار تهی | `null` |
| `bool` | بولی | `true`, `false` |
| `int8` | عدد صحیح 8 بیتی علامت‌دار | `127` |
| `int16` | عدد صحیح 16 بیتی علامت‌دار | `32767` |
| `int32` | عدد صحیح 32 بیتی علامت‌دار | `2147483647` |
| `int64` | عدد صحیح 64 بیتی علامت‌دار | `9223372036854775807` |
| `float32` | عدد اعشاری 32 بیتی | `3.14` |
| `float64` | عدد اعشاری 64 بیتی | `3.14159265359` |
| `str` | رشته UTF-8 | `'hello'` |
| `bytes` | بایت‌های خام | `0xDEADBEEF` |
| `array<T>` | آرایه همگن | `[1, 2, 3]` |
| `vector` | بردار float32 | `[0.1, 0.2, 0.3]` |
| `object` | شیء کلید-مقدار | `{"a": 1}` |
| `datetime` | timestamp ISO 8601 | `'2025-01-15T10:30:00Z'` |
| `uuid` | UUID v4 | `'550e8400-e29b-41d4-a716-446655440000'` |
| `json` | سند JSON | `{"key": "value"}` |
| `jsonb` | JSON باینری (تأیید‌شده) | `{"key": "value"}` |
## پرس‌وجوهای پایه
### SELECT
```sql
-- همه ستون‌ها
SELECT * FROM users;
-- ستون‌های خاص
SELECT name, age FROM users;
-- نام‌های مستعار
SELECT name AS full_name, age AS years FROM users;
-- DISTINCT
SELECT DISTINCT department FROM employees;
-- LIMIT و OFFSET
SELECT * FROM users LIMIT 10 OFFSET 20;
```
### WHERE
```sql
-- عملگرهای مقایسه‌ای
SELECT * FROM users WHERE age > 18;
SELECT * FROM users WHERE age >= 18 AND age <= 65;
SELECT * FROM users WHERE name = 'Alice';
SELECT * FROM users WHERE name != 'Bob';
-- بازه
SELECT * FROM users WHERE age BETWEEN 18 AND 65;
-- عضویت مجموعه
SELECT * FROM users WHERE department IN ('Engineering', 'Sales');
-- تطبیق الگو
SELECT * FROM users WHERE name LIKE 'A%';
SELECT * FROM users WHERE name ILIKE 'alice'; -- بدون حساسیت به حروف
-- بررسی NULL
SELECT * FROM users WHERE email IS NOT NULL;
-- عملگرهای منطقی
SELECT * FROM users WHERE age > 18 AND (department = 'Engineering' OR department = 'Sales');
```
### ORDER BY
```sql
-- صعودی (پیش‌فرض)
SELECT * FROM users ORDER BY age;
-- نزولی
SELECT * FROM users ORDER BY age DESC;
-- چند ستون
SELECT * FROM users ORDER BY department ASC, age DESC;
```
### INSERT
```sql
-- یک ردیف
INSERT users { name := 'Alice', age := 30 };
-- با نوع صریح
INSERT User { name := 'Alice', age := 30 };
-- چند ردیف
INSERT users {
{ name := 'Alice', age := 30 },
{ name := 'Bob', age := 25 }
};
```
### UPDATE
```sql
-- به‌روزرسانی همه ردیف‌ها
UPDATE users SET status = 'active';
-- به‌روزرسانی شرطی
UPDATE users SET age = 31 WHERE name = 'Alice';
-- به‌روزرسانی چند ستون
UPDATE users SET age = 32, status = 'premium' WHERE name = 'Alice';
```
### DELETE
```sql
-- حذف همه ردیف‌ها
DELETE FROM users;
-- حذف شرطی
DELETE FROM users WHERE age < 18;
```
## تجمیع و گروه‌بندی
### توابع تجمیعی
| تابع | توضیح |
|------|--------|
| `count(*)` | شمارش همه ردیف‌ها |
| `count(column)` | شمارش مقادیر غیر-NULL |
| `sum(column)` | مجموع مقادیر |
| `avg(column)` | میانگین |
| `min(column)` | کمینه |
| `max(column)` | بیشینه |
| `stddev(column)` | انحراف معیار |
| `variance(column)` | واریانس |
### GROUP BY
```sql
SELECT department, count(*) as emp_count, avg(salary) as avg_salary
FROM employees
GROUP BY department;
-- با HAVING
SELECT department, count(*) as emp_count
FROM employees
GROUP BY department
HAVING count(*) > 5;
-- گروه‌بندی چندگانه
SELECT department, role, count(*), avg(salary)
FROM employees
GROUP BY department, role;
```
## JOINها
```sql
-- INNER JOIN
SELECT u.name, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- LEFT JOIN
SELECT u.name, o.total
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
-- RIGHT JOIN
SELECT u.name, o.total
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;
-- FULL JOIN
SELECT u.name, o.total
FROM users u
FULL JOIN orders o ON u.id = o.user_id;
-- CROSS JOIN
SELECT u.name, p.name
FROM users u
CROSS JOIN products p;
-- JOINهای چندگانه
SELECT u.name, o.id, p.name
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN products p ON o.product_id = p.id;
-- Self JOIN
SELECT e.name, m.name as manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;
```
## CTEها (عبارات جدول مشترک)
```sql
-- CTE واحد
WITH active_users AS (
SELECT * FROM users WHERE active = true
)
SELECT * FROM active_users;
-- CTEهای چندگانه
WITH
recent AS (
SELECT * FROM orders WHERE date > '2025-01-01'
),
totals AS (
SELECT user_id, sum(amount) as total FROM recent GROUP BY user_id
)
SELECT u.name, t.total
FROM users u
JOIN totals t ON u.id = t.user_id;
-- CTE بازگشتی
WITH RECURSIVE subordinates AS (
SELECT id, name, manager_id FROM employees WHERE name = 'CEO'
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN subordinates s ON e.manager_id = s.id
)
SELECT * FROM subordinates;
```
## زیرپرس‌وجوها
```sql
-- زیرپرس‌وجو در SELECT
SELECT name, (SELECT count(*) FROM orders WHERE user_id = u.id) as order_count
FROM users u;
-- زیرپرس‌وجو در FROM
SELECT * FROM (SELECT id, name FROM users WHERE active = true) AS active;
-- زیرپرس‌وجو در WHERE (IN)
SELECT name FROM users WHERE id IN (SELECT user_id FROM orders);
-- زیرپرس‌وجو در WHERE (EXISTS)
SELECT name FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.id);
-- زیرپرس‌وجوی همبسته
SELECT name FROM users u
WHERE age > (SELECT avg(age) FROM users WHERE department = u.department);
```
## عبارات CASE
```sql
SELECT name,
CASE
WHEN age < 13 THEN 'child'
WHEN age < 20 THEN 'teenager'
WHEN age < 65 THEN 'adult'
ELSE 'senior'
END AS category
FROM users;
-- CASE ساده
SELECT name,
CASE department
WHEN 'Engineering' THEN 'Tech'
WHEN 'Sales' THEN 'Revenue'
ELSE 'Other'
END AS division
FROM employees;
```
## عملیات مجموعه‌ای
```sql
-- UNION (متفاوت)
SELECT name FROM customers
UNION
SELECT name FROM suppliers;
-- UNION ALL (با تکرار)
SELECT name FROM customers
UNION ALL
SELECT name FROM suppliers;
-- INTERSECT
SELECT name FROM customers
INTERSECT
SELECT name FROM suppliers;
-- EXCEPT
SELECT name FROM customers
EXCEPT
SELECT name FROM suppliers;
```
## تعریف طرحواره
### CREATE TYPE
```sql
CREATE TYPE Person {
name: str,
age: int32
};
-- با فیلدهای الزامی
CREATE TYPE User {
email: str REQUIRED,
name: str,
age: int32,
created_at: datetime DEFAULT now()
};
-- با لینک‌ها
CREATE TYPE Movie {
title: str,
year: int32,
director: Person
};
-- با ویژگی‌های محاسباتی
CREATE TYPE Employee {
name: str,
base_salary: float64,
bonus: float64,
total_compensation: float64 COMPUTED (base_salary + bonus)
};
```
### وراثت
```sql
CREATE TYPE Animal {
name: str
};
CREATE TYPE Dog EXTENDING Animal {
breed: str
};
CREATE TYPE Cat EXTENDING Animal {
indoor: bool
};
```
### اندیس‌ها
```sql
CREATE INDEX idx_users_name ON users(name);
CREATE UNIQUE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_age ON users(age) USING btree;
```
### DROP
```sql
DROP TYPE User;
DROP INDEX idx_users_name;
```
## جستجوی برداری
```sql
-- درج با بردار
INSERT articles {
title := 'Nim Programming',
embedding := [0.1, 0.2, 0.3, 0.4]
};
-- جستجوی شباهت (فاصله کسینوسی)
SELECT title FROM articles
ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3, 0.4])
LIMIT 5;
-- فاصله اقلیدسی
SELECT title FROM articles
ORDER BY l2_distance(embedding, [0.1, 0.2, 0.3, 0.4])
LIMIT 5;
-- ضرب نقطه‌ای
SELECT title FROM articles
ORDER BY dot_product(embedding, [0.1, 0.2, 0.3, 0.4]) DESC
LIMIT 5;
-- با فیلتر ابرداده
SELECT title FROM articles
WHERE category = 'tech'
ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3, 0.4])
LIMIT 5;
```
## الگوهای گراف
```sql
-- یافتن دوستان Alice
MATCH (p:Person)-[:KNOWS]->(friend:Person)
WHERE p.name = 'Alice'
RETURN friend.name;
-- یافتن کوتاه‌ترین مسیر
MATCH path = shortestPath((a:Person)-[:KNOWS*1..5]->(b:Person))
WHERE a.name = 'Alice' AND b.name = 'Bob'
RETURN path;
-- یافتن همه روابط
MATCH (p:Person)-[r]->(other)
WHERE p.name = 'Alice'
RETURN type(r), other.name;
-- جهش‌های چندگانه
MATCH (a:Person)-[:KNOWS]->(b:Person)-[:KNOWS]->(c:Person)
WHERE a.name = 'Alice'
RETURN c.name;
-- با تجمیع‌ها
MATCH (p:Person)-[:KNOWS]->(friend)
RETURN p.name, count(friend) as friend_count
ORDER BY friend_count DESC;
```
## جستجوی تمام‌متن
```sql
-- جستجوی پایه
SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('database programming');
-- با امتیاز ارتباط
SELECT title, relevance()
FROM articles
WHERE MATCH(title, body) AGAINST('Nim language')
ORDER BY relevance() DESC;
-- حالت بولی
SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('+Nim -Python' IN BOOLEAN MODE);
-- جستجوی تقریبی
SELECT * FROM articles
WHERE MATCH(title) AGAINST('programing' WITH FUZZINESS 2);
```
## تراکنش‌ها
```sql
BEGIN;
INSERT users { name := 'Alice', age := 30 };
INSERT orders { user_id := last_insert_id(), total := 100 };
COMMIT;
-- با savepoint
BEGIN;
INSERT users { name := 'Bob', age := 25 };
SAVEPOINT sp1;
INSERT orders { user_id := last_insert_id(), total := 200 };
-- اوپس، برگشت به savepoint
ROLLBACK TO sp1;
COMMIT;
```
## توابع تعریف‌شده کاربر
```sql
-- ثبت یک UDF
CREATE FUNCTION greet(name str) -> str {
RETURN 'Hello, ' || name || '!';
};
-- استفاده
SELECT greet(name) FROM users;
-- توابع داخلی
SELECT abs(-5), sqrt(16), lower('HELLO'), len('test');
```
## اشاره‌های پرس‌وجو
```sql
-- اجبار استفاده از اندیس
SELECT /*+ USE_INDEX(idx_users_age) */ * FROM users WHERE age > 18;
-- اجبار جستجوی برداری تقریبی
SELECT /*+ APPROXIMATE */ * FROM vectors
ORDER BY cosine_distance(embedding, [...])
LIMIT 10;
-- اجرای موازی
SELECT /*+ PARALLEL(4) */ * FROM large_table;
```
+25
View File
@@ -0,0 +1,25 @@
# اندیس B-Tree
ساختار اندیس مرتب برای اسکن بازه‌ای و جستجوی نقطه‌ای.
## استفاده
```nim
import barabadb/storage/btree
var btree = newBTreeIndex[string, string]()
btree.insert("key1", "value1")
btree.insert("key2", "value2")
let values = btree.get("key1")
let range = btree.scan("key_a", "key_z")
btree.delete("key1")
```
## ویژگی‌ها
- ذخیره‌سازی مرتب کلید-مقدار
- جستجوهای بازه‌ای (BETWEEN, >, <, >=, <=)
- اسکن پیشوندی
- پشتیبانی از iterator
+70
View File
@@ -0,0 +1,70 @@
# سیاهه تغییرات
## [0.1.0] — 2025-01-15
### افزوده شده
- **موتورهای ذخیره‌سازی اصلی**
- LSM-Tree با MemTable، WAL، SSTables و size-tiered compaction
- B-Tree اندیس مرتب با اسکن بازه‌ای و MVCC copy-on-write
- Bloom filterها
- Memory-mapped I/O
- LRU page cache
- **موتور کوئری (BaraQL)**
- لکسر SQL-سازگار با 80+ نوع توکن
- پارسر تولیدکننده AST با 25+ نوع گره
- نمایش میانی (IR)
- بهینه‌ساز تطبیقی
- اجراکننده موازی
- **قابلیت‌های زبان BaraQL**
- SELECT, INSERT, UPDATE, DELETE
- WHERE, ORDER BY, LIMIT, OFFSET
- GROUP BY, HAVING
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
- CTEs با WITH
- زیرکوئری‌ها
- CASE
- UNION, INTERSECT, EXCEPT
- **موتور برداری**
- اندیس HNSW
- IVF-PQ
- SIMD-بهینه‌شده
- **موتور گراف**
- لیست مجاورت
- BFS و DFS
- Dijkstra
- PageRank
- Louvain
- Cypher
- **جستجوی تمام‌متن**
- اندیس معکوس
- BM25
- TF-IDF
- جستجوی فازی
- چندزبانه
- **پروتکل‌ها**
- Binary wire protocol
- HTTP/REST JSON API
- WebSocket
- Connection pooling
- JWT auth
- TLS/SSL
- **سیستم توزیع‌شده**
- Raft consensus
- Sharding
- Replication
- Gossip
- Two-phase commit
### عملکرد
- LSM-Tree: 580K نوشتن/ثانیه، 720K خواندن/ثانیه
- B-Tree: 1.2M درج/ثانیه
- Vector SIMD: 850K فاصله کسینوسی/ثانیه
+66
View File
@@ -0,0 +1,66 @@
# SDK های کلاینت
BaraDB کتابخانه‌های کلاینت رسمی برای JavaScript/TypeScript، Python، Nim و Rust فراهم می‌کند.
## JavaScript / TypeScript
### نصب
```bash
npm install baradb
```
### استفاده پایه
```typescript
import { Client } from 'baradb';
const client = new Client('localhost', 9472);
await client.connect();
const result = await client.query('SELECT name, age FROM users WHERE age > 18');
```
## Python
### نصب
```bash
pip install baradb
```
### استفاده پایه
```python
from baradb import Client
client = Client("localhost", 9472)
client.connect()
result = client.query("SELECT name, age FROM users WHERE age > 18")
```
## Nim (حالت توکار)
```nim
import barabadb/storage/lsm
var db = newLSMTree("./data")
db.put("key", cast[seq[byte]]("value"))
let (found, val) = db.get("key")
db.close()
```
## Rust
```rust
use baradb::Client;
let mut client = Client::connect("localhost:9472").await?;
```
## HTTP/REST
```bash
curl -X POST http://localhost:9470/api/query \
-d '{"query": "SELECT * FROM users"}'
```
+50
View File
@@ -0,0 +1,50 @@
# ذخیره‌سازی ستونی
ذخیره‌سازی ستون-محور برای کوئری‌های تحلیلی و تجمیع‌ها.
## استفاده
```nim
import barabadb/core/columnar
var batch = newColumnBatch()
var ageCol = batch.addInt64Col("age")
var nameCol = batch.addStringCol("name")
ageCol.appendInt64(25)
nameCol.appendString("Alice")
```
## تجمیع‌ها
```nim
echo ageCol.sumInt64()
echo ageCol.avgInt64()
echo ageCol.minInt64()
echo ageCol.maxInt64()
```
## کدگذاری
### RLE
```nim
let rle = rleEncode(@[1'i64, 1, 1, 2, 2, 3])
```
### Dictionary
```nim
let dict = dictEncode(@["apple", "banana", "apple"])
```
## انواع ستون
| نوع | توضیح |
|-----|--------|
| `int32` | عدد صحیح 32 بیتی |
| `int64` | عدد صحیح 64 بیتی |
| `float32` | عدد اعشاری 32 بیتی |
| `float64` | عدد اعشاری 64 بیتی |
| `string` | رشته با طول متغیر |
| `bool` | بولی |
+94
View File
@@ -0,0 +1,94 @@
# مرجع پیکربندی
BaraDB از **متغیرهای محیطی**، **فایل پیکربندی** یا **پرچم‌های خط فرمان** پیکربندی می‌شود.
## اولویت
1. پرچم‌های خط فرمان (بالاترین)
2. متغیرهای محیطی
3. فایل پیکربندی (`baradb.conf` یا `baradb.json`)
4. مقادیر پیش‌فرض (پایین‌ترین)
## متغیرهای محیطی
### شبکه
| متغیر | پیش‌فرض | توضیح |
|--------|---------|--------|
| `BARADB_ADDRESS` | `127.0.0.1` | آدرس اتصال |
| `BARADB_PORT` | `9472` | پورت پروتکل باینری |
| `BARADB_HTTP_PORT` | `9470` | پورت HTTP/REST API |
| `BARADB_WS_PORT` | `9471` | پورت WebSocket |
### ذخیره‌سازی
| متغیر | پیش‌فرض | توضیح |
|--------|---------|--------|
| `BARADB_DATA_DIR` | `./data` | مسیر پوشه داده |
| `BARADB_MEMTABLE_SIZE_MB` | `64` | اندازه MemTable (MB) |
| `BARADB_CACHE_SIZE_MB` | `256` | اندازه کش صفحه (MB) |
### TLS/SSL
| متغیر | پیش‌فرض | توضیح |
|--------|---------|--------|
| `BARADB_TLS_ENABLED` | `false` | فعال‌سازی TLS |
| `BARADB_CERT_FILE` | — | مسیر گواهی TLS |
| `BARADB_KEY_FILE` | — | مسیر کلید TLS |
### امنیت
| متغیر | پیش‌فرض | توضیح |
|--------|---------|--------|
| `BARADB_AUTH_ENABLED` | `false` | فعال‌سازی احراز هویت |
| `BARADB_JWT_SECRET` | — | رمز امضای JWT |
## فایل پیکربندی
### baradb.conf
```ini
[server]
address = "0.0.0.0"
port = 9472
http_port = 9470
[storage]
data_dir = "/var/lib/baradb"
memtable_size_mb = 256
cache_size_mb = 512
[tls]
enabled = true
cert_file = "/etc/baradb/server.crt"
key_file = "/etc/baradb/server.key"
[auth]
enabled = true
jwt_secret = "change-me-in-production"
```
## پرچم‌های خط فرمان
```bash
./build/baradadb --help
```
## نمونه پیکربندی‌ها
### توسعه
```bash
./build/baradadb --log-level debug --data-dir ./dev_data
```
### تولید - گره واحد
```bash
BARADB_TLS_ENABLED=true \
BARADB_AUTH_ENABLED=true \
BARADB_JWT_SECRET="$(openssl rand -hex 32)" \
BARADB_MEMTABLE_SIZE_MB=256 \
BARADB_CACHE_SIZE_MB=1024 \
./build/baradadb
```
+40
View File
@@ -0,0 +1,40 @@
# پرس‌وجوهای بین‌حالتی
توانایی منحصربه‌فرد BaraDB برای اجرای کوئری‌هایی که چندین موتور ذخیره‌سازی را در یک عبارت BaraQL واحد پوشش می‌دهند.
## نمای کلی
- **سند/KV** (LSM-Tree) — رکوردهای ساختاریافته
- **گراف** (لیست مجاورت) — روابط
- **بردار** (HNSW/IVF-PQ) — جستجوی شباهت
- **تمام‌متن** (اندیس معکوس) — جستجوی متنی
- **ستونی** — تجمیع‌های تحلیلی
## پترن‌های کوئری
### بردار + تمام‌متن
```sql
SELECT title FROM articles
WHERE MATCH(body) AGAINST('machine learning')
ORDER BY cosine_distance(embedding, [...])
LIMIT 10;
```
### گراف + بردار
```sql
MATCH (u:User)-[:KNOWS]->(friend:User)
WHERE u.name = 'Alice'
ORDER BY cosine_distance(friend.taste_vector, u.taste_vector)
RETURN friend.name;
```
## بهینه‌سازی
### برنامه‌ریز پرس‌وجو
1. فیلتر انتخابی‌ترین اول
2. پوش‌داون پریدایکت‌ها به هر موتور
3. فیلترهای Bloom برای جستجوهای KV
4. موازی‌سازی شاخه‌های مستقل
+249
View File
@@ -0,0 +1,249 @@
# راهنمای استقرار BaraDB
## Docker
برای راهنمای کامل استقرار Docker به [راهنمای Docker](docker.md) مراجعه کنید.
### شروع سریع
```bash
docker build -t baradb:latest .
docker compose up -d
```
### فایل‌های Docker Compose
| فایل | کاربرد |
|------|--------|
| `docker-compose.yml` | توسعه |
| `docker-compose.prod.yml` | تولید |
| `docker-compose.override.yml` | Override توسعه (خودکار) |
### تولید
```bash
docker compose -f docker-compose.prod.yml up -d
```
### Docker Swarm
```bash
docker stack deploy -c docker-compose.prod.yml baradb
```
## سرویس systemd
فایل `/etc/systemd/system/baradb.service` را ایجاد کنید:
```ini
[Unit]
Description=BaraDB Multimodal Database
After=network.target
[Service]
Type=simple
User=baradb
Group=baradb
WorkingDirectory=/var/lib/baradb
ExecStart=/usr/local/bin/baradadb
Restart=always
RestartSec=5
Environment=BARADB_PORT=9472
Environment=BARADB_HTTP_PORT=9470
Environment=BARADB_DATA_DIR=/var/lib/baradb/data
Environment=BARADB_LOG_LEVEL=info
# Hardening امنیت
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/baradb/data
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
[Install]
WantedBy=multi-user.target
```
فعال‌سازی و شروع:
```bash
sudo useradd -r -s /bin/false baradb
sudo mkdir -p /var/lib/baradb/data
sudo chown -R baradb:baradb /var/lib/baradb
sudo cp build/baradadb /usr/local/bin/
sudo systemctl daemon-reload
sudo systemctl enable --now baradb
```
## Kubernetes
### StatefulSet
```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: baradb
spec:
serviceName: baradb
replicas: 3
selector:
matchLabels:
app: baradb
template:
metadata:
labels:
app: baradb
spec:
containers:
- name: baradb
image: baradb:latest
ports:
- containerPort: 9472
name: binary
- containerPort: 9470
name: http
- containerPort: 9471
name: websocket
env:
- name: BARADB_DATA_DIR
value: /data
- name: BARADB_RAFT_NODE_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: baradb
spec:
selector:
app: baradb
ports:
- port: 9472
name: binary
- port: 9470
name: http
- port: 9471
name: websocket
clusterIP: None
```
## Reverse Proxy (nginx)
```nginx
upstream baradb_http {
server 127.0.0.1:9470;
}
upstream baradb_ws {
server 127.0.0.1:9471;
}
server {
listen 80;
server_name db.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name db.example.com;
ssl_certificate /etc/letsencrypt/live/db.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/db.example.com/privkey.pem;
location /api/ {
proxy_pass http://baradb_http/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /ws/ {
proxy_pass http://baradb_ws/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
## دسترس‌پذیری بالا
### خوشه Raft سه گره‌ای
```bash
# گره 1
BARADB_RAFT_NODE_ID=node1 \
BARADB_RAFT_PEERS=node2:9001,node3:9001 \
./build/baradadb
# گره 2
BARADB_RAFT_NODE_ID=node2 \
BARADB_RAFT_PEERS=node1:9001,node3:9001 \
./build/baradadb
# گره 3
BARADB_RAFT_NODE_ID=node3 \
BARADB_RAFT_PEERS=node1:9001,node2:9001 \
./build/baradadb
```
## استقرار ابری
### AWS EC2
نمونه توصیه‌شده: `m6i.2xlarge` (8 vCPU, 32 GB RAM)
```bash
# User data script
#!/bin/bash
apt-get update
apt-get install -y nim
wget https://github.com/katehonz/barabaDB/releases/latest/download/baradadb-linux-amd64
chmod +x baradadb-linux-amd64
mv baradadb-linux-amd64 /usr/local/bin/baradadb
mkdir -p /data/baradb
cat > /etc/systemd/system/baradb.service << 'EOF'
[Unit]
Description=BaraDB
After=network.target
[Service]
ExecStart=/usr/local/bin/baradadb
Environment=BARADB_DATA_DIR=/data/baradb
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now baradb
```
### GCP Cloud Run (فقط HTTP)
```bash
gcloud run deploy baradb \
--image gcr.io/PROJECT/baradb \
--port 9470 \
--memory 4Gi \
--cpu 2 \
--max-instances 10
```
+82
View File
@@ -0,0 +1,82 @@
# سیستم‌های توزیع‌شده
BaraDB از استقرار توزیع‌شده با اجماع Raft، شاردینگ و تکثیر پشتیبانی می‌کند.
## اجماع Raft
انتخاب رهبر و تکثیر لاگ:
```nim
import barabadb/core/raft
var cluster = newRaftCluster()
cluster.addNode("node1")
cluster.addNode("node2")
cluster.addNode("node3")
let n1 = cluster.nodes["n1"]
n1.becomeCandidate()
n1.becomeLeader()
```
## شاردینگ
```nim
import barabadb/core/sharding
var router = newShardRouter(ShardConfig(
numShards: 4,
replicas: 2,
strategy: ssHash
))
```
### استراتژی‌های شاردینگ
| استراتژی | توضیح |
|-----------|--------|
| `ssHash` | شاردینگ مبتنی بر hash |
| `ssRange` | شاردینگ مبتنی بر بازه |
| `ssConsistent` | هش سازگار |
## تکثیر
```nim
import barabadb/core/replication
var rm = newReplicationManager(rmSync)
rm.addReplica(newReplica("r1", "10.0.0.1", 9472))
```
### حالت‌های تکثیر
| حالت | توضیح |
|------|--------|
| `rmSync` | تکثیر همگام |
| `rmAsync` | تکثیر ناهمگام |
| `rmSemiSync` | تکثیر نیمه‌همگام |
## پروتکل Gossip
```nim
import barabadb/core/gossip
var g = newGossipManager()
g.addNode("node1")
g.addNode("node2")
g.tick()
```
## تراکنش‌های توزیع‌شده
```nim
import barabadb/core/disttxn
var dt = newDistributedTxn()
dt.prepare(@["node1", "node2"])
dt.commit()
```
## تأیید رسمی
الگوریتم‌های اصلی توزیع‌شده در TLA+ مشخص و تأیید شده‌اند.
+113
View File
@@ -0,0 +1,113 @@
# راهنمای استقرار Docker
## شروع سریع
```bash
git clone https://github.com/katehonz/barabaDB.git
cd barabaDB
docker build -t baradb:latest .
docker compose up -d
docker compose ps
docker compose logs -f
```
## فایل‌ها
| فایل | توضیح |
|------|--------|
| `Dockerfile` | ساخت multi-stage production |
| `docker-compose.yml` | پیکربندی توسعه |
| `docker-compose.prod.yml` | پیکربندی تولید |
| `docker-compose.override.yml` | Override توسعه |
| `docker-entrypoint.sh` | اسکریپت entrypoint |
| `.dockerignore` | فایل‌های مستثنی از کپی |
| `scripts/docker-build.sh` | اسکریپت کمکی ساخت |
| `scripts/docker-run.sh` | اسکریپت کمکی اجرا |
## ساخت تصویر
```bash
docker build -t baradb:latest .
./scripts/docker-build.sh
```
## اجرا
### توسعه
```bash
docker compose up -d
docker compose down
docker compose logs -f
```
### تولید
```bash
docker compose -f docker-compose.prod.yml up -d
```
### دستی
```bash
docker run -d \
--name baradb \
-p 9472:9472 \
-p 9470:9470 \
-p 9471:9471 \
-v baradb_data:/data \
baradb:latest
```
## پورت‌ها
| پورت | توضیح |
|------|--------|
| `9472` | پروتکل باینری |
| `9470` | HTTP/REST API |
| `9471` | WebSocket |
## متغیرهای محیطی
| متغیر | پیش‌فرض | توضیح |
|--------|---------|--------|
| `BARADB_ADDRESS` | `0.0.0.0` | آدرس اتصال |
| `BARADB_PORT` | `9472` | پورت پروتکل باینری |
| `BARADB_HTTP_PORT` | `9470` | پورت HTTP |
| `BARADB_DATA_DIR` | `/data` | پوشه داده |
## Volumeها
| مسیر | توضیح |
|------|--------|
| `/data` | پوشه اصلی داده |
| `/data/server/wal` | Write-ahead log |
| `/data/server/sstables` | فایل‌های SSTable |
## چک‌لیست تولید
- [ ] ایجاد گواهی‌های TLS
- [ ] تنظیم `BARADB_JWT_SECRET` قوی
- [ ] پیکربندی قوانین فایروال
- [ ] تنظیم پشتیبان‌گیری منظم
- [ ] بررسی محدودیت منابع
- [ ] تنظیم مانیتورینگ
## TLS در Docker
```bash
mkdir -p certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout certs/server.key -out certs/server.crt
```
## پشتیبان‌گیری
```bash
docker exec baradb /app/backup backup --data-dir=/data
docker exec baradb /app/backup list
docker exec baradb /app/backup restore --input=backup_xxx.tar.gz
```
+47
View File
@@ -0,0 +1,47 @@
# موتور جستجوی تمام‌متن
اندیس معکوس با رتبه‌بندی BM25 و TF-IDF.
## استفاده
```nim
import barabadb/fts/engine
var idx = newInvertedIndex()
idx.addDocument(1, "Nim is a fast programming language")
idx.addDocument(2, "Python is popular for data science")
let results = idx.search("programming language")
let fuzzy = idx.fuzzySearch("programing", maxDistance = 2)
```
## روش‌های رتبه‌بندی
### BM25
```nim
let bm25 = idx.searchBM25("query terms")
```
### TF-IDF
```nim
let tfidf = idx.searchTfidf("query terms")
```
## ویژگی‌های جستجو
| ویژگی | توضیح |
|--------|--------|
| Fuzzy search | تساهل فاصله Levenshtein |
| Wildcard | پیشوند، پسوند، میانوند |
| Regex | الگوهای regular |
| Phrase search | تطبیق عبارت دقیق |
| Boolean | عملگرهای AND, OR, NOT |
## رابط SQL
```sql
CREATE INDEX idx_fts ON articles(body) USING FTS;
SELECT * FROM articles WHERE body @@ 'machine learning';
```
+42
View File
@@ -0,0 +1,42 @@
# موتور گراف
ذخیره‌سازی لیست مجاورت با الگوریتم‌های داخلی برای پیمایش و تحلیل گراف.
## استفاده
```nim
import barabadb/graph/engine
var g = newGraph()
let alice = g.addNode("Person", {"Name": "Alice"}.toTable)
let bob = g.addNode("Person", {"Name": "Bob"}.toTable)
discard g.addEdge(alice, bob, "knows")
let bfs = g.bfs(alice)
let path = g.shortestPath(alice, bob)
let ranks = g.pageRank()
```
## الگوریتم‌ها
| الگوریتم | توضیح |
|----------|--------|
| `bfs` | پیمایش اول سطح |
| `dfs` | پیمایش اول عمق |
| `dijkstra` | کوتاه‌ترین مسیر وزن‌دار |
| `pageRank` | رتبه‌بندی اهمیت گره |
| `louvain` | تشخیص جامعه |
| `patternMatch` | ایزومورفیسم زیرگراف |
## Cypher
```nim
import barabadb/graph/cypher
var engine = newCypherEngine(g)
let results = engine.execute("""
MATCH (p:Person)-[:KNOWS]->(friend:Person)
WHERE p.name = 'Alice'
RETURN friend.name
""")
```
+59
View File
@@ -0,0 +1,59 @@
# مستندات BaraDB (فارسی)
**یک موتور پایگاه داده چند حالته به زبان Nim — کاملاً بومی، بدون وابستگی.**
## پیوندهای سریع
> **توجه:** مستندات فارسی در حال توسعه است. لطفاً برای اطلاعات کامل به [نسخه انگلیسی](../en/) مراجعه کنید.
### شروع کار
- [نصب](../en/installation.md)
- [شروع سریع](../en/quickstart.md)
- [بررسی معماری](../en/architecture.md)
- [پیکربندی](../en/configuration.md)
- [راهنمای استقرار](../en/deployment.md)
### مفاهیم اصلی
- [BaraQL — زبان پرس‌وجو](../en/baraql.md)
- [موتورهای ذخیره‌سازی](../en/storage.md)
- [سیستم طرحواره](../en/schema.md)
- [پرس‌وجوهای بین‌حالتی](../en/crossmodal.md)
### موتورها
- [LSM-Tree](../en/lsm.md)
- [اندیس B-Tree](../en/btree.md)
- [جستجوی برداری](../en/vector.md)
- [موتور گراف](../en/graph.md)
- [جستجوی تمام‌متن](../en/fts.md)
- [ذخیره‌سازی ستونی](../en/columnar.md)
### API و کلاینت‌ها
- [SDK های کلاینت](../en/clients.md)
- [پروتکل باینری](../en/api-binary.md)
- [HTTP/REST API](../en/api-http.md)
- [WebSocket API](../en/api-websocket.md)
- [مرجع پروتکل](../en/protocol.md)
### عملیات
- [عملکرد و معیارسنجی](../en/performance.md)
- [امنیت](../en/security.md)
- [نظارت](../en/monitoring.md)
- [پشتیبان‌گیری و بازیابی](../en/backup.md)
- [عیب‌یابی](../en/troubleshooting.md)
### مباحث پیشرفته
- [تراکنش‌ها و MVCC](../en/transactions.md)
- [سیستم‌های توزیع‌شده](../en/distributed.md)
- [توابع تعریف‌شده کاربر](../en/udf.md)
---
## اطلاعات پروژه
- [تاریخچه تغییرات](../en/changelog.md)
- [مجوز](../../LICENSE)
- [مخزن GitHub](https://github.com/katehonz/barabaDB)
---
*مستندات فارسی در دست تهیه است.*
+309
View File
@@ -0,0 +1,309 @@
# راهنمای نصب BaraDB
## الزامات
- **کامپایلر Nim** >= 2.2.0
- **فایل‌های هدر OpenSSL** (برای پشتیبانی TLS)
- **سیستم‌عامل**: لینوکس، macOS، ویندوز
### پلتفرم‌های پشتیبانی‌شده
| سیستم‌عامل | معماری | وضعیت |
|------------|--------|--------|
| لینوکس | x86_64 | ✅ پشتیبانی کامل |
| لینوکس | ARM64 | ✅ پشتیبانی کامل |
| macOS | x86_64 | ✅ پشتیبانی کامل |
| macOS | ARM64 (Apple Silicon) | ✅ پشتیبانی کامل |
| ویندوز | x86_64 | ✅ پشتیبانی‌شده |
| FreeBSD | x86_64 | 🟡 تست‌شده توسط جامعه |
## نصب Nim
### لینوکس
```bash
# نصب‌کننده رسمی
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install nim
# Fedora
sudo dnf install nim
# Arch Linux
sudo pacman -S nim
```
### macOS
```bash
# Homebrew
brew install nim
# MacPorts
sudo port install nim
```
### ویندوز
```powershell
# Using choosenim
curl.exe -A "MSYS2_$(uname -m)" -L https://nim-lang.org/choosenim/init.ps1 | powershell -
# Using winget
winget install nim
# Using scoop
scoop install nim
```
### تأیید نصب
```bash
nim --version
# انتظار: Nim Compiler Version 2.2.0 یا بالاتر
```
## نصب OpenSSL
### لینوکس
```bash
# Ubuntu/Debian
sudo apt-get install libssl-dev
# Fedora
sudo dnf install openssl-devel
# Arch Linux
sudo pacman -S openssl
```
### macOS
OpenSSL همراه سیستم است. در صورت نیاز:
```bash
brew install openssl
```
### ویندوز
OpenSSL همراه توزیع ویندوز Nim است. برای ساخت دستی،
از [slproweb.com](https://slproweb.com/products/Win32OpenSSL.html) دانلود کنید.
## ساخت BaraDB
### کلون کردن مخزن
```bash
git clone https://github.com/katehonz/barabaDB.git
cd barabaDB
```
### نصب وابستگی‌ها
```bash
nimble install -d -y
```
### گزینه‌های ساخت
#### ساخت دیباگ
```bash
nim c -d:ssl -o:build/baradadb src/baradadb.nim
```
#### ساخت ریلیز (توصیه‌شده)
```bash
nim c -d:ssl -d:release --opt:speed -o:build/baradadb src/baradadb.nim
```
#### استفاده از Nimble Tasks
```bash
# ساخت دیباگ
nimble build_debug
# ساخت ریلیز
nimble build_release
```
#### کاهش حجم باینری
```bash
nim c -d:ssl -d:release --opt:size -o:build/baradadb src/baradadb.nim
strip build/baradadb
```
### تأیید ساخت
```bash
./build/baradadb --version
# انتظار: BaraDB v0.1.0 — Multimodal Database Engine
```
## اجرای تست‌ها
### همه تست‌ها
```bash
nim c -d:ssl -r tests/test_all.nim
```
### مجموعه‌های تست خاص
```bash
# تست‌های ذخیره‌سازی
nim c -d:ssl -r tests/test_storage.nim
# تست‌های موتور پرس‌وجو
nim c -d:ssl -r tests/test_query.nim
# تست‌های پروتکل
nim c -d:ssl -r tests/test_protocol.nim
```
### بنچمارک‌ها
```bash
nim c -d:ssl -d:release -r benchmarks/bench_all.nim
```
## گزینه‌های نصب
### نصب سیستمی
```bash
# ساخت باینری ریلیز
nimble build_release
# نصب در /usr/local/bin
sudo cp build/baradadb /usr/local/bin/
sudo chmod +x /usr/local/bin/baradadb
# ایجاد پوشه داده
sudo mkdir -p /var/lib/baradb
sudo chmod 755 /var/lib/baradb
```
### باینری از پیش ساخته‌شده
آخرین ریلیز را برای پلتفرم خود دانلود کنید:
```bash
# لینوکس x86_64
wget https://github.com/katehonz/barabaDB/releases/latest/download/baradadb-linux-amd64
chmod +x baradadb-linux-amd64
mv baradadb-linux-amd64 /usr/local/bin/baradadb
# لینوکس ARM64
wget https://github.com/katehonz/barabaDB/releases/latest/download/baradadb-linux-arm64
chmod +x baradadb-linux-arm64
mv baradadb-linux-arm64 /usr/local/bin/baradadb
# macOS
wget https://github.com/katehonz/barabaDB/releases/latest/download/baradadb-darwin-amd64
chmod +x baradadb-darwin-amd64
mv baradadb-darwin-amd64 /usr/local/bin/baradadb
```
### Docker
```bash
# دریافت ایمیج رسمی
docker pull barabadb/barabadb:latest
# اجرا
docker run -d \
-p 9472:9472 \
-p 9470:9470 \
-p 9471:9471 \
-v baradb_data:/data \
barabadb/barabadb
```
### Docker Compose
```bash
docker-compose up -d
```
### استفاده توکار (پروژه‌های Nim)
به فایل `.nimble` خود اضافه کنید:
```nim
requires "barabadb >= 0.1.0"
```
در کد خود استفاده کنید:
```nim
import barabadb/storage/lsm
var db = newLSMTree("./data")
db.put("key", cast[seq[byte]]("value"))
let (found, val) = db.get("key")
db.close()
```
## اجرای اولیه
```bash
# شروع سرور
./build/baradadb
# خروجی مورد انتظار:
# BaraDB v0.1.0 — Multimodal Database Engine
# BaraDB TCP listening on 127.0.0.1:9472
# تست با HTTP API
curl http://localhost:9470/health
# شل تعاملی
./build/baradadb --shell
```
## عیب‌یابی نصب
### "cannot open file: hunos"
```bash
nimble install -d -y
```
### "BaraDB requires SSL support"
همیشه با `-d:ssl` کامپایل کنید:
```bash
nim c -d:ssl -o:build/baradadb src/baradadb.nim
```
### کامپایل کند
از کامپایل موازی استفاده کنید:
```bash
nim c -d:ssl -d:release --parallelBuild:4 -o:build/baradadb src/baradadb.nim
```
### حجم باینری زیاد
از بهینه‌سازی اندازه استفاده کنید:
```bash
nim c -d:ssl -d:release --opt:size --passL:-s -o:build/baradadb src/baradadb.nim
```
## مراحل بعدی
- [راهنمای شروع سریع](quickstart.md)
- [مرجع پیکربندی](configuration.md)
- [بررسی معماری](architecture.md)
- [زبان پرس‌وجو BaraQL](baraql.md)
+48
View File
@@ -0,0 +1,48 @@
# موتور ذخیره‌سازی LSM-Tree
موتور ذخیره‌سازی اصلی BaraDB با معماری Log-Structured Merge-Tree.
## معماری
```
┌─────────────────────────────────────────────┐
│ Writes │
│ (append to WAL + MemTable) │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ MemTable │
│ (in-memory sorted buffer) │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ SSTable │
│ (sorted string table on disk) │
└─────────────────────────────────────────────┘
```
## استفاده
```nim
import barabadb/storage/lsm
var db = newLSMTree("./data")
db.put("key1", cast[seq[byte]]("value1"))
let (found, value) = db.get("key1")
db.delete("key1")
db.close()
```
## ویژگی‌ها
- **بهینه برای نوشتن**: ساختار log-only اضافه‌شونده
- **دوام**: WAL تضمین‌کننده بازیابی پس از خرابی
- **Bloom Filter**: جستجوهای منفی سریع
- **Compaction**: استراتژی size-tiered
- **Page Cache**: کش LRU
+78
View File
@@ -0,0 +1,78 @@
# پایش و مشاهده‌پذیری
## بررسی‌های سلامت
### endpoint سلامت HTTP
```bash
curl http://localhost:9470/health
```
پاسخ:
```json
{
"status": "healthy",
"version": "0.1.0",
"uptime_seconds": 86400,
"checks": {
"storage": "ok",
"memory": "ok",
"connections": "ok"
}
}
```
## معیارها
### معیارهای سازگار با Prometheus
```bash
curl http://localhost:9470/metrics
```
### معیارهای JSON
```bash
curl http://localhost:9470/metrics?format=json
```
## لاگ‌گذاری
### سطوح لاگ
| سطح | توضیح |
|------|--------|
| `debug` | عملیات داخلی تفصیلی |
| `info` | عملیات عادی |
| `warn` | مشکلات قابل بازیابی |
| `error` | خطاهای نیازمند توجه |
### لاگ‌های JSON ساختاریافته
```bash
BARADB_LOG_LEVEL=info \
BARADB_LOG_FORMAT=json \
BARADB_LOG_FILE=/var/log/baradb/baradb.log \
./build/baradadb
```
## Grafana
پنل‌های کلیدی:
- Queries per second
- Latency درصدها (p50, p95, p99)
- اندازه ذخیره‌سازی
- نرخ hit کش
- اتصالات فعال
- نرخ تراکنش
- نرخ خطا
## عیب‌یابی با معیارها
| علامت | معیار | عمل |
|-------|-------|-----|
| کوئری‌های کند | `baradb_queries_duration_seconds` | بررسی نرخ hit کش |
| حافظه بالا | `process_resident_memory_bytes` | کاهش اندازه‌های memtable/cache |
| رشد ذخیره‌سازی | `baradb_storage_lsm_size_bytes` | اجرای فشرده‌سازی دستی |
| خطاهای اتصال | `baradb_active_connections` | افزایش استخر اتصال |
+62
View File
@@ -0,0 +1,62 @@
# راهنمای عملکرد
## روش‌شناسی بنچمارک
همه بنچمارک‌ها با Nim 2.2.0 و `-d:release --opt:speed` اجرا می‌شوند.
## بنچمارک‌های ذخیره‌سازی
### LSM-Tree
| متریک | مقدار |
|--------|-------|
| توان عملیاتی نوشتن | ~580,000 ops/s |
| توان عملیاتی خواندن | ~720,000 ops/s |
### B-Tree
| متریک | مقدار |
|--------|-------|
| توان عملیاتی درج | ~1,200,000 ops/s |
| جستجوی نقطه‌ای | ~1,500,000 ops/s |
## بنچمارک‌های موتور برداری
### HNSW
| متریک | مقدار |
|--------|-------|
| درج (dim=128) | ~45,000 vectors/s |
| جستجوی top-10 (n=100K) | ~8 ms |
## بنچمارک‌های پروتکل
| پروتکل | اتصال | کوئری/ثانیه |
|--------|-------|--------------|
| Binary | 1 | 45,000 |
| Binary | 100 | 380,000 |
| HTTP/REST | 1 | 12,000 |
## راهنمای تنظیم
### برای بار کاری سنگین نوشتن
```bash
BARADB_MEMTABLE_SIZE_MB=256
BARADB_WAL_SYNC_INTERVAL_MS=10
```
### برای بار کاری سنگین خواندن
```bash
BARADB_CACHE_SIZE_MB=1024
BARADB_BLOOM_BITS_PER_KEY=10
```
### برای جستجوی برداری
```bash
BARADB_VECTOR_EF_CONSTRUCTION=200
BARADB_VECTOR_EF_SEARCH=128
BARADB_VECTOR_M=32
```
+67
View File
@@ -0,0 +1,67 @@
# مرجع پروتکل
BaraDB چندین پروتکل پشتیبانی می‌کند:
- **Binary Wire Protocol** — با کارایی بالا
- **HTTP/REST API** — مستقل از زبان
- **WebSocket** — استریمینگ و pub/sub
## Binary Wire Protocol
از کدگذاری big-endian استفاده می‌کند.
### چرخه اتصال
```
Client Server
| |
|─── TCP connect ──────────────>|
|─── Auth message ─────────────>|
|<── Auth_OK / Error ───────────|
|─── Query message ────────────>|
|<── Data / Complete / Error ───|
```
### فرمت پیام
```
┌─────────────┬─────────────┬─────────────┬─────────────────────┐
│ Length │ Type │ Sequence │ Payload │
│ (4 bytes) │ (1 byte) │ (1 byte) │ (Length - 6 bytes) │
└─────────────┴─────────────┴─────────────┴─────────────────────┘
```
### انواع پیام
| نوع | ID | توضیح |
|----|----|--------|
| Query | 0x01 | اجرای کوئری |
| Insert | 0x02 | درج داده |
| Update | 0x03 | به‌روزرسانی |
| Delete | 0x04 | حذف |
| Ready | 0x05 | آماده |
| Error | 0x06 | پاسخ خطا |
## HTTP/REST API
Base URL: `http://localhost:9470/api/v1`
### Endpoints
#### Health
```http
GET /health
```
#### Query
```http
POST /query
{
"query": "SELECT * FROM users"
}
```
## WebSocket Protocol
URL: `ws://localhost:9471`
+134
View File
@@ -0,0 +1,134 @@
# راهنمای شروع سریع BaraDB
## شروع سرور
پس از ساخت BaraDB، سرور را_START کنید:
```bash
./build/baradadb
```
سرور به‌صورت پیش‌فرض روی `localhost:9470` شروع می‌شود.
## اتصال از طریق CLI
BaraDB شامل یک شل تعاملی است:
```bash
./build/baradadb --shell
```
## عملیات پایه
### ایجاد طرحواره
```sql
CREATE TYPE Person {
name: str,
age: int32
};
CREATE TYPE Movie {
title: str,
year: int32,
director: Person
};
```
### درج داده
```sql
INSERT Person { name := 'Alice', age := 30 };
INSERT Person { name := 'Bob', age := 25 };
```
### پرس‌وجوی داده
```sql
SELECT name, age FROM Person WHERE age > 18;
```
### به‌روزرسانی داده
```sql
UPDATE Person SET age = 31 WHERE name = 'Alice';
```
### حذف داده
```sql
DELETE FROM Person WHERE name = 'Bob';
```
## پرس‌وجوهای پیشرفته
### JOIN
```sql
SELECT u.name, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
```
### تجمیع‌ها
```sql
SELECT department, count(*), avg(salary)
FROM employees
GROUP BY department
HAVING count(*) > 5;
```
### CTEها
```sql
WITH active_users AS (
SELECT * FROM users WHERE active = true
)
SELECT * FROM active_users;
```
## جستجوی برداری
```sql
-- درج بردار
INSERT vectors { id := 1, embedding := [0.1, 0.2, 0.3] };
-- جستجوی مشابه
SELECT * FROM vectors ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3]) LIMIT 10;
```
## عملیات گراف
```sql
-- تطبیق الگوی گراف
MATCH (p:Person)-[:KNOWS]->(other:Person)
WHERE p.name = 'Alice'
RETURN other.name;
```
## جستجوی تمام‌متن
```sql
-- جستجوی اسناد
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('database');
```
## HTTP/REST API
```bash
# درخواست GET
curl http://localhost:9470/api/users
# درخواست POST
curl -X POST http://localhost:9470/api/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "age": 30}'
```
## مراحل بعدی
- [مرجع BaraQL](baraql.md)
- [موتورهای ذخیره‌سازی](storage.md)
- [بررسی معماری](architecture.md)
- [مرجع پروتکل](protocol.md)
+46
View File
@@ -0,0 +1,46 @@
# سیستم طرحواره
BaraDB از طراحی schema-first با وراثت نوع و مهاجرت‌های خودکار استفاده می‌کند.
## تعریف انواع
```nim
import barabadb/schema/schema
var s = newSchema()
let person = newType("Person")
person.addProperty("name", "str", required = true)
person.addProperty("age", "int32")
s.addType("default", person)
```
## وراثت نوع
```nim
let employee = newType("Employee")
employee.setBases(@["Person"])
employee.addProperty("department", "str")
s.addType("default", employee)
```
## عملیات طرحواره
### Diff
```nim
let diff = s.diff(oldSchema, newSchema)
```
## انواع ویژگی
| نوع | توضیح |
|-----|--------|
| `str` | رشته |
| `int32` | عدد صحیح 32 بیتی |
| `int64` | عدد صحیح 64 بیتی |
| `float32` | عدد اعشاری 32 بیتی |
| `float64` | عدد اعشاری 64 بیتی |
| `bool` | بولی |
| `datetime` | تاریخ/زمان |
| `bytes` | داده باینری |
+120
View File
@@ -0,0 +1,120 @@
# راهنمای امنیت
## رمزنگاری TLS/SSL
BaraDB از TLS 1.3 برای تمام پروتکل‌ها (باینری، HTTP، WebSocket) پشتیبانی می‌کند. اگر گواهی ارائه نشود، سرور در هنگام راه‌اندازی یک گواهی خودامضا تولید می‌کند.
### استفاده از گواهی‌های سفارشی
```bash
BARADB_TLS_ENABLED=true \
BARADB_CERT_FILE=/etc/baradb/server.crt \
BARADB_KEY_FILE=/etc/baradb/server.key \
./build/baradadb
```
### تولید گواهی‌های خودامضا
```bash
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt \
-days 365 -nodes -subj "/CN=localhost"
```
### Let's Encrypt (تولید)
از certbot استفاده کنید و BaraDB را به فایل‌های تولیدشده هدایت کنید:
```bash
sudo certbot certonly --standalone -d db.example.com
BARADB_CERT_FILE=/etc/letsencrypt/live/db.example.com/fullchain.pem \
BARADB_KEY_FILE=/etc/letsencrypt/live/db.example.com/privkey.pem \
./build/baradadb
```
## احراز هویت
### احراز هویت مبتنی بر JWT
BaraDB از JWT با امضای HMAC-SHA256 استفاده می‌کند.
#### فعال‌سازی احراز هویت
```bash
BARADB_AUTH_ENABLED=true \
BARADB_JWT_SECRET="$(openssl rand -hex 32)" \
./build/baradadb
```
#### ایجاد توکن‌ها
```nim
import barabadb/protocol/auth
var am = newAuthManager("your-secret-key")
let token = am.createToken(JWTClaims(
sub: "user1",
role: "admin",
exp: getTime() + 24.hours
))
```
#### کنترل دسترسی مبتنی بر نقش
| نقش | مجوزها |
|------|---------|
| `admin` | دسترسی کامل |
| `write` | خواندن + نوشتن |
| `read` | فقط خواندن |
| `monitor` | فقط معیارها و سلامت |
### احراز هویت چندعاملی (MFA)
```nim
import barabadb/protocol/auth
var am = newAuthManager("secret-key")
let mfaCode = am.generateTOTP("user1")
let valid = am.validateTOTP("user1", mfaCode)
```
## محدودیت نرخ
محدودیت نرخ token-bucket از سوءاستفاده جلوگیری می‌کند:
```nim
import barabadb/protocol/ratelimit
var rl = newRateLimiter(
rlaTokenBucket,
globalRate = 10000,
perClientRate = 1000,
burstSize = 100
)
if not rl.allowRequest("client-ip"):
return error("محدودیت نرخ تجاوز شده")
```
## امنیت شبکه
### آدرس اتصال
به‌صورت پیش‌فرض BaraDB به `127.0.0.1` متصل می‌شود. برای تولید:
```bash
BARADB_ADDRESS=0.0.0.0 ./build/baradadb
```
## چک‌لیست امنیتی
- [ ] تغییر رمز JWT پیش‌فرض
- [ ] فعال‌سازی TLS با گواهی‌های معتبر
- [ ] اتصال به رابط‌های خاص
- [ ] فعال‌سازی احراز هویت در تولید
- [ ] پیکربندی محدودیت نرخ
- [ ] فعال‌سازی لاگ حسابرسی
- [ ] رمزنگاری داده در حالت سکون
- [ ] اجرای BaraDB به‌عنوان کاربر غیرroot
- [ ] محدود نگه‌داشتن قوانین فایروال
- [ ] چرخش منظم رمزهای JWT
+78
View File
@@ -0,0 +1,78 @@
# موتورهای ذخیره‌سازی
BaraDB چندین موتور ذخیره‌سازی بهینه‌شده برای الگوهای دسترسی مختلف فراهم می‌کند.
## LSM-Tree (کلید-مقدار)
موتور ذخیره‌سازی اصلی با ساختار log-only اضافه‌شونده بهینه برای نوشتن.
### استفاده
```nim
import barabadb/storage/lsm
var db = newLSMTree("./data")
db.put("key1", cast[seq[byte]]("value1"))
let (found, value) = db.get("key1")
db.close()
```
### اجزا
- **MemTable**: بافر مرتب در حافظه
- **WAL**: log جلوگیری از نوشتن برای دوام
- **SSTable**: جداول رشته‌ای مرتب روی دیسک
- **Bloom Filter**: ساختار احتمالی برای جستجوهای منفی سریع
- **Compaction**: استراتژی size-tiered با مدیریت سطح
- **Page Cache**: کش LRU با ردیابی نرخ hit
## اندیس B-Tree
اندیس مرتب برای اسکن بازه‌ای و جستجوهای نقطه‌ای.
### استفاده
```nim
import barabadb/storage/btree
var btree = newBTreeIndex[string, string]()
btree.insert("key1", "value1")
let values = btree.get("key1")
let range = btree.scan("key_a", "key_z")
```
## Write-Ahead Log (WAL)
دوام عملیات‌های نوشتن را تضمین می‌کند.
```nim
import barabadb/storage/wal
var wal = newWAL("./wal")
wal.append("txn1", "SET key1 value1")
wal.flush()
```
## Bloom Filter
ساختار داده احتمالی برای جستجوهای منفی سریع.
```nim
import barabadb/storage/bloom
var filter = newBloomFilter(10000, 0.01)
filter.add("key1")
if filter.mightContain("key1"):
echo "احتمالاً وجود دارد"
```
## I/O نگاشته‌شده به حافظه
دسترسی کارآمد به فایل با استفاده از mmap.
```nim
import barabadb/storage/mmap
var mapped = mmapFile("./data/file.dat")
let data = mapped.read(0, 100)
```
+67
View File
@@ -0,0 +1,67 @@
# تراکنش‌ها و MVCC
MVCC (کنترل همزمانی چندنسخه‌ای) با جداسازی snapshot و تشخیص بن‌بست.
## استفاده
```nim
import barabadb/core/mvcc
var tm = newTxnManager()
let txn = tm.beginTxn()
# عملیات نوشتن
discard tm.write(txn, "key1", cast[seq[byte]]("value1"))
discard tm.write(txn, "key2", cast[seq[byte]]("value2"))
# Savepoint
tm.savepoint(txn)
discard tm.write(txn, "key3", cast[seq[byte]]("value3"))
discard tm.rollbackToSavepoint(txn)
# Commit
discard tm.commit(txn)
```
## جداسازی تراکنش
BaraDB از **جداسازی snapshot** استفاده می‌کند:
- خوانندگان نویسندگان را مسدود نمی‌کنند
- نویسندگان خوانندگان را مسدود نمی‌کنند
- هر تراکنش یک snapshot سازگار می‌بیند
## تشخیص بن‌بست
```nim
import barabadb/core/deadlock
var detector = newDeadlockDetector()
if detector.detectCycle(txn1, txn2):
echo "بن‌بست تشخیص داده شد!"
```
## WAL
```nim
import barabadb/storage/wal
var wal = newWAL("./wal")
wal.append(txnId, "SET key value")
wal.flush()
```
## Savepoints
```nim
tm.savepoint(txn, "sp1")
tm.rollbackToSavepoint(txn, "sp1")
```
## تأیید رسمی
پروتکل MVCC در TLA+ مشخص شده:
```bash
cd formal-verification
java -cp tla2tools.jar tlc2.TLC -config models/mvcc.cfg mvcc.tla
```
+87
View File
@@ -0,0 +1,87 @@
# عیب‌یابی
## مشکلات نصب
### Nim یافت نشد
```bash
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
```
### خطای کامپایل SSL
```bash
nim c -d:ssl -d:release -o:build/baradadb src/baradadb.nim
```
### وابستگی‌های گم‌شده
```bash
nimble install -d -y
```
## مشکلات زمان اجرا
### پورت در حال استفاده
```bash
BARADB_PORT=5433 ./build/baradadb
```
### Permission denied
```bash
mkdir -p ./data
chmod 755 ./data
```
### کمبود حافظه
```bash
BARADB_MEMTABLE_SIZE_MB=32 \
BARADB_CACHE_SIZE_MB=128 \
./build/baradadb
```
## مشکلات کوئری
### خطای نحوی
```sql
SELECT name, age FROM users WHERE age > 18;
```
### جدول یافت نشد
```sql
CREATE TYPE User { name: str, age: int32 };
```
### عدم تطابق نوع
```sql
SELECT * FROM users WHERE age > 18;
```
## مشکلات اتصال
### Connection refused
```bash
./build/baradadb
sudo ufw allow 9472
```
## مشکلات عملکرد
### کوئری‌های کند
1. ایجاد اندیس: `CREATE INDEX idx_users_name ON users(name);`
2. استفاده از LIMIT
3. افزایش کش: `BARADB_CACHE_SIZE_MB=1024`
## حالت اشکال‌زدایی
```bash
BARADB_LOG_LEVEL=debug ./build/baradadb
```
+46
View File
@@ -0,0 +1,46 @@
# توابع تعریف‌شده کاربر
گسترش BaraQL با توابع سفارشی.
## استفاده
```nim
import barabadb/query/udf
var reg = newUDFRegistry()
reg.registerStdlib()
reg.register("greet", @[UDFParam(name: "name", typeName: "str")],
"str", proc(args: seq[Value]): Value =
return Value(kind: vkString, strVal: "Hello, " & args[0].strVal & "!"))
```
## توابع استاندارد
| تابع | توضیح | مثال |
|------|--------|------|
| `abs(n)` | قدر مطلق | `abs(-5)` → 5 |
| `sqrt(n)` | ریشه دوم | `sqrt(16)` → 4 |
| `pow(n, e)` | توان | `pow(2, 3)` → 8 |
| `lower(s)` | حروف کوچک | `lower('ABC')` → 'abc' |
| `upper(s)` | حروف بزرگ | `upper('abc')` → 'ABC' |
| `len(s)` | طول | `len('hello')` → 5 |
## ثبت تابع
```nim
reg.register(
name: "my_function",
params: @[UDFParam(name: "arg1", typeName: "str")],
returnType: "str",
body: proc(args: seq[Value]): Value =
result = Value(kind: vkString, strVal: "")
)
```
## استفاده در کوئری
```sql
SELECT greet(name) FROM users;
```
+57
View File
@@ -0,0 +1,57 @@
# موتور جستجوی برداری
اندیس‌های HNSW و IVF-PQ برای جستجوی شباهت.
## استفاده
```nim
import barabadb/vector/engine
var idx = newHNSWIndex(dimensions = 128)
idx.insert(1, @[1.0'f32, 0.0'f32, ...], {"category": "A"}.toTable)
let results = idx.search(queryVector, k = 10)
```
## انواع اندیس
### HNSW
گراف Navigable Small World سلسله‌مراتبی.
```nim
var hnsw = newHNSWIndex(
dimensions = 128,
m = 16,
efConstruction = 200,
efSearch = 100
)
```
### IVF-PQ
اندیس فایل معکوس با تکمیم محصول.
```nim
var ivfpq = newIVFPQIndex(
dimensions = 128,
numCentroids = 256,
subQuantizers = 8
)
```
## معیارهای فاصله
| معیار | توضیح |
|-------|--------|
| `cosine` | شباهت کسینوسی |
| `euclidean` | فاصله L2 |
| `dotproduct` | ضرب نقطه‌ای |
| `manhattan` | فاصله L1 |
## کوانتیزاسیون
```nim
let scalar = scalarQuantize(data, bits = 8)
let pq = productQuantize(data, subVectors = 8, bits = 8)
```