The MySQL Cluster Autopilot Management with GTID and Raft

Github Actions Status Github Actions Status Github Actions Status Go Report Card codecov.io

Xenon

Overview

Xenon is a MySQL HA and Replication Management tool using Raft protocol.

Xenon has many cool features, such as:

  • Fast Failover with no lost transactions
  • Streaming & Speed-Unmatched backup/restore
  • MySQL Operation and Maintenance
  • No central control and easy-to-deploy
  • As a Cloud App

Architecture

Documentation

Use case

Xenon is production ready, it has been used in production like:

  • MySQL Plus - A Highly Available MySQL Clusters
  • RadonDB - A cloud-native MySQL database for building global, scalable cloud services

Issues

The integrated github issue tracker is used for this project.

License

Xenon is released under the GPLv3. See LICENSE

Owner
RadonDB
RadonDB = NewSQL + MySQL
RadonDB
Comments
  • *: add http api for adapt kubernetes

    *: add http api for adapt kubernetes

    [summary] By using api can fix the kubernetes container memory increase unexpected bug.

    https://github.com/zhyass/mysql-operator/issues/17

    Before: https://github.com/zhyass/mysql-operator/blob/master/cluster/syncer/status.go#L270

    memory: 230+ M

    After:

    https://github.com/zhyass/radondb-mysql-kubernetes/blob/meg/cluster/syncer/status.go#L281

    memory: 17M

  • [question] 基于xenon的mysql集群vip没有指定主库

    [question] 基于xenon的mysql集群vip没有指定主库

    拓扑描述: 192.168.36.115 master(主机名)----(主库) 192.168.36.116 slave (主机名)----(从库1) 192.168.36.117 normal(主机名)----(从库2)

    vip:192.168.36.200

    下面是3节点的配置文件: xenon1.txt xenon2.txt xenon3.txt

    下面是keepalived配置文件: keepalived1.txt keepalived2.txt

    集群状态 : 1111

    问题描述: 1111 因为每次通过VIPvip打开一个新的连接,mysql主机都改变,没有办法确通过VIP连接的一定是主库,而且后期我想通过proxysql做读写分离,proxysql是基于端口或者sql语句进行读写分离。但是我的mysql集群都基于xenon的搭建的,只有一个VIP和一个端口进行连接的,而且是访问后端mysql是轮询模式,怎么实现读写分离?

    请研发氙的同学帮忙解决一下。 thanks

  • server: add -r option on startup to specify the initial role

    server: add -r option on startup to specify the initial role

    We don't want to affect MySQL services when we upgrade xenon, so after the upgrade need to let the old LEADER continue to run as the LEADER and skip leaderStartShellCommand.

  • 请教一个Failover问题

    请教一个Failover问题

    1

         Master(A)
    -----/------\----------网络分区----
    Slave1(B)  Slave2(C)
    

    如果出现网络分区, Master仍然存活, 但是Master无法和Slave1,2通信, A无法和B,C通信. 但是应用仍然可以访问Master, 但由于不满足半同步最小从库数, 所有写入都被阻塞等待ack, 此时Xenon会如何处理?

    2

         Master(A)
    -----/------\----------网络分区----
    Slave1(B)  Slave2(C)
    

    如果出现网络分区, Master hang(可能由于内核bug, 任何请求都无法响应), 且Master无法和Slave1,2通信, A无法和B,C通信. 应用也不能访问Master, 此时Xenon会如何处理?

    3

                  Master(A) ---> Slave4(E)
    -------/------|------\----------网络分区----
    Slave1(B)  Slave2(C)  Slave3(D)
    

    如果出现网络分区, Master和Slave4仍然存活, 但无法和Slave1,2,3通信, A,E无法和B,C,D通信, 应用仍然可以访问Master, 满足半同步最小从库数, 写入数据可以提交, 此时Xenon会如何处理?

  • patch: increase Leader GetGTID timeout

    patch: increase Leader GetGTID timeout

    When mysqld is under high pressure, the value of timeout that the leader execute GetGTID each time should be different.

    The value of timeout needs to increase as the number of raft vote count. This case has no effect on the leader when the pressure is normal.

    If raft role is follower or candidate, it's no need to change the timeout.

  • Xenon集群除了Master以外,另外两个节点log-bin无法备份

    Xenon集群除了Master以外,另外两个节点log-bin无法备份

    查看集群状态

    ./xenoncli cluster mysql +-------------------+----------+-------+-----------+------------------------+----------------+ | ID | Raft | Mysql | Option | Master_Log_File/Pos | IO/SQL_Running | Seconds_Behind | +-------------------+----------+-------+-----------+------------------------+----------------+ | 168.5.80.101:8801 | LEADER | ALIVE | READWRITE | [mysql-bin.000012/194] | [true/true] |
    +-------------------+----------+-------+-----------+------------------------+----------------+ | 168.5.80.110:8801 | FOLLOWER | ALIVE | READONLY | [/4] | [false/true] | +-------------------+----------+-------+-----------+------------------------+----------------+ | 168.5.80.94:8801 | FOLLOWER | ALIVE | READONLY | [/4] | [false/true] |
    +-------------------+----------+-------+-----------+------------------------+----------------+

    无法同步Slave节点日志

    2018/08/30 09:21:47.256256 [INFO] server.mysql.wait.for.work[maxwait:60s] 2018/08/30 09:21:47.259514 [INFO] mysql.slave.status:&{ 4 false No false No befc84a7-ab60-11e8-bf7c-005056896b97:1-8 } 2018/08/30 09:21:47.259545 [INFO] server.mysql.gtid:{Master_Log_File: Read_Master_Log_Pos:4 Relay_Master_Log_File: Slave_IO_Running:false Slave_IO_Running_Str:No Slave_SQL_Running:false Slave_SQL_Running_Str:No Retrieved_GTID_Set: Executed_GTID_Set:befc84a7-ab60-11e8-bf7c-005056896b97:1-8 Seconds_Behind_Master: Slave_SQL_Running_State: Last_Error: Last_IO_Error: Last_SQL_Error:} 2018/08/30 09:21:47.259549 [INFO] server.mysql.set.to.READONLY 2018/08/30 09:21:47.259802 [INFO] server.mysql.start.slave 2018/08/30 09:21:47.410705 [INFO] server.mysql.check.replication.user... 2018/08/30 09:21:47.410993 [INFO] server.mysql.setup.done 2018/08/30 09:21:47.410999 [INFO] server.prepare.setup.RPC 2018/08/30 09:21:47.411180 [INFO] server.RPC.setup.done 2018/08/30 09:21:47.411209 [INFO] mysqld[/etc/my.cnf].monitor.start... 2018/08/30 09:21:47.411216 [INFO] mysql[localhost:3306].startping... 2018/08/30 09:21:47.411224 [INFO] FOLLOWER[ID:168.5.80.94:8801, V:0, E:0].raft.start... 2018/08/30 09:21:47.411277 [WARNING] xrpc.Start.listening.on[168.5.80.94:8801] 2018/08/30 09:21:47.411280 [INFO] server.start.success... 2018/08/30 09:21:47.411283 [INFO] xenon.start.success...

    配置

    三个节点xenon配置几乎一样

        "replication":
        {
                "user":"root",
                "passwd":"123456"
        },
        "backup":
        {
                "ssh-host":"168.5.80.94",
                "ssh-user":"root",
                "ssh-passwd":"",
                "basedir":"/usr/local/mysql",
                "backupdir":"/opt/xenon/data/mysql",
                "xtrabackup-bindir":"/opt/xenon",
                "backup-iops-limits":100000,
                "backup-use-memory": "2GB",
                "backup-parallel": 2
        },
    

    其他

    不知道怎么排查问题,以及提供什么信息才能表述清楚。

  • xbase: add retry times for set listener #124

    xbase: add retry times for set listener #124

    [summary] We want to use the publishNotReadyAddresses parameter in kubernetes to be able to access pods even if the pod is not ready. But even if this parameter is used, we may still need to wait 30s after pod creation. So we add retrys 30s for set the listener.

    Just merge into the branch feature_adapt_k8s

  • raft: candidate with newer data quickly keep up with newer viewid

    raft: candidate with newer data quickly keep up with newer viewid

    In extreme cases, the situation used to recur within some minutes: Node1(more data), Node2(bigger viewid), Node3(less data & smaller viewid) InvalidViewID Node1: F --------------> C --------------> F -> ... -> C InvalidGITD Node2: C --------------> F --------------> C -> ... -> F The candidate with newer data has no chance to update viewid.

  • xlog: update xlog module, output log with filename info #113

    xlog: update xlog module, output log with filename info #113

    [summary] add short filename when output log info.

    [test case] src/xbase/xlog/options.go src/xbase/xlog/xlog.go

    [patch codecov] xbase/xlog 0.052s coverage: 70.9% of statements

  • [feature] Add invalid state

    [feature] Add invalid state

    Summary

    MySQL ueses Engine commit(If MySQL trx prepare and flush to data, it will be committed. ) to protect data security. But it may not be suite for MySQL Cluster.

    Fix

    1. Add invalid state (Invalid should not send a agree vote)
    2. If check Engine commit , set the node status to invalid(use gtid_sub function, so we also need check gtid when raft election)

    Question

    1. If xenon dead, the state may be confusion, so we should record all state into a file.
  • xenon -c /etc/xenon/xenon.json启动报错

    xenon -c /etc/xenon/xenon.json启动报错

    用/usr/local/xenon/bin/xenon -c /etc/xenon/xenon.json > /etc/xenon/log/xenon.log 2>&1 & 启动时报错: cat /etc/xenon/log/xenon.log xenon:[{Tag: Time:2022/08/04 04:48:36 Git: GoVersion:go1.12.4 Platform:linux amd64}] panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x776ef6]

    goroutine 1 [running]: xbase/xlog.(*Log).Panic(0x0, 0x931a74, 0x1a, 0xc0000c9e28, 0x1, 0x1) /usr/local/xenon/src/xbase/xlog/xlog.go:137 +0x26 main.main() /usr/local/xenon/src/xenon/xenon.go:54 +0x3de

    xenon版本是1.1.4,go版本是1.12.4(换成go1.18.1问题依旧)

  • xenon mysql rebuildme 报错

    xenon mysql rebuildme 报错

    环境信息: centos7.6 perconna mysql 5.7.39

    xenon版本信息: 最新版 [mysql@Xenon-3 bin]$ ./xenoncli version xenoncli:[{Tag: Time:2022/11/22 08:04:45 Git: GoVersion:go1.17.12 Platform:linux amd64}]

    xenon mysql集群状态: image

    报错信息如下image

    [mysql@Xenon-3 bin]$ /boss/soft/xenon/bin/xenoncli mysql backup --to=/u01/backup 2022/12/08 15:55:14.144046 [WARNING] rebuildme.found.best.slave[192.168.100.102:8801].leader[192.168.100.101:8801] 2022/12/08 15:55:14.144107 [WARNING] S1-->found.the.best.backup.host[192.168.100.102:8801].... 2022/12/08 15:55:14.148955 [WARNING] S2-->rm.and.mkdir.backupdir[/u01/backup] 2022/12/08 15:55:14.148971 [WARNING] S3-->xtrabackup.begin.... 2022/12/08 15:55:14.149458 [WARNING] rebuildme.backup.req[&{From: BackupDir:/u01/backup SSHHost:192.168.100.103 SSHUser:mysql SSHPasswd:mysql SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[192.168.100.102:8801] 2022/12/08 15:55:33.293809 [WARNING] S3-->xtrabackup.end.... 2022/12/08 15:55:33.293827 [WARNING] S4-->apply-log.begin.... 2022/12/08 15:55:46.412498 [WARNING] S4-->apply-log.end.... 2022/12/08 15:55:46.412509 [WARNING] completed OK! 2022/12/08 15:55:46.412512 [WARNING] backup.all.done.... [mysql@Xenon-3 bin]$ /boss/soft/xenon/bin/xenoncli mysql rebuildme --from=192.168.100.102:8801 2022/12/08 15:56:07.973953 [WARNING] =====prepare.to.rebuildme===== IMPORTANT: Please check that the backup run completes successfully. At the end of a successful backup run innobackupex prints "completed OK!".

    2022/12/08 15:56:07.974236 [WARNING] S1-->check.raft.leader 2022/12/08 15:56:07.996902 [WARNING] S2-->prepare.rebuild.from[192.168.100.102:8801].... 2022/12/08 15:56:08.044707 [WARNING] S3-->check.bestone[192.168.100.102:8801].is.OK.... 2022/12/08 15:56:08.044725 [WARNING] S4-->set.learner 2022/12/08 15:56:08.045802 [WARNING] S5-->stop.monitor 2022/12/08 15:56:08.046748 [WARNING] S6-->kill.mysql 2022/12/08 15:56:08.110453 [WARNING] S7-->check.bestone[192.168.100.102:8801].is.OK.... 2022/12/08 15:56:08.227050 [WARNING] S8-->clear.datadir[/u01/backup] 2022/12/08 15:56:08.237190 [WARNING] S9-->xtrabackup.begin.... 2022/12/08 15:56:08.237788 [WARNING] rebuildme.backup.req[&{From: BackupDir:/u01/backup SSHHost:192.168.100.103 SSHUser:mysql SSHPasswd:mysql SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[192.168.100.102:8801] 2022/12/08 15:56:22.364753 [WARNING] S9-->xtrabackup.end.... 2022/12/08 15:56:22.364771 [WARNING] S10-->apply-log.begin.... 2022/12/08 15:56:31.849770 [WARNING] S10-->apply-log.end.... 2022/12/08 15:56:31.849780 [WARNING] S11-->start.mysql.begin... 2022/12/08 15:56:31.850831 [WARNING] S11-->start.mysql.end... 2022/12/08 15:56:31.850843 [WARNING] S12-->wait.mysqld.running.begin.... 2022/12/08 15:56:34.878475 [WARNING] wait.mysqld.running... 2022/12/08 15:56:37.893701 [WARNING] wait.mysqld.running... 2022/12/08 15:56:37.906427 [WARNING] S12-->wait.mysqld.running.end.... 2022/12/08 15:56:37.906441 [WARNING] S13-->wait.mysql.working.begin.... 2022/12/08 15:56:40.917830 [WARNING] wait.mysql.working... 2022/12/08 15:56:40.918250 [WARNING] S13-->wait.mysql.working.end.... 2022/12/08 15:56:40.918259 [WARNING] S14-->stop.and.reset.slave.begin.... 2022/12/08 15:56:41.024755 [WARNING] S14-->stop.and.reset.slave.end.... 2022/12/08 15:56:41.024768 [WARNING] S15-->reset.master.begin.... 2022/12/08 15:56:41.028661 [WARNING] S15-->reset.master.end.... mysql.go:482: unexpected error: info.file.content.invalid[mysql_binlog.000002 3581 ]

    2022/12/08 15:56:41.036228 [PANIC] info.file.content.invalid[mysql_binlog.000002 3581 ] panic: [PANIC] info.file.content.invalid[mysql_binlog.000002 3581 ]

    goroutine 1 [running]: xbase/xlog.(*Log).Panic(0xc0000e81d0, {0x7989c3, 0x7aa7b7}, {0xc0000d9ad0, 0xc0000d9ae0, 0x3}) /boss/soft/xenon/src/xbase/xlog/xlog.go:142 +0xc8 cli/cmd.ErrorOK({0x8130a0, 0xc000198650}) /boss/soft/xenon/src/cli/cmd/common.go:35 +0x1af cli/cmd.mysqlRebuildMeCommandFn(0xc0000fbd40, {0xc0000e8260, 0x1, 0x1}) /boss/soft/xenon/src/cli/cmd/mysql.go:482 +0x15df vendor/github.com/spf13/cobra.(*Command).execute(0xc0000fbd40, {0xc0000e8240, 0x1, 0x1}) /boss/soft/xenon/src/vendor/github.com/spf13/cobra/command.go:603 +0x3a7 vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xa5c740) /boss/soft/xenon/src/vendor/github.com/spf13/cobra/command.go:689 +0x24b vendor/github.com/spf13/cobra.(*Command).Execute(...) /boss/soft/xenon/src/vendor/github.com/spf13/cobra/command.go:648 main.main() /boss/soft/xenon/src/cli/cli.go:43 +0x25

  • 日志报错

    日志报错

    主节点xenon启动之后日志报错:

    2022/08/04 20:55:44.287645 [ERROR] server.mysql.start.slave.error[Error 1200: The server is not configured as slave; fix in config file or with CHANGE MASTER TO] 2022/08/04 20:55:44.287653 [INFO] server.mysql.check.replication.user... 2022/08/04 20:55:44.287816 [INFO] server.mysql.setup.done 2022/08/04 20:55:44.287821 [INFO] server.prepare.setup.RPC 2022/08/04 20:55:44.288128 [INFO] server.RPC.setup.done 2022/08/04 20:55:44.288148 [INFO] mysqld[/data/etc/my3306.cnf].monitor.start... 2022/08/04 20:55:44.288163 [INFO] mysql[127.0.0.1:3306].startping... 2022/08/04 20:55:44.288168 [INFO] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].raft.start... 2022/08/04 20:55:44.288213 [WARNING] xrpc.Start.listening.on[192.168.248.134:8801] 2022/08/04 20:55:44.288217 [INFO] server.start.success... 2022/08/04 20:55:44.288219 [INFO] xenon.start.success... 2022/08/04 20:55:44.288392 [INFO] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].start.CheckBrainSplit 2022/08/04 20:55:44.288482 [WARNING] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].state.init 2022/08/04 20:55:44.295962 [ERROR] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].leaderStopShellCommand[[-c sudo /usr/sbin/ip a d 192.168.248.100/ 24 dev ens33]].out[bash -c sudo /usr/sbin/ip a d 192.168.248.100/24 dev ens33RTNETLINK answers: Cannot assign requested address ].error[exit status 2] 2022/08/04 20:55:44.295975 [ERROR] FOLLOWER[ID:192.168.248.134:8801, V:0, E:0].stopShellCommand.error[exit status 2]

    注:启动顺序是挨个节点启动的,然后用xenoncli cluster add 192.168.248.134:8801,192.168.248.135:8801,192.168.248.136:8801添加集群 image 但是就是因为vip没挂载起来,所有节点都为readonly状态 根据报错提示,vip为啥挂载不起来呢?

  • xenoncli cluster status报错

    xenoncli cluster status报错

    xenoncli cluster status查看集群状态时报错: cluster.go:224: unexpected error: open /home/mysql/config.path: no such file or directory

    2022/08/04 17:45:11.955666 [PANIC] open /home/mysql/config.path: no such file or directory panic: [PANIC] open /home/mysql/config.path: no such file or directory

    goroutine 1 [running]: xbase/xlog.(*Log).Panic(0xc0000f82d0, 0x8d17ba, 0x2, 0xc0000b3b18, 0x1, 0x1) /usr/local/xenon/src/xbase/xlog/xlog.go:142 +0x153 cli/cmd.ErrorOK(0x9711c0, 0xc0000fe990) /usr/local/xenon/src/cli/cmd/common.go:35 +0x246 cli/cmd.clusterStatusCommandFn(0xc000154fc0, 0xcb1a20, 0x0, 0x0) /usr/local/xenon/src/cli/cmd/cluster.go:224 +0x5b vendor/github.com/spf13/cobra.(*Command).execute(0xc000154fc0, 0xcb1a20, 0x0, 0x0, 0xc000154fc0, 0xcb1a20) /usr/local/xenon/src/vendor/github.com/spf13/cobra/command.go:603 +0x23e vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xc8c740, 0xc0000b3f78, 0xc0000b3f88, 0x4073af) /usr/local/xenon/src/vendor/github.com/spf13/cobra/command.go:689 +0x2be vendor/github.com/spf13/cobra.(*Command).Execute(...) /usr/local/xenon/src/vendor/github.com/spf13/cobra/command.go:648 main.main() /usr/local/xenon/src/cli/cli.go:43 +0x32 我明明是echo "/etc/xenon/xenon.json" > /usr/local/xenon/bin/config.path,为什么要去找/home/mysql/config.path呢?

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
IceFireDB - Distributed disk storage system based on Raft and RESP protocol.
IceFireDB - Distributed disk storage system based on Raft and RESP protocol.

Distributed disk storage database based on Raft and Redis protocol.

Dec 27, 2022
Virsas-mod-db - Quick way to init mysql, postgres and redis connection from multiple services without duplicating the code

Quick way to init mysql, postgres and redis connection from multiple services without duplicating the code.

Jan 23, 2022
TiDB is an open source distributed HTAP database compatible with the MySQL protocol
TiDB is an open source distributed HTAP database compatible with the MySQL protocol

Slack Channel Twitter: @PingCAP Reddit Mailing list: lists.tidb.io For support, please contact PingCAP What is TiDB? TiDB ("Ti" stands for Titanium) i

Jan 9, 2023
A MySQL-compatible relational database with a storage agnostic query engine. Implemented in pure Go.

go-mysql-server is a SQL engine which parses standard SQL (based on MySQL syntax) and executes queries on data sources of your choice. A simple in-memory database and table implementation are provided, and you can query any data source you want by implementing a few interfaces.

Dec 27, 2022
RadonDB is an open source, cloud-native MySQL database for building global, scalable cloud services

OverView RadonDB is an open source, Cloud-native MySQL database for unlimited scalability and performance. What is RadonDB? RadonDB is a cloud-native

Dec 31, 2022
Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding.

Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding.

Jan 4, 2023
Run MySQL Database on Docker

Run MySQL Database on Docker cd <path>/resources/docker sudo docker-compose up (sudo for linux) This will start a container MySQL Database running on

Jan 1, 2022
Nipo is a powerful, fast, multi-thread, clustered and in-memory key-value database, with ability to configure token and acl on commands and key-regexes written by GO

Welcome to NIPO Nipo is a powerful, fast, multi-thread, clustered and in-memory key-value database, with ability to configure token and acl on command

Dec 28, 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
Being played at The Coffee House and try to find and play it on Spotify
Being played at The Coffee House and try to find and play it on Spotify

The Coffee House Muzik Follow the music that is being played at The Coffee House and try to find and play it on Spotify. Installation Clone this proje

May 25, 2022
Walrus - Fast, Secure and Reliable System Backup, Set up in Minutes.
Walrus - Fast, Secure and Reliable System Backup, Set up in Minutes.

Walrus is a fast, secure and reliable backup system suitable for modern infrastructure. With walrus, you can backup services like MySQL, PostgreSQL, Redis, etcd or a complete directory with a short interval and low overhead. It supports AWS S3, digitalocean spaces and any S3-compatible object storage service.

Jan 5, 2023
🔑A high performance Key/Value store written in Go with a predictable read/write performance and high throughput. Uses a Bitcask on-disk layout (LSM+WAL) similar to Riak.

bitcask A high performance Key/Value store written in Go with a predictable read/write performance and high throughput. Uses a Bitcask on-disk layout

Sep 26, 2022
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support

BuntDB is a low-level, in-memory, key/value store in pure Go. It persists to disk, is ACID compliant, and uses locking for multiple readers and a sing

Dec 30, 2022
Concurrency-safe Go caching library with expiration capabilities and access counters

cache2go Concurrency-safe golang caching library with expiration capabilities. Installation Make sure you have a working Go environment (Go 1.2 or hig

Dec 31, 2022
groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.

groupcache Summary groupcache is a distributed caching and cache-filling library, intended as a replacement for a pool of memcached nodes in many case

Dec 29, 2022
Scalable datastore for metrics, events, and real-time analytics

InfluxDB InfluxDB is an open source time series platform. This includes APIs for storing and querying data, processing it in the background for ETL or

Jan 5, 2023
Kivik provides a common interface to CouchDB or CouchDB-like databases for Go and GopherJS.

Kivik Package kivik provides a common interface to CouchDB or CouchDB-like databases. The kivik package must be used in conjunction with a database dr

Dec 29, 2022
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.

NutsDB English | 简体中文 NutsDB is a simple, fast, embeddable and persistent key/value store written in pure Go. It supports fully serializable transacti

Jan 1, 2023