Convert Figma logo to code with AI

kurrent-io logoKurrentDB

EventStoreDB, the event-native database. Designed for Event Sourcing, Event-Driven, and Microservices architectures

5,509
660
5,509
136

Top Related Projects

6,497

Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability

27,075

The MongoDB Database

68,863

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.

30,793

CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.

Free and Open Source, Distributed, RESTful Search Engine

29,932

Scalable datastore for metrics, events, and real-time analytics

Quick Overview

KurrentDB is an open-source, distributed, and scalable database system designed for high-performance data storage and retrieval. It aims to provide a robust solution for handling large-scale data operations with a focus on consistency and fault tolerance.

Pros

  • Highly scalable architecture suitable for large-scale data operations
  • Strong consistency model ensuring data integrity across distributed nodes
  • Built-in support for complex queries and data analytics
  • Active community development and regular updates

Cons

  • Steep learning curve for newcomers to distributed database systems
  • Limited documentation for advanced features and configurations
  • Resource-intensive for small-scale applications or projects
  • Requires careful tuning and configuration for optimal performance

Code Examples

# Connecting to KurrentDB
from kurrentdb import KurrentClient

client = KurrentClient("localhost", 8080)
connection = client.connect()
# Inserting data into KurrentDB
data = {"id": 1, "name": "John Doe", "age": 30}
result = connection.insert("users", data)
print(f"Insert successful: {result}")
# Querying data from KurrentDB
query = {"age": {"$gt": 25}}
results = connection.find("users", query)
for user in results:
    print(user)
# Performing a transaction in KurrentDB
with connection.transaction() as txn:
    txn.update("users", {"id": 1}, {"$set": {"age": 31}})
    txn.delete("users", {"id": 2})
    txn.commit()

Getting Started

To get started with KurrentDB, follow these steps:

  1. Install KurrentDB using pip:

    pip install kurrentdb
    
  2. Start the KurrentDB server:

    kurrentdb-server --config /path/to/config.yaml
    
  3. Connect to KurrentDB in your Python application:

    from kurrentdb import KurrentClient
    
    client = KurrentClient("localhost", 8080)
    connection = client.connect()
    
    # Perform database operations
    result = connection.insert("collection_name", {"key": "value"})
    
  4. Refer to the official documentation for more advanced usage and configuration options.

Competitor Comparisons

6,497

Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability

Pros of CouchDB

  • Mature and battle-tested database with a large community and extensive documentation
  • Built-in support for multi-master replication and offline-first applications
  • RESTful HTTP API for easy integration with various programming languages and platforms

Cons of CouchDB

  • Steeper learning curve due to its unique document-based model and MapReduce views
  • Limited support for complex queries and joins compared to traditional relational databases
  • Potential performance issues with large datasets and complex view calculations

Code Comparison

CouchDB (JavaScript view function):

function(doc) {
  if (doc.type === 'user') {
    emit(doc._id, { name: doc.name, email: doc.email });
  }
}

KurrentDB (SQL-like query):

SELECT id, name, email FROM users;

Summary

CouchDB is a mature, document-oriented database with strong replication features, while KurrentDB appears to be a newer project focusing on SQL-like syntax and potentially different use cases. CouchDB's document model and MapReduce views offer flexibility but may require more specialized knowledge, whereas KurrentDB's SQL-like approach might be more familiar to developers with traditional database experience. The choice between the two would depend on specific project requirements, scalability needs, and the development team's expertise.

27,075

The MongoDB Database

Pros of MongoDB

  • Mature and widely adopted NoSQL database with extensive documentation and community support
  • Flexible schema design allowing for easy adaptation to changing data structures
  • Powerful query language and indexing capabilities for efficient data retrieval

Cons of MongoDB

  • Higher resource consumption, especially for large datasets
  • Lack of built-in support for ACID transactions across multiple documents
  • Steeper learning curve for developers transitioning from traditional relational databases

Code Comparison

MongoDB query example:

db.collection('users').find({ age: { $gt: 18 } }).sort({ name: 1 }).limit(10)

KurrentDB query example:

SELECT * FROM users WHERE age > 18 ORDER BY name LIMIT 10

Key Differences

  • MongoDB uses a document-based data model, while KurrentDB appears to use a more traditional SQL-like syntax
  • MongoDB offers more flexibility in data structure, whereas KurrentDB likely provides stronger consistency guarantees
  • KurrentDB seems to focus on real-time data processing, which may not be a primary feature of MongoDB

