1. 首页
  2. SEO优化教程
  3. 站长新闻
  4. Rqlite: 基于SQLite的轻量级分布式关系数据库。

Rqlite: 基于SQLite的轻量级分布式关系数据库。

rqlite为您提供了一个坚固的fault-tolerant复制关系数据库的功能,但安装、部署和操作非常简单。有了它,您就有了一个轻量级和可靠的分布式关系数据存储。可以考虑etcd或consur,但也可以使用关系数据建模。您可以使用rqlite作为更大系统的一部分,作为一些关键关系数据的中心存储,而不必运行更大、更复杂的分布式数据库。

rqlite是一个轻量级的分布式关系数据库,它使用SQLite作为其存储引擎。形成一个集群是非常简单的,它优雅地处理领导人选举,并容忍机器故障,包括领导人。rqlite可用于Linux、OSX和Microsoft Windows。

查看rqlite常见问题解答。

Why?

rqlite为您提供了一个坚固的fault-tolerant复制关系数据库的功能,但安装、部署和操作非常简单。有了它,您就有了一个轻量级和可靠的分布式关系数据存储。可以考虑etcd或consur,但也可以使用关系数据建模。

您可以使用rqlite作为更大系统的一部分,作为一些关键关系数据的中心存储,而不必运行更大、更复杂的分布式数据库。

最后,如果您对了解分布式系统的实际工作方式感兴趣,那么rqlite是一个很好的研究示例。在它的设计和实现中已经进行了大量的思考,在各个组件之间进行了明确的分离,包括存储、分布式共识和API。

How?

rqlite使用Raft在SQLite数据库的所有实例中达成一致,确保对系统所做的每一个更改都是对SQLite数据库的仲裁,或者根本没有。你可以在这里了解更多的设计。

Key features

  • 部署非常简单,无需单独安装SQLite。

  • 完全复制的production-gradeSQL数据库。

  • Production-grade分布式共识系统。

  • easy-to-useHTTP(S)API,包括leader-redirection和bulk-update支持。还有一个command-line接口,还有各种客户端库。

  • 发现服务支持,允许动态创建群集。

  • 广泛的安全和加密支持,包括node-to-node加密。

  • 读取一致性级别的选择。

  • 可选的read-only(non-voting)节点,可以为系统增加读取可伸缩性。

  • 事务支持的一种形式。

  • Hot backups.

项目地址https://github.com/rqlite/rqlite

Quick Start

提供详细的文档。您还可以查看rqliteGoogle Group。

在OSX和Linux上运行的最快方法是下载pre-built版本二进制文件。您可以在Github releases页面上找到这些二进制文件。如果你喜欢Windows,你可以在这里下载最新版本。安装后,可以启动单个rqlite节点,如下所示:

rqlited ~/node.1

此单个节点将自动成为引线。您可以将-h传递到rqlited以列出所有配置选项。

Docker

或者,您可以通过docker pull rqlite/rqlite获取最新版本。

形成集群

虽然不是运行rqlite所必需的,但是运行多个节点意味着您将拥有一个fault-tolerant集群。再启动两个节点,使集群能够容忍单个节点的故障,如下所示:

rqlited -http-addr localhost:4003 -raft-addr localhost:4004 -join http://localhost:4001 ~/node.2
rqlited -http-addr localhost:4005 -raft-addr localhost:4006 -join http://localhost:4001 ~/node.3

此演示显示在同一主机上运行的所有3个节点。实际上,您可能不会这样做,然后您就不需要为每个rqlite节点选择不同的-http-addr和-raft-addr端口。

通过这些步骤,您现在就得到了一个fault-tolerant,分布式关系数据库。有关创建和管理真实集群的详细信息,请参阅此文档。

Cluster Discovery

还有一个rqlite发现服务,允许节点自动连接并形成集群。这可能更方便,允许动态创建集群。查看文档了解更多详细信息。

Inserting records

让我们使用标准SQLite命令通过rqlite CLI插入一些记录。一旦插入,这些记录将以持久的fault-tolerant的方式跨集群复制。您的3-node集群可以承受单个节点的故障,而不会丢失任何功能或数据。

rqlite
127.0.0.1:4001: CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)
0 row affected (0.000668 sec)
127.0.0.1:4001: .schema
+-----------------------------------------------------------------------------+|                                                                      
+-----------------------------------------------------------------------------+| 
CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)
 .schema
+-----------------------------------------------------------------------------+|                                                                      
+-----------------------------------------------------------------------------+| 
CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)
|+-----------------------------------------------------------------------------+
127.0.0.1:4001: INSERT INTO foo(name) VALUES("fiona")
1 row affected (0.000080 sec)
127.0.0.1:4001: SELECT * FROM foo
+----+-------+| id | name  |
+----+-------+| 1  | fiona  |+----+-------+

Data API

rqlite有一个丰富的httpapi,允许对rqlite的写入和查询进行完全控制。查看文档以了解详细信息。也有可用的客户端库。

Performance

rqlite为fault-tolerance复制SQLite。它不会为了性能而复制它。实际上,由于网络round-trips,性能有所降低。

根据您的机器(尤其是其IO性能)和网络的不同,单个插入性能可以是每秒10次操作到每秒超过200次操作。然而,通过使用bulkapi、事务或两者,吞吐量将显著增加,通常增加2个数量级。这是由于SQLite的工作方式。因此,对于高吞吐量,在单个事务中执行尽可能多的操作。

In-memory databases

默认情况下,rqlite使用in-memorySQLite数据库来最大限度地提高性能。在这种模式下,不创建实际的SQLite文件,整个数据库存储在内存中。如果您希望rqlite使用一个实际的file-basedSQLite数据库,请将-on-disk传递给start-up上的rqlite。

使用in-memory数据库是否会使我的数据面临风险?

No.

由于Raft日志是所有数据的权威存储,并且每个节点都将其写入磁盘,因此可以在start-up上完全重新创建in-memory数据库。使用in-memory数据库不会使数据处于危险之中。

Limitations

  • 只有确定性的SQL语句才可以安全地与rqlite一起使用,因为语句在发送到每个节点之前都提交到Raft日志中。换句话说,rqlite执行statement-based复制。例如,以下语句可能会在每个节点下生成不同的SQLite数据库:

INSERT INTO foo (n) VALUES(random());
  • 从技术上讲,这是不受支持的,但是您可以在任何时候直接读取任何节点下的SQLite,假设您在"on-disk”模式下运行。但是,不能保证SQLite文件反映集群上发生的所有更改,除非您确定主机节点本身已接收并应用了所有更改。

  • 在不明显的情况下,当在“磁盘上”模式下运行时,rqlite不会复制直接对任何底层SQLite文件所做的任何更改。如果直接更改SQLite文件,则会导致rqlite失败。仅通过httpapi修改数据库。

  • SQLitedot-commands,如.schema.tables不受API直接支持,但RQliteCLI支持一些非常相似的功能。这是因为这些命令是sqlite3命令的特性,而不是SQLite本身。

状态和诊断

您可以在这里学习如何检查状态和诊断。

备份和恢复

在这里学习如何热备份rqlite集群。也可以直接从SQLite转储文件加载数据。

Security

您可以在这里学习如何保护对rqlite的访问和限制用户的访问。

Google Group

有一个Google Group专门讨论rqlite。

Pronunciation?

rqlite怎么发音?为了值得,我试着把它发成"ree-qwell-lite"。但似乎大多数人,包括我在内,经常把它叫做“R Q lite”。

转载请注明: 爱推站 » Rqlite: 基于SQLite的轻量级分布式关系数据库。

相关文章

评论列表(0)

发表评论