Change data capture for a variety of databases. Please log issues at https://issues.redhat.com/browse/DBZ.

Overview

License Maven Central Build Status User chat Developer chat Google Group Stack Overflow

Copyright Debezium Authors. Licensed under the Apache License, Version 2.0. The Antlr grammars within the debezium-ddl-parser module are licensed under the MIT License.

English | Chinese

Debezium

Debezium is an open source project that provides a low latency data streaming platform for change data capture (CDC). You setup and configure Debezium to monitor your databases, and then your applications consume events for each row-level change made to the database. Only committed changes are visible, so your application doesn't have to worry about transactions or changes that are rolled back. Debezium provides a single model of all change events, so your application does not have to worry about the intricacies of each kind of database management system. Additionally, since Debezium records the history of data changes in durable, replicated logs, your application can be stopped and restarted at any time, and it will be able to consume all of the events it missed while it was not running, ensuring that all events are processed correctly and completely.

Monitoring databases and being notified when data changes has always been complicated. Relational database triggers can be useful, but are specific to each database and often limited to updating state within the same database (not communicating with external processes). Some databases offer APIs or frameworks for monitoring changes, but there is no standard so each database's approach is different and requires a lot of knowledged and specialized code. It still is very challenging to ensure that all changes are seen and processed in the same order while minimally impacting the database.

Debezium provides modules that do this work for you. Some modules are generic and work with multiple database management systems, but are also a bit more limited in functionality and performance. Other modules are tailored for specific database management systems, so they are often far more capable and they leverage the specific features of the system.

Basic architecture

Debezium is a change data capture (CDC) platform that achieves its durability, reliability, and fault tolerance qualities by reusing Kafka and Kafka Connect. Each connector deployed to the Kafka Connect distributed, scalable, fault tolerant service monitors a single upstream database server, capturing all of the changes and recording them in one or more Kafka topics (typically one topic per database table). Kafka ensures that all of these data change events are replicated and totally ordered, and allows many clients to independently consume these same data change events with little impact on the upstream system. Additionally, clients can stop consuming at any time, and when they restart they resume exactly where they left off. Each client can determine whether they want exactly-once or at-least-once delivery of all data change events, and all data change events for each database/table are delivered in the same order they occurred in the upstream database.

Applications that don't need or want this level of fault tolerance, performance, scalability, and reliability can instead use Debezium's embedded connector engine to run a connector directly within the application space. They still want the same data change events, but prefer to have the connectors send them directly to the application rather than persist them inside Kafka.

Common use cases

There are a number of scenarios in which Debezium can be extremely valuable, but here we outline just a few of them that are more common.

Cache invalidation

Automatically invalidate entries in a cache as soon as the record(s) for entries change or are removed. If the cache is running in a separate process (e.g., Redis, Memcache, Infinispan, and others), then the simple cache invalidation logic can be placed into a separate process or service, simplifying the main application. In some situations, the logic can be made a little more sophisticated and can use the updated data in the change events to update the affected cache entries.

Simplifying monolithic applications

Many applications update a database and then do additional work after the changes are committed: update search indexes, update a cache, send notifications, run business logic, etc. This is often called "dual-writes" since the application is writing to multiple systems outside of a single transaction. Not only is the application logic complex and more difficult to maintain, dual writes also risk losing data or making the various systems inconsistent if the application were to crash after a commit but before some/all of the other updates were performed. Using change data capture, these other activities can be performed in separate threads or separate processes/services when the data is committed in the original database. This approach is more tolerant of failures, does not miss events, scales better, and more easily supports upgrading and operations.

Sharing databases

When multiple applications share a single database, it is often non-trivial for one application to become aware of the changes committed by another application. One approach is to use a message bus, although non-transactional message busses suffer from the "dual-writes" problems mentioned above. However, this becomes very straightforward with Debezium: each application can monitor the database and react to the changes.

Data integration

Data is often stored in multiple places, especially when it is used for different purposes and has slightly different forms. Keeping the multiple systems synchronized can be challenging, but simple ETL-type solutions can be implemented quickly with Debezium and simple event processing logic.

CQRS

The Command Query Responsibility Separation (CQRS) architectural pattern uses a one data model for updating and one or more other data models for reading. As changes are recorded on the update-side, those changes are then processed and used to update the various read representations. As a result CQRS applications are usually more complicated, especially when they need to ensure reliable and totally-ordered processing. Debezium and CDC can make this more approachable: writes are recorded as normal, but Debezium captures those changes in durable, totally ordered streams that are consumed by the services that asynchronously update the read-only views. The write-side tables can represent domain-oriented entities, or when CQRS is paired with Event Sourcing the write-side tables are the append-only event log of commands.

