A decentralized, trusted, high performance, SQL database with blockchain features

Go Report Card Coverage Build Status License GoDoc homebrew

中文简介

CovenantSQL(CQL) is a Byzantine Fault Tolerant relational database built on SQLite:

  • ServerLess: Free, High Availabile, Auto Sync Database Service for Serverless App
  • SQL: Most SQL-92 support.
  • Decentralize: Running on Open Internet without Central Coordination.
  • Privacy: Access with Granted Permission and Encryption Pass.
  • Immutable: Query History in CQL is Immutable and Trackable.
  • Permission: Column Level ACL and SQL Pattern Whitelist.

What is CQL?

  • Open source alternative of Amazon QLDB
  • Low cost DBaaS
  • Just like filecoin + IPFS is the decentralized file system, CQL is the decentralized database

Quick Start

CQL client supports:

  • macOS X 10.9+
  • Linux 2.6.23+ (x86, x86_64, armeabi-v7a, arm64-v8a)
Developer Guide

MacOS

  • 🍺 Homebrew users can just run:

    brew install cql
  • non-Homebrew users can run:

    sudo bash -c 'curl -L "https://mac.gridb.io/cql" | tar xzv -C /usr/local/bin/ --strip-components=1'

Linux

  • Just run:

    sudo bash -c 'curl -L "https://linux.gridb.io/cql" | tar xzv -C /usr/local/bin/ --strip-components=1'

To continue: TestNet Quickstart

SDKs

CovenantSQL Testnet is already released, have a try.

How CQL works

3 Layers Arch

CovenantSQL 3 Layer design

  • Layer 1: Global Consensus Layer (the main chain, the middle ring in the architecture diagram):
    • There will only be one main chain throughout the network.
    • Mainly responsible for database Miner and the user’s contract matching, transaction settlement, anti-cheating, shard chain lock hash and other global consensus matters.
  • Layer 2: SQL Consensus Layer (shard chain, rings on both sides):
    • Each database will have its own separate shard chain.
    • Mainly responsible for: the signature, delivery and consistency of the various Transactions of the database. The data history of the permanent traceability is mainly implemented here, and the hash lock is performed in the main chain.
  • Layer 3: Datastore Layer (database engine with SQL-92 support):
    • Each Database has its own independent distributed engine.
    • Mainly responsible for: database storage & encryption, query processing & signature, efficient indexing.
For more details

Consensus Algorithm

CQL supports 2 kinds of consensus algorithm:

  1. DPoS (Delegated Proof-of-Stake) is applied in Eventually consistency mode database and also Layer 1 (Global Consensus Layer) in BlockProducer. CQL miners pack all SQL queries and its signatures by the client into blocks thus form a blockchain. We named the algorithm Xenomint.
  2. BFT-Raft (Byzantine Fault-Toleranted Raft)bft-raft is applied in Strong consistency mode database. We named our implementation Kayak. The CQL miner leader does a Two-Phase Commit with Kayak to support Transaction.transaction

CQL database consistency mode and node count can be selected in database creation with command cql create '{"UseEventualConsistency": true, "Node": 3}'

Comparison

Ethereum Hyperledger Fabric Amazon QLDB CovenantSQL
Dev language Solidity, ewasm Chaincode (Go, NodeJS) ? Python, Golang, Java, PHP, NodeJS, MatLab
Dev Pattern Smart Contract Chaincode SQL SQL
Open Source Y Y N Y
Nodes for HA 3 15 ? 3
Column Level ACL N Y ? Y
Data Format File Key-value Document Filefuse, Key-value, Structured
Storage Encryption N API Y Y
Data Desensitization N N N Y
Multi-tenant DIY DIY N Y
Throughput (1s delay) 15~10 tx/s 3500 tx/s ? 11065 tx/s (Eventually Consistency)
1866 tx/s (Strong Consistency)
Consistency Delay 2~6 min < 1 s ? < 10 ms
Secure for Open Internet Y N Only in AWS Y
Consensus PoW + PoS(Casper) CFT ? DPoS (Eventually Consistency)
BFT-Raft (Strong Consistency)

FootNotes

  • BFT-Raft: A CQL leader offline needs CQL Block Producer to decide whether to wait for leader online for data integrity or promote a follower node for availability. This part is still under construction and any advice is welcome.

  • Transaction: Talking about ACID, CQL has full "Consistency, Isolation, Durability" and a limited Atomicity support. That is even under strong consistency mode, CQL transaction is only supported on the leader node. If you want to do "read v, v++, write v back" parallelly and atomically, then the only way is "read v from the leader, v++, write v back to leader"

  • FUSE: CQL has a simple FUSE support adopted from CockroachDB. The performance is not very ideal and still has some issues. But it can pass fio test like:

    fio --debug=io --loops=1 --size=8m --filename=../mnt/fiotest.tmp --stonewall --direct=1 --name=Seqread --bs=128k --rw=read --name=Seqwrite --bs=128k --rw=write --name=4krandread --bs=4k --rw=randread --name=4krandwrite --bs=4k --rw=randwrite

Network Stack

DH-RPC := TLS - Cert + DHT

Layer Implementation
RPC net/rpc
Naming Consistent Secure DHT
Pooling Session Pool
Multiplex smux
Transport Security Enhanced TLS
Network TCP or KCP for optional later

Test Tools we use

Papers

Our team members published:

that inspired us:

Performance

Strong consistency bench result (2 miners, 8 core aws c5.2xlarge): CovenantSQL bench

As seen above, the concurrency pressure on the database increased gradually in the first 5 hours, and the write TPS also increased. When the TPS no longer grows, the concurrent pressure is maintained for 100 hours.

Demos

Use cases

Traditional App & ĐApp use cases

Traditional App

Privacy data

If you are a developper of password management tools just like 1Password or LastPass. You can use CQL as the database to take benefits:

  1. Serverless: no need to deploy a server to store your user's password for sync which is the hot potato.
  2. Security: CQL handles all the encryption work. Decentralized data storage gives more confidence to your users.
  3. Regulation: CQL naturally comply with GDPR.

IoT storage

CQL miners are deployed globally, IoT node can write to nearest CQL miner directly.

  1. Cheaper: Without passing all the traffic through a gateway, you can save a large bandwidth fee. And, CQL is a shared economic database which makes storage cheaper.
  2. Faster: CQL consensus protocol is designed for Internet where network latency is unavoidable.

Open data service

For example, you are the most detailed Bitcoin OHLC data maintainer. You can directly expose an online SQL interface to your customers to meet a wide range of query needs.

  1. CQL can limit specific SQL query statements to meet the needs while also balancing data security;
  2. CQL can record SQL query records on the blockchain, which is very convenient for customers to check their bills for long-tail customers and billing, like this
  3. For customers with high performance requirements, Slave nodes can be deployed at the customer to meet the needs of customers with low latency queries while enabling almost real-time data updates.

Secure storage

Thanks to the CQL data history is immutable, CQL can be used as a storage for sensitive operational logs to prevent hacking and erasure access logs.

ĐApp

Storing data on Bitcoin or Ethereum is quite expensive ($4305 / MB on Ethereum 2018-05-15). Programming is very complicated due to the lack of support for structured data storage. CQL gives you a low-cost structured SQL database and also provides more room for ĐApp to exchange data with real-world.

TestNet

Contact