Conclusion

MongoDB is a well-established NoSQL database with a large ecosystem, suitable for applications requiring flexible schemas and horizontal scalability. KurrentDB, being a newer project, may offer advantages in real-time data processing and potentially easier adoption for developers familiar with SQL. The choice between the two would depend on specific project requirements and the development team's expertise.

68,863

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.

Pros of Redis

  • Mature and battle-tested in-memory database with extensive documentation
  • Large ecosystem with numerous client libraries and tools
  • Supports complex data structures like lists, sets, and sorted sets

Cons of Redis

  • Limited persistence options compared to KurrentDB
  • Lacks built-in support for distributed transactions
  • Memory usage can be high for large datasets

Code Comparison

Redis:

SET key value
GET key
INCR counter
LPUSH mylist item
SADD myset element

KurrentDB:

INSERT INTO mytable (key, value) VALUES ('key', 'value');
SELECT value FROM mytable WHERE key = 'key';
UPDATE mytable SET counter = counter + 1 WHERE key = 'counter';
INSERT INTO mylist (item) VALUES ('item');
INSERT INTO myset (element) VALUES ('element');

Redis uses a custom command syntax, while KurrentDB appears to use SQL-like syntax for operations. Redis commands are generally shorter and more concise, but KurrentDB's SQL-like syntax may be more familiar to developers with relational database experience.

Both databases support basic key-value operations, but their approach to more complex data structures differs. Redis has built-in support for various data types, while KurrentDB seems to rely on traditional table structures for similar functionality.

30,793

CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.

Pros of CockroachDB

  • Mature, battle-tested distributed SQL database with a large community and extensive documentation
  • Offers strong consistency and high availability with automatic sharding and replication
  • Supports advanced features like geo-partitioning and multi-region deployments

Cons of CockroachDB

  • More complex setup and configuration compared to KurrentDB's simpler approach
  • Higher resource requirements and potential overhead for smaller-scale applications
  • Steeper learning curve for developers new to distributed systems

Code Comparison

KurrentDB (JavaScript):

const db = new KurrentDB();
await db.connect('mongodb://localhost:27017');
const result = await db.collection('users').find({ age: { $gt: 18 } });

CockroachDB (SQL):

CREATE TABLE users (id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name STRING, age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25);
SELECT * FROM users WHERE age > 18;

KurrentDB focuses on a MongoDB-like API with JavaScript integration, while CockroachDB uses standard SQL syntax. CockroachDB's approach may be more familiar to developers with traditional SQL database experience, but KurrentDB's API could be more intuitive for JavaScript developers working with document-based data models.

Free and Open Source, Distributed, RESTful Search Engine

Pros of Elasticsearch

  • Mature and widely adopted full-text search engine with extensive documentation and community support
  • Highly scalable and distributed architecture, capable of handling large-scale data and high query loads
  • Rich ecosystem of plugins, integrations, and tools for various use cases

Cons of Elasticsearch

  • Resource-intensive, requiring significant memory and CPU for optimal performance
  • Complex setup and configuration process, especially for advanced features
  • Steep learning curve for optimizing queries and managing large clusters

Code Comparison

Elasticsearch query example:

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "search keywords"
    }
  }
}

KurrentDB query example (hypothetical, as no public code is available):

SELECT * FROM my_table
WHERE MATCH(title) AGAINST('search keywords');

Note: The KurrentDB code example is speculative, as there is no publicly available code or documentation for the project. The comparison is based on limited information and may not accurately represent KurrentDB's actual query syntax or capabilities.

29,932

Scalable datastore for metrics, events, and real-time analytics

Pros of InfluxDB

  • Mature and widely adopted time-series database with extensive documentation and community support
  • Offers built-in data retention policies and continuous queries for efficient data management
  • Provides a powerful query language (InfluxQL) optimized for time-series data analysis

Cons of InfluxDB

  • Can be resource-intensive for large-scale deployments, requiring significant hardware resources
  • Limited support for complex joins and multi-table queries compared to traditional relational databases
  • Steep learning curve for users new to time-series databases and InfluxQL

Code Comparison

InfluxDB query example:

SELECT mean("value") FROM "cpu_usage"
WHERE "host" = 'server01' AND time >= now() - 1h
GROUP BY time(5m)

KurrentDB query example:

SELECT AVG(value) FROM cpu_usage
WHERE host = 'server01' AND timestamp >= NOW() - INTERVAL 1 HOUR
GROUP BY TIMESTAMP(5 MINUTE)