Building Debezium

The following software is required to work with the Debezium codebase and build it locally:

See the links above for installation instructions on your platform. You can verify the versions are installed and running:

$ git --version
$ javac -version
$ mvn -version
$ docker --version

Why Docker?

Many open source software projects use Git, Java, and Maven, but requiring Docker is less common. Debezium is designed to talk to a number of external systems, such as various databases and services, and our integration tests verify Debezium does this correctly. But rather than expect you have all of these software systems installed locally, Debezium's build system uses Docker to automatically download or create the necessary images and start containers for each of the systems. The integration tests can then use these services and verify Debezium behaves as expected, and when the integration tests finish, Debezium's build will automatically stop any containers that it started.

Debezium also has a few modules that are not written in Java, and so they have to be required on the target operating system. Docker lets our build do this using images with the target operating system(s) and all necessary development tools.

Using Docker has several advantages:

  1. You don't have to install, configure, and run specific versions of each external services on your local machine, or have access to them on your local network. Even if you do, Debezium's build won't use them.
  2. We can test multiple versions of an external service. Each module can start whatever containers it needs, so different modules can easily use different versions of the services.
  3. Everyone can run complete builds locally. You don't have to rely upon a remote continuous integration server running the build in an environment set up with all the required services.
  4. All builds are consistent. When multiple developers each build the same codebase, they should see exactly the same results -- as long as they're using the same or equivalent JDK, Maven, and Docker versions. That's because the containers will be running the same versions of the services on the same operating systems. Plus, all of the tests are designed to connect to the systems running in the containers, so nobody has to fiddle with connection properties or custom configurations specific to their local environments.
  5. No need to clean up the services, even if those services modify and store data locally. Docker images are cached, so reusing them to start containers is fast and consistent. However, Docker containers are never reused: they always start in their pristine initial state, and are discarded when they are shutdown. Integration tests rely upon containers, and so cleanup is handled automatically.

Configure your Docker environment

The Docker Maven Plugin will resolve the docker host by checking the following environment variables:

export DOCKER_HOST=tcp://10.1.2.2:2376
export DOCKER_CERT_PATH=/path/to/cdk/.vagrant/machines/default/virtualbox/.docker
export DOCKER_TLS_VERIFY=1

These can be set automatically if using Docker Machine or something similar.

Building the code

First obtain the code by cloning the Git repository:

$ git clone https://github.com/debezium/debezium.git
$ cd debezium

Then build the code using Maven:

$ mvn clean install

The build starts and uses several Docker containers for different DBMSes. Note that if Docker is not running or configured, you'll likely get an arcane error -- if this is the case, always verify that Docker is running, perhaps by using docker ps to list the running containers.

Don't have Docker running locally for builds?

You can skip the integration tests and docker-builds with the following command:

$ mvn clean install -DskipITs

Running tests of the Postgres connector using the wal2json or pgoutput logical decoding plug-ins

The Postgres connector supports three logical decoding plug-ins for streaming changes from the DB server to the connector: decoderbufs (the default), wal2json, and pgoutput. To run the integration tests of the PG connector using wal2json, enable the "wal2json-decoder" build profile:

$ mvn clean install -pl :debezium-connector-postgres -Pwal2json-decoder

To run the integration tests of the PG connector using pgoutput, enable the "pgoutput-decoder" and "postgres-10" build profiles:

$ mvn clean install -pl :debezium-connector-postgres -Ppgoutput-decoder,postgres-10

A few tests currently don't pass when using the wal2json plug-in. Look for references to the types defined in io.debezium.connector.postgresql.DecoderDifferences to find these tests.

Running tests of the Postgres connector with specific Apicurio Version

To run the tests of PG connector using wal2json or pgoutput logical decoding plug-ins with a specific version of Apicurio, a test property can be passed as:

$ mvn clean install -pl debezium-connector-postgres -Pwal2json-decoder 
      -Ddebezium.test.apicurio.version=1.3.1.Final

In absence of the property the stable version of Apicurio will be fetched.

Running tests of the Postgres connector against an external database, e.g. Amazon RDS

Please note if you want to test against a non-RDS cluster, this test requires <your user> to be a superuser with not only replication but permissions to login to all databases in pg_hba.conf. It also requires postgis packages to be available on the target server for some of the tests to pass.

$ mvn clean install -pl debezium-connector-postgres -Pwal2json-decoder \
     -Ddocker.skip.build=true -Ddocker.skip.run=true -Dpostgres.host=<your PG host> \
     -Dpostgres.user=<your user> -Dpostgres.password=<your password> \
     -Ddebezium.test.records.waittime=10

Adjust the timeout value as needed.

See PostgreSQL on Amazon RDS for details on setting up a database on RDS to test against.

Running tests of the Oracle connector using Oracle LogMiner

$ mvn clean install -pl debezium-connector-oracle -Poracle,logminer -Dinstantclient.dir=<path-to-instantclient>

Running tests of the Oracle connector with a non-CDB database

$ mvn clean install -pl debezium-connector-oracle -Poracle -Dinstantlclient.dir=<path-to-instantclient> -Ddatabase.pdb.name=

Contributing

The Debezium community welcomes anyone that wants to help out in any way, whether that includes reporting problems, helping with documentation, or contributing code changes to fix bugs, add tests, or implement new features. See this document for details.

A big thank you to all the Debezium contributors!

Comments
  • DBZ-175 integration into normal task flow

    DBZ-175 integration into normal task flow

    Integrate all the smaller DBZ-175 changes into a final change that will trigger parallel snapshotting if the proper config is enabled and there are new tables in the config.

    opened by mtagle 91
  • DBZ-4046 Update `pgjdbc` to 42.2.24

    DBZ-4046 Update `pgjdbc` to 42.2.24

    Hey all,

    I think I've identified an issue I'm having as to relating to the version of PostgreSQL JDBC Driver being used by Debezium. According to this post between version 42.2.14 and 42.2.17 there was an issue which made connections fallback to gssEncMode: https://github.com/pgjdbc/pgjdbc/issues/1868

    This causes issues on Azure: https://jira.atlassian.com/browse/CONFSERVER-60515?error=login_required&error_description=Login+required&state=14f30dda-a08b-4f9d-9841-ed77c8e91c79 And, as I spent hours debugging this evening, on Google Cloud SQL too, I guess. I'm seeing the 1234.5680 error using Debezium through Apache Beam.

    Would it be a reasonable Pull Request to update this dependency to 42.2.18? Would this be backported to Debezium 1.3 which Beam is using currently? Would you like this dependency pushed further forward? The newest version is 42.2.24, I believe.

    https://issues.redhat.com/browse/DBZ-4060 https://issues.redhat.com/browse/DBZ-4046

    1.8 
    opened by judahrand 49
  • DBZ-4478: Partition-scoped metrics for the SQL Server connector

    DBZ-4478: Partition-scoped metrics for the SQL Server connector

    Change summary

    Introducing an absolutely separate API for multi-partition metrics would complicate a lot of code, so I decided to find a common ground. Below are the key steps.

    Introduce interfaces and default implementations for change event source metrics

    See the details in #3047.

    Add P extends Partition parameter to io.debezium.pipeline.source.spi.*Listener interfaces

    All existing connectors are already aware of the Partition interface. Passing partition to the listeners won't require any fundamental rework of the existing connectors but at the same time will enable building single- and multi-partition metrics using the same API.

    Technically, the Partition interface contains all the properties needed for exposing partition-scoped metrics but the interface stores them in a map without defining semantics for any of the properties. Since from the metrics perspective each property (e.g. server, database) has its own semantics, it's better to accept a parameterized type.

    Implement multi-partition metrics for SQL Server connector

    In the single-partition mode, the SQL Server connector will use the default implementations of the metrics. This will provide a backward compatibility layer without any additional code.

    In the multip-partition mode, it will use a separate metrics factory which will initialize multi-partition metrics. The metrics will have the following hierarchy:

    1. The Metrics classes will act as multi-partition listeners and implement task-level MBean interfaces.
    2. Internally, each metric will maintain a collection of task-scoped objects (currently called meters but we may think of a better name). Each object is in fact a group of atomic references which implements a single-partition listener API and a partition-level MBean.
    3. When registering or unregistering, each Metrics class registers or unregisters itself and all internal objects.
    4. Now, the default metrics can (and have been) reimplemented to delegate their implementation to the meter objects. This way, the same implementation is shared between the single- and multi-partition metrics.
    5. As an intended side-effect, the integration tests that use a multi-partition configuration should use TestHelper.waitForDatabaseSnapshotToBeCompleted(TestHelper.TEST_DATABASE) to synchronize with the connector.

    Future scope

    1. The existing single-partition and multi-partition Snapshot and Streaming MXBean interfaces can be replaced with combinations of smaller "meter" interfaces introduced above. For instance:
      • Single-partition streaming metrics = connection metrics (e.g. is connected) + streaming metrics (e.g. time behind source).
      • Multi-partition streaming task metrics = connection metrics; multi-partition partition metrics = streaming metrics.
    2. The logic of building metric names could be extracted into a separate API. Otherwise, the code is quite complex and duplicated between the production code and tests.

    TODO:

    • [x] Update debezium/debezium-connector-db2 (https://github.com/debezium/debezium-connector-db2/pull/42)
    • [x] Update debezium/debezium-connector-vitess (https://github.com/debezium/debezium-connector-vitess/pull/64)
    opened by morozov 48
  • DBZ-1238 Allow more options for snapshot SPI

    DBZ-1238 Allow more options for snapshot SPI

    https://issues.jboss.org/projects/DBZ/issues/DBZ-1238

    This commit adds some more options to the Postgres Snapshottter SPI interface, specifically, the ability to create the query for the start of a snapshot, as well as the ability to generate a statement to lock the tables.

    Additionally, some rework is done to allow for the usage of an exported snapshot in conjuction with the SPI taking metadata about a newly created slot. This also changes how slots are initialized to allow for the exported snapshot to be referenced, which requires adding a more granular setup of a ReplicationConnection

    Together, these options allow for a lot more flexibility, such as not taking locks when snapshotting large databases as well as potentially to use exported snapshots.

    A future version should perhaps make some options possible without implementing the SPI (such as using the exported snapshot by default) but this commit is just trying to get all the groundwork in place to allow for the Snapshotter SPI to have this functionality.

    opened by addisonj 46
  • WIP: DBZ-1292 Add option to export change events in

    WIP: DBZ-1292 Add option to export change events in "CloudEvents" format

    This PR is work-in-progress

    Issue: https://issues.jboss.org/browse/DBZ-1292

    • A new connector configuration field cloudevents.format. When it's set to true, connector will produce source records in CloudEvents format.

    • A new CloudEvents formatter for SQL Server connector.

    opened by Wang-Yu-Chao 39
  • DBZ-3966 JsonTableChangeSerializer support serialization for defaultValue

    DBZ-3966 JsonTableChangeSerializer support serialization for defaultValue

    Both JsonTableChangeSerializer and ConnectTableChangeSerializer ignored defaultValue, hasDefaultValue, enumValues of ColumnImpl.

    If we serialize and then deserialize the TableChanges, missing default value may cause:

    org.apache.kafka.connect.errors.DataException: Invalid value: null used for required field
    

    https://issues.redhat.com/browse/DBZ-3966

    1.8 
    opened by Jiabao-Sun 34
  • DBZ-306 add support for different mongodb _id types in key struct

    DBZ-306 add support for different mongodb _id types in key struct

    This addresses a potential bug / design flaw with regard to the handling of the _id field of MongoDB CDC events in the key struct of SourceRecords. Currently, the problem is that _id fields are always represented as flat strings.

    Rationale:

    At the moment, one cannot even distinguish simple cases e.g. a numeric _id field holding the integer 1234 vs. a string _id field holding "1234". While for CREATE/READ events consumers can re-create the correct (original) _id type based on the "after" field found in the value struct, it is not possible to use this workaround for idempotent change or delete events respectively. For these we need to rely on a correct _id type in order to be able to refer to the corresponding data records and apply the changes or deletetions at the consuming sink.

    I recently discussed this with @rhauch (in confluent slack community) and the conclusion was that it might make most sense to address this issue by allowing the SourceRecords to reflect the different types that _id fields might exhibit. Looking at the current implementation I decided to remove the rigid / pre-defined keySchema and corresponding _id handling approach. Instead, I'm introducing a simple inner class IdStructConverter with static conversion methods (type-specific ones) inside RecordMakers class. In addition to that, there is now a new method idStructFor(...) - it delegates to the IdStructConverter to create a proper Struct for the _id field - which is used by the existing createRecords(...) method.

    Implications:

    Because of this change 3 affected unit test methods had to be adapted accordingly since the _id fields of type ObjectId are not just strings any longer after that change.

    Clearly, the suggested PR is a breaking change in the sense that any downstream consumers which "accidentally" rely on the _id field to be always a flat string need to be modified as well.

    0.6 
    opened by hpgrahsl 30
  • Debezium Timestamp Converter

    Debezium Timestamp Converter

    Code for Debezium Timestamp Converter. Have ONLY tested against Debezium Mysql Connecter. Can enhance to support multiple TimeZone, but for now the default is only UTC. Had to create a separate folder for now, but would like to take your suggestion and change path accordingly.

    opened by Satyajitv 27
  • DBZ-2575 improve performance where tables we fetch are much less than total tables

    DBZ-2575 improve performance where tables we fetch are much less than total tables

    https://issues.redhat.com/browse/DBZ-2575

    On our system with ~6,000 tables and ~127,000 columns, where we want just copy just 40 tables, this changes the timing from 30 minues to just over 1 minute for the read schema.

    I presume the original code is quicker if we want the majority of the tables I've made it do the original thing only if we want all the tables - not quite sure where the boundry should be here...

    opened by msillence 25
  • [DBZ-507] Grand unified geometry

    [DBZ-507] Grand unified geometry

    WIP. Plan at https://issues.jboss.org/browse/DBZ-507

    Based off #373

    TODO

    • [x] MySQL
    • [x] PostGIS decoderbufs
    • [x] PostGIS wal2json
    • [x] Additional tests
    • [ ] Geometry array support
    0.7.2 
    opened by rcoup 23
  • [DBZ-342] fix broken MySQL data type

    [DBZ-342] fix broken MySQL data type "TIME"

    DBZ-342: fix broken handling of MySQL data type "TIME" for negative values and positive values >= 24:00:00 hours @see https://issues.jboss.org/browse/DBZ-342

    0.7 
    opened by rk3rn3r 23
  • 2.1

    2.1

    rely io.swagger.core.v3 and org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2 conflict

    org.springframework.boot spring-boot-starter-parent 3.0.1 org.springframework.boot spring-boot-starter-web io.debezium debezium-api 2.1.1.Final io.debezium debezium-embedded 2.1.1.Final io.debezium debezium-connector-mysql 2.1.1.Final org.springdoc springdoc-openapi-starter-webmvc-ui 2.0.2

    opened by x157123 0
  • DBZ-5930: Add the doc for vitess snapshot.mode

    DBZ-5930: Add the doc for vitess snapshot.mode

    Vitess connector finally supports the snapshot feature. And the snapshot.mode specifies the criteria for performing a snapshot when the connector starts.

    opened by yoheimuta 1
  • DBZ-5915: correctly determine the startStreamingLsn

    DBZ-5915: correctly determine the startStreamingLsn

    Addressing https://issues.redhat.com/browse/DBZ-5915

    The LSN of the BEGIN message is same as the message following it. If the lastEventStoredLsn corresponds to the BEGIN message, we are skipping the message following it because the LSN is same. This is causing data loss if the following message corresponds to any DML statement.

    Proposed solution: While looking for lsnAfterLastEventStoredLsn, instead of skipping the LSN which is same as the lastEventStoredLsn we set the startStreamingLsn as txStartLsn and return it. This will prevent the data loss. In some cases, where the lastEventStoredLsn belongs to the message following the BEGIN message, it could lead to duplication of the message following the BEGIN message, which I think is fine.

    opened by rajdangwal 1
  • DBZ-5878: Update the Debezium UI Documentation page to include the latest additional steps and UI screenshots

    DBZ-5878: Update the Debezium UI Documentation page to include the latest additional steps and UI screenshots

    Closes https://issues.redhat.com/browse/DBZ-5878 Included the description of Transformations, Topic creation and Custome properties additional steps. Updated the old Debezium UI screenshots.

    opened by indraraj 0
  • Bump netty-codec-http from 4.1.82.Final to 4.1.86.Final in /debezium-server/debezium-server-pravega

    Bump netty-codec-http from 4.1.82.Final to 4.1.86.Final in /debezium-server/debezium-server-pravega

    Bumps netty-codec-http from 4.1.82.Final to 4.1.86.Final.

    Commits
    • cde0e2d [maven-release-plugin] prepare release netty-4.1.86.Final
    • fe18adf Merge pull request from GHSA-hh82-3pmq-7frp
    • cd91cf3 Merge pull request from GHSA-fx2c-96vj-985v
    • 7cc8428 fixing some naming and typos that caused wrong value to be updated (#13031)
    • 22d3151 Save promises type pollution due to interface type checks (#12980)
    • 1baf9ef Enable SocketHalfClosedTest for epoll (#13025)
    • 91527ff Correctly handle unresolvable InetSocketAddress when using DatagramChannel (#...
    • b64a6e2 Revert#12888 for potential scheduling problems (#13021)
    • 3bff0be Replace LinkedList with ArrayList (#13016)
    • d24defc WebSocketClientHandshaker: add public accessors for parameters (#13009)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    waits for other PR dependencies 
    opened by dependabot[bot] 1
Owner
Debezium
Distributed open source platform for change data capture
Debezium
Event capture and querying framework for Java

Eventsourcing for Java Enabling plurality and evolution of domain models Instead of mutating data in a database, Eventsourcing stores all changes (eve

Eventsourcing, Inc. 408 Nov 5, 2022
Official repository of Trino, the distributed SQL query engine for big data, formerly known as PrestoSQL (https://trino.io)

Trino is a fast distributed SQL query engine for big data analytics. See the User Manual for deployment instructions and end user documentation. Devel

Trino 6.9k Dec 31, 2022
Mystral (pronounced "Mistral") is an efficient library to deal with relational databases quickly.

Mystral An efficient library to deal with relational databases quickly. A little request: read the Javadoc to understand how these elements work in de

null 13 Jan 4, 2023
A tool based on mysql-connector to simplify the use of databases, tables & columns

Description A tool based on mysql-connector to simplify the use of databases, tables & columns. This tool automatically creates the databases & tables

nz 6 Nov 17, 2022
EBQuery allows you to easily access databases through a REST API.

EBQuery Table of Contents Introduction - Enterprise Backend as a Service Requirements Getting started Using EBQuery Features Introduction - Enterprise

null 15 Nov 9, 2021
A simple-to-use storage ORM supporting several databases for Java.

Storage Handler This is a library based off of my old storage handler within my queue revamp. It's for easy storage handling for multiple platforms. N

NV6 7 Jun 22, 2022
Java implementation of Condensation - a zero-trust distributed database that ensures data ownership and data security

Java implementation of Condensation About Condensation enables to build modern applications while ensuring data ownership and security. It's a one sto

CondensationDB 43 Oct 19, 2022
IoTDB (Internet of Things Database) is a data management system for time series data

English | 中文 IoTDB Overview IoTDB (Internet of Things Database) is a data management system for time series data, which can provide users specific ser

The Apache Software Foundation 3k Jan 1, 2023
The official home of the Presto distributed SQL query engine for big data

Presto Presto is a distributed SQL query engine for big data. See the User Manual for deployment instructions and end user documentation. Requirements

Presto 14.3k Dec 30, 2022
CrateDB is a distributed SQL database that makes it simple to store and analyze massive amounts of machine data in real-time.

About CrateDB is a distributed SQL database that makes it simple to store and analyze massive amounts of machine data in real-time. CrateDB offers the

Crate.io 3.6k Jan 2, 2023
A distributed in-memory data store for the cloud

EVCache EVCache is a memcached & spymemcached based caching solution that is mainly used for AWS EC2 infrastructure for caching frequently used data.

Netflix, Inc. 1.9k Jan 2, 2023
jdbi is designed to provide convenient tabular data access in Java; including templated SQL, parameterized and strongly typed queries, and Streams integration

The Jdbi library provides convenient, idiomatic access to relational databases in Java. Jdbi is built on top of JDBC. If your database has a JDBC driv

null 1.7k Dec 27, 2022
New-fangled Timeseries Data Store

Newts Newts is a time-series data store based on Apache Cassandra. Features High throughput Newts is built upon Apache Cassandra, a write-optimized, f

OpenNMS 190 Oct 3, 2022
An open source SQL database designed to process time series data, faster

English | 简体中文 | العربية QuestDB QuestDB is a high-performance, open-source SQL database for applications in financial services, IoT, machine learning

QuestDB 9.9k Jan 1, 2023
Scalable Time Series Data Analytics

Time Series Data Analytics Working with time series is difficult due to the high dimensionality of the data, erroneous or extraneous data, and large d

Patrick Schäfer 286 Dec 7, 2022
Apache Drill is a distributed MPP query layer for self describing data

Apache Drill Apache Drill is a distributed MPP query layer that supports SQL and alternative query languages against NoSQL and Hadoop data storage sys

The Apache Software Foundation 1.8k Jan 7, 2023
Database Subsetting and Relational Data Browsing Tool.

Jailer Database Tool Jailer is a tool for database subsetting and relational data browsing. The Subsetter exports consistent, referentially intact row

Wisser 1.5k Jan 7, 2023