All Projects → codenotary → Immudb

codenotary / Immudb

Licence: apache-2.0
immudb - world’s fastest immutable database, built on a zero trust model

Programming Languages

go
31211 projects - #10 most used programming language
shell
77523 projects
Yacc
648 projects
Makefile
30231 projects
Roff
2310 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to Immudb

qed
The scalable, auditable and high-performance tamper-evident log project
Stars: ✭ 87 (-97.68%)
Mutual labels:  verify, merkle-tree, tamper-evident, auditable
lunasec
LunaSec - Dependency Security Scanner that automatically notifies you about vulnerabilities like Log4Shell or node-ipc in your Pull Requests and Builds. Protect yourself in 30 seconds with the LunaTrace GitHub App: https://github.com/marketplace/lunatrace-by-lunasec/
Stars: ✭ 1,261 (-66.31%)
Mutual labels:  pci-dss, compliance, gdpr, zero-trust
Databunker
Secure storage for personal records built to comply with GDPR
Stars: ✭ 122 (-96.74%)
Mutual labels:  database, gdpr, compliance
Libmdbx
One of the fastest embeddable key-value ACID database without WAL. libmdbx surpasses the legendary LMDB in terms of reliability, features and performance.
Stars: ✭ 729 (-80.52%)
Mutual labels:  database, key-value, performance
Wazuh Kibana App
Wazuh - Kibana plugin
Stars: ✭ 212 (-94.34%)
Mutual labels:  gdpr, compliance, pci-dss
Lynis
Lynis - Security auditing tool for Linux, macOS, and UNIX-based systems. Assists with compliance testing (HIPAA/ISO27001/PCI DSS) and system hardening. Agentless, and installation optional.
Stars: ✭ 9,137 (+144.11%)
Mutual labels:  gdpr, compliance, pci-dss
Unqlite
An Embedded NoSQL, Transactional Database Engine
Stars: ✭ 1,583 (-57.71%)
Mutual labels:  database, key-value
Etcd
Distributed reliable key-value store for the most critical data of a distributed system
Stars: ✭ 38,238 (+921.59%)
Mutual labels:  database, key-value
Data Processing Agreements
Collection of Data Processing Agreement (DPA) and GDPR compliance resources
Stars: ✭ 110 (-97.06%)
Mutual labels:  gdpr, compliance
Rust Etcd
An etcd client library for Rust.
Stars: ✭ 119 (-96.82%)
Mutual labels:  database, key-value
Siac
SIAC is an enterprise SIEM built on open-source technology.
Stars: ✭ 100 (-97.33%)
Mutual labels:  compliance, pci-dss
Django Balancer
A set of tools for using Django's multi-db feature.
Stars: ✭ 111 (-97.03%)
Mutual labels:  database, replication
Nutsdb
A simple, fast, embeddable, persistent key/value store written in pure Go. It supports fully serializable transactions and many data structures such as list, set, sorted set.
Stars: ✭ 1,827 (-51.19%)
Mutual labels:  database, key-value
Pg stat kcache
Gather statistics about physical disk access and CPU consumption done by backends.
Stars: ✭ 106 (-97.17%)
Mutual labels:  database, performance
Hermes
Hermes: a fault-tolerant replication protocol, implemented over RDMA, guaranteeing linearizability and achieving low latency and high throughput.
Stars: ✭ 105 (-97.19%)
Mutual labels:  performance, replication
Gkvdb
[mirror] Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能高可用Key-Value嵌入式事务数据库。基于纯Go语言实现,具有优异的跨平台性,良好的高可用及文件IO复用设计,高效的底层数据库文件操作性能,支持原子操作、批量操作、事务操作、多表操作、多表事务、随机遍历等特性。
Stars: ✭ 109 (-97.09%)
Mutual labels:  database, key-value
Pg flame
A flamegraph generator for Postgres EXPLAIN ANALYZE output.
Stars: ✭ 1,391 (-62.84%)
Mutual labels:  database, performance
Floyd
The Floyd programming language
Stars: ✭ 133 (-96.45%)
Mutual labels:  immutable, performance
Ardb
A redis protocol compatible nosql, it support multiple storage engines as backend like Google's LevelDB, Facebook's RocksDB, OpenLDAP's LMDB, PerconaFT, WiredTiger, ForestDB.
Stars: ✭ 1,707 (-54.39%)
Mutual labels:  database, key-value
Arangodb
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
Stars: ✭ 11,880 (+217.39%)
Mutual labels:  database, key-value

