1. Giriş ve Mimari

AxarDB, ASP.NET Core üzerinde geliştirilen ultra yüksek hızlı, in-memory NoSQL veritabanı motorudur. AxarDB Cloud, bu motoru izole container instanceları olarak global uç nokta ağı üzerinde anında ayağa kaldırır ve her veritabanına özel *.axardb.com SSL alt alan adı tahsis eder.

Gelen tüm sorgular, sunucu tarafında gömülü JavaScript motoru (Jint) tarafından doğrudan C# bellek nesneleri üzerinde işlenir. Bu sayede SQL parse maliyeti ve ORM yükü olmadan mikrosaniye seviyesinde yanıt süreleri elde edilir.

Resmi Açık Kaynak Deposu:

AxarDB motorunun orijinal kaynak kodlarını GitHub üzerinden inceleyebilir ve yıldızlayabilirsiniz.

GitHub (AxarDB) ↗

2. Görsel Kullanım Rehberi

AxarDB Cloud yönetim konsolu, veritabanı instance'larınızı kurmanızı, sorgulamanızı ve API erişimlerini yönetmenizi sağlar.

Adım 1: Yeni Veritabanı Instance'ı Oluşturma

Dashboard üzerindeki + Yeni Veritabanı Oluştur butonuna tıklayarak veritabanı adınızı ve arzu ettiğiniz {ad}.axardb.com subdomainini belirleyin:

Veritabanı Oluşturma Modalı
📷 Görsel 1: Otomatik DNS, SSL ve izole container tahsisi sağlayan veritabanı kurulum modalı.

Adım 2: Yönetim Konsolu & Anlık Durum İzleme

Dashboard ana sayfasında tüm aktif veritabanlarınız, tahsis edilen depolama alanları ve container durumları (Aktif, Uyuyor, Arşivlendi) listelenir:

Yönetim Konsolu
📷 Görsel 2: Canlı metrikler, subdomain yönlendirmeleri ve yönetim butonları.

Adım 3: Tarayıcı İçi Canlı JavaScript Sorgu Editörü

Veritabanı detay sayfasına girerek sunucu tarafında derlenen JavaScript sorgularınızı anında çalıştırabilir ve yanıtları canlı görüntüleyebilirsiniz:

Canlı JavaScript Editörü
📷 Görsel 3: Hızlı şablon butonları (+ Insert, Findall, Count, SaveView) ve canlı sorgu editörü.

Adım 4: REST API Anahtarları Oluşturma

Uygulamalarınızdan HTTP istekleri gönderebilmek için "🔑 API Anahtarları" sekmesinden yeni anahtarlar türetebilirsiniz:

API Anahtarları Yönetimi
📷 Görsel 4: Bearer token tabanlı güvenli API anahtarı yönetim tablosu.

3. Kimlik Doğrulama

Veritabanınıza gönderilen tüm HTTP isteklerinde, konsoldan oluşturduğunuz API anahtarını Authorization başlığında Bearer formatında iletmelisiniz:

HTTP Header
Authorization: Bearer axdb_5a8b7c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b

4. Sorgu Çalıştırma (POST /query)

JavaScript sorgu betiğinizi doğrudan HTTP POST isteğinin gövdesinde (text/plain) iletin. İstemciye sonuç döndürmek için standart JavaScript return ifadesini kullanın.

cURL İstek Örneği:

Bash / cURL
curl --location --request POST "https://eticaret.axardb.com/query" \
  --header "Authorization: Bearer axdb_YOUR_API_KEY" \
  --header "Content-Type: text/plain; charset=utf-8" \
  --data-raw '
return db.users
  .findall(u => {
    return u.active == true;
  })
  .take(2);
'

Dönen JSON Yanıtı (Pretty & Highlighted):

JSON Response
{
  "success": true,
  "result": [
    {
      "_id": "01918a23-4c5b-7b0c-9d0e-1f2a3b4c5d6e",
      "name": "Ahmet Yılmaz",
      "role": "developer",
      "active": true,
      "createdAt": "2026-09-05T12:00:00.000Z"
    },
    {
      "_id": "01918a24-8b1a-7c2d-9e0f-2a3b4c5d6e7f",
      "name": "Zeynep Kaya",
      "role": "admin",
      "active": true,
      "createdAt": "2026-09-05T12:05:00.000Z"
    }
  ],
  "executionTimeMs": 0.08
}

5. CRUD Veri İşlemleri

A. Kayıt Ekleme (Insert)

Koleksiyonlar ilk yazma anında şema gerektirmeden otomatik oluşur. Benzersiz _id UUID v7 atanır:

JavaScript (Insert)
// Koleksiyona yeni bir doküman ekleme:
db.users.insert({
  name: "Mehmet Demir",
  email: "mehmet@ornek.com",
  age: 29,
  isActive: true,
  roles: [
    "developer",
    "cloud-architect"
  ],
  metadata: {
    registeredAt: new Date(),
    city: "İstanbul"
  }
});

