Skip to content

NyaruDB2 is a lightweight, high-performance embedded database for iOS apps, designed to handle large datasets efficiently with modern Swift concurrency features. It supports advanced data management capabilities including compression, sharding, indexing.

License

Notifications You must be signed in to change notification settings

galileostudio/nyarudb2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo NyaruDB2

Lightweight, high-performance embedded database for Swift

SwiftPMLicense

NyaruDB2 is an embedded database optimized for iOS and macOS applications, designed to handle large datasets efficiently using modern Swift Concurrency. It provides:

  • Automatic Sharding with parallel I/O
  • Multi-Algorithm Compression (GZIP, LZFSE, LZ4)
  • Actor-Safe B-Tree Indexing
  • Cost-Based Query Planner with shard pruning
  • Lazy Loading via AsyncThrowingStream

🔖 Table of Contents

  1. Installation
  2. Quick Start Example
  3. Key Features
  4. Architecture
  5. Documentation
  6. Contributing
  7. License
  8. Acknowledgements

📦 Installation

NyaruDB2 supports Swift Package Manager:

// swift-tools-version:5.9

let package = Package(
    name: "YourApp",
    dependencies: [
        .package(url: "https://github.com/galileostudio/NyaruDB2.git", from: "0.1.0-alpha")
    ],
    targets: [
        .target(
            name: "YourApp",
            dependencies: ["NyaruDB2"]
        )
    ]
)

Requirements:

  • Xcode 15+
  • Swift 5.9+
  • iOS 15+ / macOS 12+

🚀 Quick Start Example

import NyaruDB2

// Define a model
struct User: Codable, Equatable {
    let id: Int
    let name: String
    let createdAt: String
}

// 1. Initialize the database
let db = try NyaruDB2(
    path: "NyaruDB_Demo",
    compressionMethod: .lzfse,
    fileProtectionType: .completeUntilFirstUserAuthentication
)

// 2. Create a partitioned collection
let users = try await db.createCollection(
    name: "Users",
    indexes: ["id"],
    partitionKey: "createdAt"
)

// 3. Bulk insert documents
try await users.bulkInsert([
    User(id: 1, name: "Alice", createdAt: "2024-01"),
    User(id: 2, name: "Bob", createdAt: "2024-02")
])

// 4. Perform a query
var query = try await users.query() as Query<User>
query.where(\User.id, .greaterThan(1))
let results = try await query.execute()
print(results)

✨ Key Features

Performance

  • Sharded Storage: automatic partitioning by configurable shard keys
  • Multi-Algorithm Compression: GZIP, LZFSE, LZ4 via Compression.framework
  • Actor-Safe B-Tree Indexing: configurable minimum degree for performance tuning

Advanced Queries

  • Type-Safe Query Builder: supports 15+ predicates (equal, range, contains, startsWith, etc.)
  • Lazy Loading: AsyncThrowingStream for memory-efficient iterating
  • Cost-Based Query Planner: selects optimal indexes and prunes shards using statistics

Monitoring & Stats

  • StatsEngine: CollectionStats, GlobalStats with shard count, document count, and sizes
  • IndexStats: tracks value distribution, selectivity, access counts

🏗️ Architecture

NyaruDB2/
├── Sources/
│   ├── NyaruDB2/
│   │   ├── Core/
│   │   │   ├── Commons/          # FileProtection, DynamicDecoder
│   │   │   ├── IndexManager/     # BTreeIndex, IndexManager
│   │   │   ├── QueryEngine/      # Query, QueryPlanner, ExecutionPlan
│   │   │   ├── StatsEngine/      # CollectionStats, GlobalStats
│   │   │   └── StorageEngine/    # ShardManager, Compression, StorageEngine
│   │   ├── CollectionEngine/     # DocumentCollection, CollectionCatalog
│   │   └── NyaruDB2.swift        # public API
│   └── Benchmark/                # performance test suite
└── Tests/                        # unit and integration tests

📚 Documentation

Full API reference:
🔗 https://nyarudb2.docs.example.com


🤝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/awesome
  3. Commit your changes: git commit -m "Add awesome feature"
  4. Push to your branch: git push origin feature/awesome
  5. Open a Pull Request

Please see CONTRIBUTING.md for details.


📜 License

Apache 2.0 © 2025 galileostudio. See LICENSE.


🙏 Acknowledgements

Inspired by the original NyaruDB by kelp404. Many thanks for the foundational ideas.

About

NyaruDB2 is a lightweight, high-performance embedded database for iOS apps, designed to handle large datasets efficiently with modern Swift concurrency features. It supports advanced data management capabilities including compression, sharding, indexing.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages