All Projects → segmentio → Ctlstore

segmentio / Ctlstore

Licence: mit
Control Data Store

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Ctlstore

Electrocrud
Database CRUD Application Built on Electron | MySQL, Postgres, SQLite
Stars: ✭ 1,267 (+640.94%)
Mutual labels:  database, mysql, sqlite3
Scalardb
Universal transaction manager
Stars: ✭ 178 (+4.09%)
Mutual labels:  database, mysql, distributed-systems
Grimoire
Database access layer for golang
Stars: ✭ 151 (-11.7%)
Mutual labels:  database, mysql, sqlite3
Sqlboiler
Generate a Go ORM tailored to your database schema.
Stars: ✭ 4,497 (+2529.82%)
Mutual labels:  database, mysql, sqlite3
Qb
The database toolkit for go
Stars: ✭ 524 (+206.43%)
Mutual labels:  database, mysql, sqlite3
Denodb
MySQL, SQLite, MariaDB, PostgreSQL and MongoDB ORM for Deno
Stars: ✭ 498 (+191.23%)
Mutual labels:  database, mysql, sqlite3
Mikro Orm
TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL and SQLite databases.
Stars: ✭ 3,874 (+2165.5%)
Mutual labels:  database, mysql, sqlite3
Database rewinder
minimalist's tiny and ultra-fast database cleaner
Stars: ✭ 685 (+300.58%)
Mutual labels:  database, mysql, sqlite3
Sqlcheck
Automatically identify anti-patterns in SQL queries
Stars: ✭ 2,062 (+1105.85%)
Mutual labels:  database, mysql, sqlite3
Deno Sqlite
Deno SQLite module
Stars: ✭ 151 (-11.7%)
Mutual labels:  database, sqlite3
Slimdump
A tool for creating configurable dumps of large MySQL-databases.
Stars: ✭ 151 (-11.7%)
Mutual labels:  database, mysql
Linq2db
Linq to database provider.
Stars: ✭ 2,211 (+1192.98%)
Mutual labels:  database, mysql
Etcd Cloud Operator
Deploying and managing production-grade etcd clusters on cloud providers: failure recovery, disaster recovery, backups and resizing.
Stars: ✭ 149 (-12.87%)
Mutual labels:  database, distributed-systems
Myproxy
A sharding proxy for MYSQL databases
Stars: ✭ 153 (-10.53%)
Mutual labels:  database, mysql
Querybuilder
SQL query builder, written in c#, helps you build complex queries easily, supports SqlServer, MySql, PostgreSql, Oracle, Sqlite and Firebird
Stars: ✭ 2,111 (+1134.5%)
Mutual labels:  database, mysql
Quizbook
An android app with google material design to play quizzes in different categories.
Stars: ✭ 156 (-8.77%)
Mutual labels:  database, mysql
Cmd
Command line tools for database operation written by Go, moved to https://gitea.com/xorm/cmd
Stars: ✭ 154 (-9.94%)
Mutual labels:  mysql, sqlite3
Polluter
The easiest solution to seed database with Go
Stars: ✭ 146 (-14.62%)
Mutual labels:  database, mysql
Quill
Compile-time Language Integrated Queries for Scala
Stars: ✭ 1,998 (+1068.42%)
Mutual labels:  database, mysql
Rom Sql
SQL support for rom-rb
Stars: ✭ 169 (-1.17%)
Mutual labels:  mysql, sqlite3

ctlstore

ctlstore is a distributed data store that provides very low latency, always-available, "infinitely" scalable reads. The underlying mechanism for this is a SQLite database that runs on every host called the LDB. A daemon called the Reflector plays logged writes from a central database into the LDB. As this involves replicating the full data store on every host, it is only practical for situations where the write rate (<100/s total) and data volumes (<10GB total) are low.

Recommended reading:

Security

Note that because ctlstore replicates the central database to an LDB on each host with a reflector, that LDB contains all of the control data. In its current state that means that any application which has access to the LDB can access all of the data within it.

The implications of this are that you should not store data in ctlstore that should only be accessed by a subset of the applications that can read the LDB. Things like secrets, passwords, and so on, are an example of this.

The ctlstore system is meant to store non-sensitive configuration data.

Development

A MySQL database is needed to run the tests, which can be started using Docker Compose:

$ docker-compose up -d

Run the tests using make:

$ make test
# For more verbosity (`Q=` trick applies to all targets)
$ make test Q=

A single ctlstore binary is used for all functionality. Build it with make:

$ make build

Sync non-stdlib dependencies and pull them into ./vendor

$ make deps

Ctlstore uses Go modules. To build a docker image, the dependencies must be vendored first:

$ make vendor

Tying the Pieces Together

This project includes a docker-compose file docker-compose-example.yml. This initializes and runs

  • mysql (ctlstore SoR)
  • executive service (guards the ctlstore SoR)
  • reflector (builds the LDB)
  • heartbeat (mutates a ctlstore table periodically)
  • sidecar (provides HTTP API access to ctlstore reader API)
  • supervisor (periodically snapshots LDB)

To start it, run:

$ make deps
$ make vendor
$ docker-compose -f docker-compose-example.yml up -d

For more information be sure to check out the Getting Started guide.

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].