B. Veri Okuma ve Filtreleme (Find / Findall)

Tek bir eşleşme için find(), koşula uyan tüm kayıtlar için findall() kullanılır:

JavaScript (Find & Findall)
// 1. E-posta adresine göre ilk eşleşen kaydı bul:
var user = db.users.find(u => {
  return u.email == "mehmet@ornek.com";
});

// 2. Koşula uyan tüm kayıtları filtrele ve listele:
return db.users
  .findall(u => {
    return u.age >= 18 && u.isActive == true;
  });

C. Güncelleme (Update)

Filtrelenen kayıtlar üzerinde tek seferde toplu güncelleme uygulayın:

JavaScript (Update)
// 18 yaş altındaki kullanıcıların statüsünü güncelle:
db.users
  .findall(u => {
    return u.age < 18;
  })
  .update({
    isMinor: true,
    category: "junior",
    updatedAt: new Date()
  });

D. Silme (Delete)

Koşula uyan kayıtları bellekten ve kalıcı depolamadan güvenle silin:

JavaScript (Delete)
// İnaktif ve hesabı askıya alınmış kullanıcıları temizle:
db.users
  .findall(u => {
    return u.isActive == false;
  })
  .delete();

6. ResultSet Zincir Fonksiyonları

findall() çağrısı sonrasında LINQ benzeri yüksek performanslı fonksiyonlar zincirlenebilir:

JavaScript (Chaining & Projections)
// Filtrele, sırala, sayfala ve istenen alanları dönüştür:
return db.products
  .findall(p => {
    return p.price > 100;
  })
  .orderByDesc(p => {
    return p.price;
  })
  .skip(10)
  .take(5)
  .select(p => {
    return {
      title: p.name,
      cost: p.price,
      inStock: p.stock > 0
    };
  });

7. Stored Views (Görünümler)

Tekrar eden sorgularınızı sunucu tarafında bir Görünüm (View) olarak saklayabilir ve parametreli olarak doğrudan HTTP GET ile tetikleyebilirsiniz:

JavaScript & HTTP GET
// 1. Görünümü sunucu tarafında kaydet:
db.saveView(
  "getUsersByRole",
  `
    // @access public
    var role = @role;

    return db.users
      .findall(u => {
        return u.role == role;
      });
  `
);

// 2. HTTP GET ile çağırma:
// curl --location "https://eticaret.axardb.com/views/getUsersByRole?role=developer"

8. Kodlama Örnekleri

A. Modern JavaScript / TypeScript (Fetch API)

JavaScript / TypeScript
// 1. Sorgu betiğini hazırla
const queryScript = `
  db.logs.insert({
    level: "info",
    message: "Kullanıcı oturum açtı",
    timestamp: new Date()
  });

  return db.logs
    .findall()
    .count();
`;

// 2. HTTP POST isteğini gönder
const response = await fetch(
  "https://eticaret.axardb.com/query",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer axdb_YOUR_KEY",
      "Content-Type": "text/plain; charset=utf-8"
    },
    body: queryScript
  }
);

const payload = await response.json();

console.log("Toplam Log Kaydı:", payload.result);

B. Python 3 (Requests)

Python 3
import json
import requests

url = "https://eticaret.axardb.com/query"

headers = {
    "Authorization": "Bearer axdb_YOUR_KEY",
    "Content-Type": "text/plain; charset=utf-8"
}

query = """
return db.users
    .findall(u => {
        return u.age > 20;
    })
    .take(5);
"""

response = requests.post(
    url=url,
    headers=headers,
    data=query.strip()
)

data = response.json()

print(
    json.dumps(
        data,
        indent=2,
        ensure_ascii=False
    )
)

C. C# / .NET 8 (HttpClient)

C# / .NET 8
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

using var client = new HttpClient();

var query = @"
return db.users
    .findall(u => u.active == true)
    .take(5);
";

using var request = new HttpRequestMessage(
    HttpMethod.Post,
    "https://eticaret.axardb.com/query"
);

request.Headers.Authorization = new AuthenticationHeaderValue(
    "Bearer",
    "axdb_YOUR_KEY"
);

request.Content = new StringContent(
    query.Trim(),
    Encoding.UTF8,
    "text/plain"
);

var response = await client.SendAsync(request);
var jsonResult = await response.Content.ReadAsStringAsync();

Console.WriteLine(jsonResult);

9. Veritabanı Aktarımı & Ön Katman Hızlandırma (PostgreSQL, MySQL, MongoDB)

AxarDB, sadece bağımsız bir NoSQL veritabanı olarak değil; PostgreSQL, MySQL ve MongoDB gibi geleneksel veritabanlarının önünde çalışan ultra yüksek hızlı bellek içi (In-Memory) ön katman ve hızlandırıcı olarak da çalışabilir.