Comments
  • Add RPC method

    Add RPC method "bp_addTx" and "bp_getRunningStatus", also support JSON-RPC for miners

    1. add rpc method: bp_getRunningStatus;
    2. add rpc method: bp_addTx;
    3. support JSON RPC API for cql-minerd;
    4. some refactoring;
    5. add unittests for package: rpc/jsonrpc.
  • Where can I find covenantsql.io/covenantsql_adapter

    Where can I find covenantsql.io/covenantsql_adapter

    Hi, where can I find this docker image covenantsql.io/covenantsql_adapter?

    It's not on docker hub, and there is no instruction to build it from source code.

  • Blocks are not written to chain

    Blocks are not written to chain

    In bp logs there are messages that blocks are created, from miner to messages displayed cached_block_count (increases with each block). However, no blocks are added to the chain itself Only the first empty block is displayed in the Explorer Used the latest version from github for testing. Starting with 'make start'

    image

    image

  • Static build get some warnings about glibc

    Static build get some warnings about glibc

    image dlopen getaddrinfo getgrouplist getgrgid_r getgrnam_r getpwnam_r getpwuid_r Temporally change running docker image to glibc version alpine in this commit https://github.com/CovenantSQL/CovenantSQL/pull/142/commits/ace6fa58872b71b6cbccdfc1be9917c1a0622611

  • Add benchmark cases and duration logging

    Add benchmark cases and duration logging

    This feature branch adds some benchmarks and duration logs to assist the performance issue investigation.

    • Add benchmarks for lower layer components
    • Add duration logs in xenomint state object
  • Master key should not be input with env or args

    Master key should not be input with env or args

    查看自己的钱包余额时,如果之前有输入master key,则提示失败。

    错误提示如下:

    ./cql -config conf/config.yaml -get-balance

    ERRO[0000] decrypt private key error caller="privatekeystore.go:50 crypto/kms.LoadPrivateKey"

    INFO[0000] load private key failed: invalid PKCS#7 padding caller="privatekeystore.go:90 crypto/kms.InitLocalKeyPair"

    ERRO[0000] unexpected error while loading private key: invalid PKCS#7 padding caller="privatekeystore.go:109 crypto/kms.InitLocalKeyPair"

    ERRO[0000] init covenantsql client failed: invalid PKCS#7 padding caller="main.go:196 main.main"

  • Provide a runnable mysql adapter using mysql text protocol

    Provide a runnable mysql adapter using mysql text protocol

    Implemented:

    1. Runnable MySQL adapter using TEXT protocol.
    2. Support mysql_real_connect/mysql_query using libmysql.
    3. Interactive with MySQL 5.x series client is supported.

    Not Implemented:

    1. MySQL binary protocol which often used in PHP/Python language drivers as mysql_prepare and bind parameter functions.
    2. The new password authentication logic introduced in MySQL 8.0+.

    P.S.: the adapter is tested and fully capable of query/show/desc tables using MySQL 5.7 command line client.

    This pull request also unified all components to prefixed with cql-, hope this could make the user more easy to use the project by using go get command directly.

  • Cannot receive tokens from testnet

    Cannot receive tokens from testnet

    Followed the quickstart generated wallet and verified my twitter post but cannot get the tokens, the website is stuck on the last step. Can anyone help get the test tokens?

  • Add cql repeating logs while long process

    Add cql repeating logs while long process

    1. Replace cql console progress bar to repeating logs
    2. Add cql transfer repeating logs
    3. Add cql grant repeating logs
    4. Add cql drop repeating logs
    5. Add cql generate repeating logs
  • Bump github.com/gin-gonic/gin from 1.4.0 to 1.7.0

    Bump github.com/gin-gonic/gin from 1.4.0 to 1.7.0

    Bumps github.com/gin-gonic/gin from 1.4.0 to 1.7.0.

    Release notes

    Sourced from github.com/gin-gonic/gin's releases.

    Release v1.7.0

    BUGFIXES

    • fix compile error from #2572 (#2600)
    • fix: print headers without Authorization header on broken pipe (#2528)
    • fix(tree): reassign fullpath when register new node (#2366)

    ENHANCEMENTS

    • Support params and exact routes without creating conflicts (#2663)
    • chore: improve render string performance (#2365)
    • Sync route tree to httprouter latest code (#2368)
    • chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa (#2375)
    • chore(performance): improve countParams (#2378)
    • Remove some functions that have the same effect as the bytes package (#2387)
    • update:SetMode function (#2321)
    • remove a unused type SecureJSONPrefix (#2391)
    • Add a redirect sample for POST method (#2389)
    • Add CustomRecovery builtin middleware (#2322)
    • binding: avoid 2038 problem on 32-bit architectures (#2450)
    • Prevent panic in Context.GetQuery() when there is no Request (#2412)
    • Add GetUint and GetUint64 method on gin.context (#2487)
    • update content-disposition header to MIME-style (#2512)
    • reduce allocs and improve the render WriteString (#2508)
    • implement ".Unwrap() error" on Error type (#2525) (#2526)
    • Allow bind with a map[string]string (#2484)
    • chore: update tree (#2371)
    • Support binding for slice/array obj [Rewrite] (#2302)
    • basic auth: fix timing oracle (#2609)
    • Add mixed param and non-param paths (port of httprouter#329) (#2663)
    • feat(engine): add trustedproxies and remoteIP (#2632)

    Improve performance

    ENHANCEMENTS

    • Improve performance: Change *sync.RWMutex to sync.RWMutex in context. #2351

    release v1.6.2

    Release Notes

    • BUGFIXES
      • fix missing initial sync.RWMutex (#2305)
    • ENHANCEMENTS
      • Add set samesite in cookie. (#2306)

    Contributors

    release v1.6.1

    ... (truncated)

    Changelog

    Sourced from github.com/gin-gonic/gin's changelog.

    Gin v1.7.0

    BUGFIXES

    • fix compile error from #2572 (#2600)
    • fix: print headers without Authorization header on broken pipe (#2528)
    • fix(tree): reassign fullpath when register new node (#2366)

    ENHANCEMENTS

    • Support params and exact routes without creating conflicts (#2663)
    • chore: improve render string performance (#2365)
    • Sync route tree to httprouter latest code (#2368)
    • chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa (#2375)
    • chore(performance): improve countParams (#2378)
    • Remove some functions that have the same effect as the bytes package (#2387)
    • update:SetMode function (#2321)
    • remove an unused type SecureJSONPrefix (#2391)
    • Add a redirect sample for POST method (#2389)
    • Add CustomRecovery builtin middleware (#2322)
    • binding: avoid 2038 problem on 32-bit architectures (#2450)
    • Prevent panic in Context.GetQuery() when there is no Request (#2412)
    • Add GetUint and GetUint64 method on gin.context (#2487)
    • update content-disposition header to MIME-style (#2512)
    • reduce allocs and improve the render WriteString (#2508)
    • implement ".Unwrap() error" on Error type (#2525) (#2526)
    • Allow bind with a map[string]string (#2484)
    • chore: update tree (#2371)
    • Support binding for slice/array obj [Rewrite] (#2302)
    • basic auth: fix timing oracle (#2609)
    • Add mixed param and non-param paths (port of httprouter#329) (#2663)
    • feat(engine): add trustedproxies and remoteIP (#2632)

    Gin v1.6.3

    ENHANCEMENTS

    • Improve performance: Change *sync.RWMutex to sync.RWMutex in context. #2351

    Gin v1.6.2

    BUGFIXES

    • fix missing initial sync.RWMutex #2305

    ENHANCEMENTS

    • Add set samesite in cookie. #2306

    Gin v1.6.1

    BUGFIXES

    • Revert "fix accept incoming network connections" #2294

    ... (truncated)

    Commits

    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.

  • [BUG] Contact requested from https://canadao.org

    [BUG] Contact requested from https://canadao.org

    I'm Myles, software lead at https://canadao.org.

    I tried your Twitter and Telegram but there appeared to be no contact options. Attempts to send to your webmaster email have bounced back.

    I'm looking to port https://liquidfeedback.org (which rests on PostGres) to Radix DLT and I'm surveying available SQL on blockchain solutions. Could your solution work together with https://www.notoros.io/ ?

    Could we meet to discuss your solution? https://calendly.com/mylesd/30min

  • [BUG] Unable to install on Ubuntu

    [BUG] Unable to install on Ubuntu

    Describe the bug Following the quickstart I'm trying to install the CQLClient.

    To Reproduce Commands to reproduce the behavior:

    1. sudo bash -c 'curl -L "https://linux.gridb.io/cql" |
      tar xzv -C /usr/local/bin/ --strip-components=1'
    2. I get could not resolve host linux.gridb.io.

    Expected behavior The CQL Client gets installed.

    Screenshots

    image Desktop (please complete the following information):

    • OS: Ubuntu 20.04 (WSL 2 on WIndows 10 )
  • Bump github.com/ethereum/go-ethereum from 1.8.27 to 1.10.17

    Bump github.com/ethereum/go-ethereum from 1.8.27 to 1.10.17

    Bumps github.com/ethereum/go-ethereum from 1.8.27 to 1.10.17.

    Release notes

    Sourced from github.com/ethereum/go-ethereum's releases.

    Ploitari (v1.10.17)

    This is a maintenance release. This release contains a lot of work in preparation for The Merge, and work for an upcoming change to the way state is stored in go-ethereum.

    This release also adds a new tool to convert 'legacy' receipts into a newer format. During startup, geth will check the database and tell you if you need to perform the conversion. Converting receipts is only needed if geth's ancients database has not been resynced from scratch during the last couple of years. It is recommended to back-up your receipts freezer table (ancients/receipts*) before performing the conversion.

    Compatibility note about core/types: For optimization purposes, types.Header and other types in this package now implement the rlp.Encoder interface. This change can cause incompatibilities because the new method is implemented with pointer receiver. Attempting to RLP-encode unadressable (i.e. non-pointer) values of type Header does not work anymore and will result in an error.

    Change Log

    For a full rundown of the changes please consult the Geth 1.10.17 release milestone.


    As with all our previous releases, you can find the:

    Osun (v1.10.16)

    The focus of this release is bugfixes.

    Bugfixes

    • Block tracing via debug.traceBlockByHash has sometimes produced inconsistent/corrupt results. Fixed via (#24286).
    • The --whitelist CLI parameter functionality was broken in v1.10.14, and is fixed in this release (#24210).
    • A bug was introduced, and subsequently fixed, which could cause data corruption during mining (#24349).
    • When signing complex datatypes in EIP712-type data, the signing-hash was incorrect. Fixed via (#24220).
    • Evm execution times exported via metrics, were sometimes incorrect. Fixed in (#24304).
    • Range prover edgecases found and fixed (#24266, #24257).
    • Fix an error related to HTTP2 handling (#24292).
    • A lot of spleling-mistkaes and issues related to correctness were fixed (#24194, #24196, #24198, #24205, #24207, #24244, #24270, #24271, #24224, #24372, #24323, #24289, #24263 and #24211).

    New features

    • Work on The Merge includes support for RANDOM opcode (#24141) and various other internal refactorings (#24328, #24280, #24236, #23256).
    • The devp2p binary now supports doing snap/v1 protocol testing against a remote node, which can be used for Hive-testing (#24276).
    • New diagnostic command to show database metadata (#23900)
    • ethclient support for CallContractAtHash (#24355).

    ... (truncated)

    Commits
    • 25c9b49 params: go-ethereum v1.10.17 stable
    • de6a113 eth/catalyst: only apply block if we actually have the state (#24598)
    • b502b6a cmd/geth: change to non-fatal error message when legacy receipt storage is no...
    • 1027cb5 Merge pull request #24605 from karalabe/revert-setting-ttd
    • b06e8c4 core/vm: fix sstore gas comment type (#24583)
    • b45d82e core: set ttd override on all chain variations
    • 0fffd3a build: close sftp connection when done (#24593)
    • eb3ebce internal/build: exit sftp upload (#24590)
    • d1c243f internal/build: prevent travis timeout during ppa upload (#24589)
    • 19b9cf7 internal/build: show ppa upload process stdout on stdout (#24588)
    • 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.

LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.
LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.

LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability. LinDB stores all monitoring data of ELEME Inc, there is 88TB incremental writes per day and 2.7PB total raw data.

Jan 1, 2023
"Go SQL DB" is a relational database that supports SQL queries for research purposes

A pure golang SQL database for database theory research

Jan 6, 2023
A high performance NoSQL Database Server powered by Go
A high performance NoSQL Database Server powered by Go

LedisDB Ledisdb is a high-performance NoSQL database library and server written in Go. It's similar to Redis but store data in disk. It supports many

Dec 26, 2022
decentralized,distributed,peer-to-peer database.

P2PDB 中文 | English 简介 P2PDB(p2p数据库),是一个去中心化、分布式、点对点数据库、P2PDB使用IPFS为其数据存储和IPFS Pubsub自动与对等方同步数据。P2PDB期望打造一个去中心化的分布式数据库,使P2PDB 成为去中心化应用程序 (dApps)、区块链应用程

Jan 1, 2023
Beerus-DB: a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic operations

Beerus-DB · Beerus-DB is a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic

Oct 29, 2022
High-performance Redis-Server multi-threaded framework, based on rawepoll model.
High-performance Redis-Server multi-threaded framework, based on rawepoll model.

RedHub High-performance Redis-Server multi-threaded framework, based on RawEpoll model. Ultra high performance Fully multi-threaded support Low CPU re

Dec 18, 2022
CockroachDB - the open source, cloud-native distributed SQL database.
CockroachDB - the open source, cloud-native distributed SQL database.

CockroachDB is a cloud-native SQL database for building global, scalable cloud services that survive disasters. What is CockroachDB? Docs Quickstart C

Jan 2, 2023
LBADD: An experimental, distributed SQL database
LBADD: An experimental, distributed SQL database

LBADD Let's build a distributed database. LBADD is an experimental distributed SQL database, written in Go. The goal of this project is to build a dat

Nov 29, 2022
A course to build the SQL layer of a distributed database.

TinySQL TinySQL is a course designed to teach you how to implement a distributed relational database in Go. TinySQL is also the name of the simplifed

Jan 8, 2023
☄ The golang convenient converter supports Database to Struct, SQL to Struct, and JSON to Struct.
☄ The golang convenient converter supports Database to Struct, SQL to Struct, and JSON to Struct.

Gormat - Cross platform gopher tool The golang convenient converter supports Database to Struct, SQL to Struct, and JSON to Struct. 中文说明 Features Data

Dec 20, 2022
Dolt is a SQL database that you can fork, clone, branch, merge, push and pull just like a git repository.

Dolt is a SQL database that you can fork, clone, branch, merge, push and pull just like a git repository. Connect to Dolt just like any MySQL database to run queries or update the data using SQL commands. Use the command line interface to import CSV files, commit your changes, push them to a remote, or merge your teammate's changes.

Dec 31, 2022
DonutDB: A SQL database implemented on DynamoDB and SQLite

DonutDB: A SQL database implemented on DynamoDB and SQLite

Dec 21, 2022
This is a simple Golang application that executes SQL commands to clean up a mirror node's database.

This is a simple Golang application that executes SQL commands to clean up a mirror node's database.

Jan 24, 2022
Owl is a db manager platform,committed to standardizing the data, index in the database and operations to the database, to avoid risks and failures.

Owl is a db manager platform,committed to standardizing the data, index in the database and operations to the database, to avoid risks and failures. capabilities which owl provides include Process approval、sql Audit、sql execute and execute as crontab、data backup and recover .

Nov 9, 2022
This is a simple graph database in SQLite, inspired by "SQLite as a document database".

About This is a simple graph database in SQLite, inspired by "SQLite as a document database". Structure The schema consists of just two structures: No

Jan 3, 2023
Hard Disk Database based on a former database

Hard Disk Database based on a former database

Nov 1, 2021
Simple key value database that use json files to store the database

KValDB Simple key value database that use json files to store the database, the key and the respective value. This simple database have two gRPC metho

Nov 13, 2021
Native, Protobuf & SQL-compliant objects used by offensive security tools.

Attacked Infrastructure Modular Specification (AIMS) Overview This repository aims to gather various declarations/specification of elements faced or n

Nov 19, 2021
An embedded key/value database for Go.

bbolt bbolt is a fork of Ben Johnson's Bolt key/value store. The purpose of this fork is to provide the Go community with an active maintenance and de

Jan 1, 2023