Both databases use SQL-like syntax for querying time-series data, but InfluxDB's InfluxQL has some unique features tailored for time-series analysis. KurrentDB appears to use a more standard SQL syntax, which may be more familiar to users with traditional database experience.

InfluxDB is a well-established solution for time-series data, offering robust features and scalability. KurrentDB, being a newer project, may offer a different approach to time-series data management, potentially with its own unique advantages. However, without more detailed information about KurrentDB, a comprehensive comparison is challenging.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Kurrent

What is Kurrent

Event Store – the company and the product – are rebranding as Kurrent.

  • The flagship product will be referred to as “the Kurrent event-native data platform” or “the Kurrent platform” or simply “Kurrent"
  • EventStoreDB will be referred to as KurrentDB
  • Event Store Cloud will now be called Kurrent Cloud

Read more about the rebrand in the rebrand FAQ.

What is KurrentDB

KurrentDB is a database that's engineered for modern software applications and event-driven architectures. Its event-native design simplifies data modeling and preserves data integrity while the integrated streaming engine solves distributed messaging challenges and ensures data consistency.

Download the latest version. For more product information visit the website.

What is Kurrent Cloud?

Kurrent Cloud is a fully managed cloud offering that's designed to make it easy for developers to build and run highly available and secure applications that incorporate KurrentDB without having to worry about managing the underlying infrastructure. You can provision KurrentDB clusters in AWS, Azure, and GCP, and connect these services securely to your own cloud resources.

For more details visit the website.

Licensing

View KurrentDB's licensing information.

Docs

For guidance on installation, development, deployment, and administration, see the User Documentation.

Getting started with KurrentDB

Follow the getting started guide.

Getting started with Kurrent Cloud

Kurrent can manage KurrentDB for you, so you don't have to run your own clusters. See the online documentation: Getting started with Kurrent Cloud.

Client libraries

This guide shows you how to get started with KurrentDB by setting up an instance or cluster and configuring it. KurrentDB supports the gRPC protocol.

KurrentDB supported clients

Community supported clients

Read more in the documentation.

Legacy clients (support ends with EventStoreDB v23.10 LTS)

Deployment

Communities

Join our global community of developers.

Contributing

Development is done on the master branch. We attempt to do our best to ensure that the history remains clean and to do so, commits are automatically squashed into a single logical commit when pull requests are merged.

If you want to switch to a particular release, you can check out the release branch for that particular release. For example: git checkout release/v25.0

Building KurrentDB

KurrentDB is written in a mixture of C# and JavaScript. It can run on Windows, Linux and macOS (using Docker) using the .NET Core runtime.

Prerequisites

Once you've installed the prerequisites for your system, you can launch a Release build of KurrentDB as follows:

dotnet build -c Release src

The build scripts: build.sh and build.ps1 are also available for Linux and Windows respectively to simplify the build process.

To start a single node, you can then run:

dotnet ./src/KurrentDB/bin/Release/net8.0/KurrentDB.dll --dev --db ./tmp/data --index ./tmp/index --log ./tmp/log

Running the tests

You can launch the tests as follows:

dotnet test src/KurrentDB.sln

Build KurrentDB Docker image

You can also build a Docker image by running the command:

docker build --tag mykurrentdb . \
--build-arg CONTAINER_RUNTIME={container-runtime}
--build-arg RUNTIME={runtime}

For instance:

docker build --tag mykurrentdb . \
--build-arg CONTAINER_RUNTIME=bookworm-slim \
--build-arg RUNTIME=linux-x64

Note: Because of the Docker issue, if you're building a Docker image on Windows, you may need to set the DOCKER_BUILDKIT=0 environment variable. For instance, running in PowerShell:

$env:DOCKER_BUILDKIT=0; docker build --tag mykurrentdb . `
--build-arg CONTAINER_RUNTIME=bookworm-slim `
--build-arg RUNTIME=linux-x64

Currently, we support the following configurations:

  1. Bookworm slim:
  • CONTAINER_RUNTIME=bookworm-slim
  • RUNTIME=linux-x64
  1. Jammy:
  • CONTAINER_RUNTIME=Jammy
  • RUNTIME=linux-x64
  1. Alpine:
  • CONTAINER_RUNTIME=alpine
  • RUNTIME=linux-musl-x64

You can verify the built image by running:

docker run --rm mykurrentdb --insecure --what-if

More resources