Disk tabanlı ilişkisel ya da belge veritabanları yüksek eşzamanlılıkta (concurrency) disk I/O, bağlantı havuzu (connection pool) ve kilit (lock) darboğazları yaşar. AxarDB, sıcak (hot) veri kümelerini ve sık okunan sorguları %100 RAM üzerinde tutarak okuma gecikmesini 0.5ms – 2ms seviyesine indirir ve ana veritabanı üzerindeki okuma yükünün %90'ından fazlasını üzerine alır.

Ölçüt Doğrudan Ana Veritabanı (Postgres / MySQL / Mongo) AxarDB Ön Katman Hızlandırması
Ortalama Yanıt Süresi (p50) 25ms – 80ms (Disk arama, AST derleme, lock) 0.5ms – 1.8ms (100% RAM, saf JS motoru)
Eşzamanlı İstek Kapasitesi Bağlantı havuzu (max_connections) ile sınırlı 10.000+ anlık istek (Edge container ölçeği)
Disk IOPS Tüketimi Tüm okuma istekleri disk ve tampon havuzuna yük bindirir 0 IOPS (Tüm okuma trafiği RAM'den karşılanır)
İstemci Güvenliği İstemciye parola/string verilmez, ara sunucu gerekir Public View ile sıfır kimlik bilgisiyle güvenli GET

Senaryo 1: PostgreSQL — E-Ticaret Ürün Kataloğu Hızlandırma

200.000 ürün içeren bir e-ticaret sisteminde kategori filtreleme ve etiket aramaları çok sayıda SQL JOIN içerir. Kampanya zamanlarında veritabanı kilitlenmelerini önlemek için veriler AxarDB'ye aktarılır:

Node.js / TypeScript — PostgreSQL Veri Aktarımı & AxarDB Ön Katman
import { Client } from 'pg';

// 1. PostgreSQL'den ilişkisel JOIN ile verileri çek
const pg = new Client({ connectionString: process.env.DATABASE_URL });
await pg.connect();
const res = await pg.query(`
  SELECT p.id, p.name, p.price, p.stock, c.name as category
  FROM products p
  LEFT JOIN categories c ON p.category_id = c.id
  WHERE p.is_active = true
`);

// 2. AxarDB bellek içi veritabanına toplu aktar (Upsert)
await fetch('https://eticaret-katalog.axardb.com/query', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer axdb_YOUR_KEY',
    'Content-Type': 'text/plain; charset=utf-8'
  },
  body: `
    var items = ${JSON.stringify(res.rows)};
    items.forEach(function(item) {
      var exist = db.products.find(p => p.id == item.id);
      if (exist) Object.assign(exist, item);
      else db.products.insert(item);
    });
    return { aktarilan: items.length };
  `
});

Senaryo 2: MySQL — Canlı Skor Tablosu & Oturum Yönetimi

Oyun veya sosyal ağlarda her saniye binlerce skor güncellenir. MySQL üzerinde sürekli ORDER BY score DESC LIMIT 100 çalıştırmak yerine, AxarDB RAM üzerinde canlı sıralama yapar ve Public View ile istemcilere doğrudan açılır:

JavaScript — AxarDB Canlı Liderlik Görünümü Tanımlama
// Sunucu tarafında 1 defa kaydedilir:
db.saveView("topOyuncular", `
  // @access public
  return db.leaderboard
    .findall()
    .sort((a, b) => b.score - a.score)
    .take(50)
    .select((p, i) => ({ sira: i + 1, ad: p.username, puan: p.score }));
`);

// Mobil veya web istemcisi hiçbir API anahtarı olmadan anında çeker:
// GET https://oyun-skor.axardb.com/views/topOyuncular

Senaryo 3: MongoDB — IoT Telemetri & Belge Akışı Ön Belleği

Milyonlarca sensör verisi MongoDB Atlas kümesine akar. Mobil uygulamaların doğrudan MongoDB'ye sorgu atması pahalı ve güvenlik riski barındırır. Son cihaz durumları AxarDB bellek katmanına senkronize edilerek cihaz başına milisaniyelik durum sorgulamaları sağlanır:

Terminal Tek Satır Pipeline — MongoDB'den AxarDB'ye Aktarım
mongoexport --uri="mongodb://localhost:27017/iot" --collection=devices --jsonArray --limit=2000 | \
python3 -c '
import sys, json, requests
docs = json.load(sys.stdin)
js = f"var items = {json.dumps(docs)}; items.forEach(d => db.devices.insert(d)); return items.length;"
res = requests.post("https://iot-fleet.axardb.com/query", 
  headers={"Authorization": "Bearer axdb_YOUR_KEY", "Content-Type": "text/plain"}, 
  data=js.encode("utf-8"))
print("AxarDB aktarım sonucu:", res.json())
'

Tüm detaylar, SDK kodları ve mimari şemalar için llms.txt ve llms-full.txt dosyalarını inceleyebilirsiniz.