WooriDB

WooriDB is a general-purpose, experimental time series database that indexes all entities' registries by DateTime. It is schemaless, key-value storage that uses its own query syntax, which is similar to SparQL and Crux's Datalog.

Key Features

Experimental Time Series Database

  • Indexed by DateTime: All entity registries are indexed by DateTime, making it highly suitable for time series data.
  • Schemaless and Key-Value Storage: Allows for flexible data modeling without the constraints of predefined schemas.

Unique Query Syntax

  • Custom Query Language: Uses a query syntax similar to SparQL and Crux's Datalog, providing powerful querying capabilities.
  • RON and JSON Support: By default, responses are in RON format, with optional JSON support via features.

Advanced Features

  • Hashing and Encryption: Supports hashing keys with the ENCRYPT keyword and checking hashed values with the CHECK keyword.
  • Entity Indexing: Entities are indexed by entity_name (Entity Tree), DateTime (Time Serial), and Uuid (Entity ID), allowing efficient data retrieval.
  • Large Number Handling: Can handle very large numbers using the P suffix, providing precise float representations.
  • Persistent Local Storage: Stores data persistently on local storage, with future plans for S3, Postgres, and DynamoDB support.

Security and Configuration

  • Authentication and Authorization: Uses session tokens for secure access control.
  • Environment Variable Configuration: Allows configuration via environment variables for flexibility and ease of deployment.

Community and Culture

The name Woori means "our" in Korean, reflecting the collaborative and community-driven nature of the project. Although initially developed by a single individual, the database is designed to be a collective effort, benefiting and supported by the community.

Inspirations

WooriDB is inspired by several notable projects and concepts:

Performance Benchmarks

Current Benchmarks

Tested on 2.3 GHz Intel Core i9 8-Core, 32 GB 2667 MHz DDR4

  • Entity Operations:
    • Create entity: 4.7 ms
    • Insert entity: 12.9 ms
    • Update set entity: 15.1 ms
    • Update content entity: 15.1 ms
    • Delete entity: 5.4 ms
    • Evict entity ID: 15.6 ms
    • Evict entity: 12.4 ms
  • Query Operations:
    • Select all (20 entities): 6.5 ms
    • Select all (10 entities): 6.0 ms
    • Select all (1 entity): 5.1 ms
    • History (10 registries): 5.5 ms
    • History (20 registries): 6.1 ms

WQL Performance

  • Create entity: 435 ns
  • Insert entity: 1.64 µs
  • Select all: 431 ns
  • Select with arguments: 657 ns

File Size

For approximately 10,000 entries per day, the file size is estimated to be 2.5 GB, which can be compressed to about 10% of this size.

Load Testing with Artillery.io

  • Insert:
    • Configured to handle 10 requests per second over 100 seconds.
  • Select:
    • Tested with 1,000 registries to measure response times.

Similar Projects

Rustfinity.com

Links

  1. Home
  2. Learn Rust
  3. Get Started
  4. Practice Rust
  5. Challenges
  6. Tutorials
  7. Blog
  8. Open source
  9. Learn Gleam

Socials

  1. GitHub
  2. X

Legal

  1. Privacy Policy
  2. Terms of Service