immudb License

Documentation Build Status Go Report Card Coverage Homebrew Mentioned in Awesome Go

Discord Immudb Careers Tweet about immudb! Artifact Hub

Don't forget to ⭐ this repo if you like immudb!

🎉 5M pulls from docker hub!


Detailed documentation can be found at https://docs.immudb.io/


immudb is a database with built-in cryptographic proof and verification. It tracks changes in sensitive data and the integrity of the history will be protected by the clients, without the need to trust the server. It can operate as a key-value store or as relational database (SQL).

Traditional database transactions and logs are hard to scale and are mutable, so there is no way to know for sure if your data has been compromised. immudb is immutable. You can add new versions of existing records, but never change or delete records. This lets you store critical data without fear of it being tampered.

Data stored in immudb is cryptographically coherent and verifiable, just like with blockchains, but without all the complexity. Unlike blockchains, immudb can handle millions of transactions per second, and can be used both as a lightweight service or embedded in your application as a library. immudb runs everywhere, on an IoT device, your notebook, a server, on-premise or in the cloud.

immudb is already used by hundreds of projects to store tamper-proof data and to keep the data change history immutable. immudb can be used as a key-value store or relational data structure and supports both transactions and blobs, so there are no limits to the use cases.

Companies use immudb to secure and tamper-evident log data, sensor data, sensitive data, transactions, software build recipes, rule-base data, even artifacts or even video streams.

Online demo environment

Your own temporary immudb web console access to start using immudb in an online demo environment (username: immudb; password: immudb)

Tech specs

Topic Description
DB Model Key-Value store with 3D access (tx-key-value), SQL
Data scheme schema-free
Implementation design Cryptographic commit log with parallel Merkle Tree,
(sync/async) indexing with extended B-tree
Implementation language Go
Server OS(s) BSD, Linux, OS X, Solaris, Windows, IBM z/OS
Embeddable Yes, optionally
Server APIs gRPC
Partition methods Sharding
Consistency concepts Immediate Consistency
Transaction concepts ACID with Snapshot Isolation (SSI)
Durability Yes
Snapshots Yes
High Read throughput Yes
High Write throughput Yes
Optimized for SSD Yes

Quickstart

Getting immudb running: binary

You may download the immudb binary from the latest releases on Github. Once you have downloaded immudb, rename it to immudb, make sure to mark it as executable, then run it. The following example shows how to obtain v1.0.0 for linux amd64:

wget https://github.com/vchain-us/immudb/releases/download/v1.0.0/immudb-v1.0.0-linux-amd64
mv immudb-v1.0.0-linux-amd64 immudb
chmod +x immudb

# run immudb in the foreground to see all output
./immudb

# or run immudb in the background
./immudb -d

Getting immudb running: Docker

Use Docker to run immudb in a ready-to-use container:

docker run -d --net host -it --rm --name immudb codenotary/immudb:latest

If you are running the Docker image without host networking, make sure to expose ports 3322 and 9497.

Getting immudb running: Kubernetes

In kubernetes, use helm for an easy deployment: just add our repository and install immudb with these simple commands:

helm repo add immudb https://packages.codenotary.org/helm
helm repo update
helm install immudb --generate-name

Enabling S3 storage

immudb can store its data in the Amazon S3 service (or a compatible alternative). The following example shows how to run immudb with the S3 storage enabled:

export IMMUDB_S3_STORAGE=true
export IMMUDB_S3_ACCESS_KEY_ID=<S3 ACCESS KEY ID>
export IMMUDB_S3_SECRET_KEY=<SECRET KEY>
export IMMUDB_S3_BUCKET_NAME=<BUCKET NAME>
export IMMUDB_S3_PATH_PREFIX=testing-001
export IMMUDB_S3_ENDPOINT="https://${IMMUDB_S3_BUCKET_NAME}.s3.amazonaws.com"

./immudb

You can also easily use immudb with compatible s3 alternatives such as the minio server:

export IMMUDB_S3_ACCESS_KEY_ID=minioadmin
export IMMUDB_S3_SECRET_KEY=minioadmin
export IMMUDB_S3_STORAGE=true
export IMMUDB_S3_BUCKET_NAME=immudb-bucket
export IMMUDB_S3_PATH_PREFIX=testing-001
export IMMUDB_S3_ENDPOINT="http://localhost:9000"

# Note: This spawns a temporary minio server without data persistence
docker run -d -p 9000:9000 minio/minio server /data

# Create the bucket - this can also be done through web console at http://localhost:9000
docker run --net=host -it --entrypoint /bin/sh minio/mc -c "
  mc alias set local http://localhost:9000 minioadmin minioadmin &&
  mc mb local/${IMMUDB_S3_BUCKET_NAME}
"

# Run immudb instance
./immudb

Connecting with immuclient

You may download the immuclient binary from the latest releases on Github. Once you have downloaded immuclient, rename it to immuclient, make sure to mark it as executable, then run it. The following example shows how to obtain v1.0.0 for linux amd64:

wget https://github.com/vchain-us/immudb/releases/download/v1.0.0/immuclient-v1.0.0-linux-amd64
mv immuclient-v1.0.0-linux-amd64 immuclient
chmod +x immuclient

# start the interactive shell
./immuclient

# or use commands directly
./immuclient help

Or just use Docker to run immuclient in a ready-to-use container. Nice and simple.

docker run -it --rm --net host --name immuclient codenotary/immuclient:latest

Using immudb

Lot of useful documentation and step by step guides can be found at https://docs.immudb.io/

Real world examples

We already learned about the following use cases from users:

  • use immudb to immutably store every update to sensitive database fields (credit card or bank account data) of an existing application database
  • store CI/CD recipes in immudb to protect build and deployment pipelines
  • store public certificates in immudb
  • use immudb as an additional hash storage for digital objects checksums
  • store log streams (i. e. audit logs) tamperproof
  • store the last known positions of submarines
  • record the location where fish was found aboard fishing trawlers

How to integrate immudb in your application

We have SDKs available for the following programming languages:

  1. Java immudb4j
  2. Golang (client package in the immudb repo)
  3. .net immudb4dotnet
  4. Python immudb-py
  5. Node.js immudb-node

To get started with development, there is a quickstart in our documentation: or pick a basic running sample from immudb-client-examples.

Our immudb Playground provides a guided environment to learn the Python SDK.

We've developed a "language-agnostic SDK" which exposes a REST API for easy consumption by any application. immugw may be a convenient tool when SDKs are not available for the programming language you're using, for experimentation, or just because you prefer your app only uses REST endpoints.

Performance figures

immudb can handle millions of writes per second. The following table shows performance of the embedded store inserting 1M entries on a machine with 4-core E3-1275v6 CPU and SSD disk:

Entries Workers Batch Batches time (s) Entries/s
1M 20 1000 50 1.061 1.2M /s
1M 50 1000 20 0.543 1.8M /s
1M 100 1000 10 0.615 1.6M /s

You can generate your own benchmarks using the stress_tool under embedded/tools.

Roadmap

The following topics are important to us and are planned or already being worked on:

  • GDPR compliance
  • Replication (Follower)
  • Other storage backends (eg. Cloud)
  • Hot backups
  • Data pruning
  • Compression
  • Improving SDK API and errors
  • time and date support in SQL

Contributing

We welcome contributors. Feel free to join the team!

Learn how to build immudb components in both binary and Docker image form.

To report bugs or get help, use GitHub's issues.

immudb is Apache v2.0 License.

immudb re-distributes other open-source tools and libraries - Acknowledgements.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].