DiceDB:一个创新的、开源免费的实时数据库系统
开源的数据库系统很多,为什么又来一个DiceDB呢?程序员都有着 “不重复制造轮子” 的思维,相信这个数据库系统自然也有它的特点和存在的价值,就像 “天生我材必有用” 一样一样的😄。
仓库:DiceDB/dice
点评: DiceDB是一个创新的开源数据库系统,它95%的代码用 Go 语言编写,约 4.6% 的代码用的是 Python。它是基于 SQL 的实时反应能力的 Redis 替代品,提供高性能、可扩展且易于使用的数据存储和查询服务。适用于多种场景,包括Web应用、数据分析平台和物联网(IoT)系统等。
DiceDB目前仍处于开发阶段,支持 Redis 命令的子集。作者建议:目前阶段,不要在生产环境中使用,但可以浏览现存的、未解决的问题 并贡献修复和功能代码,这样众人拾柴火焰高,好加速软件的开发进程。
技术特点:
支持SQL查询:它兼容SQL查询,可以无缝融入现有的基于SQL的工作流程。 分布式架构:DiceDB的分布式设计使其能够在多节点环境中自动扩展,高效处理大规模数据。 实时计算:由于数据存储在内存中,DiceDB能够提供近乎实时的数据查询能力。 ACID事务:保证了事务的原子性、一致性、隔离性和持久性,为开发者提供可靠的事务管理。 多模型支持:除了传统的表格数据,DiceDB还支持图数据模型,适用于处理复杂的关系网络。
应用场景:
实时数据分析:适用于需要快速响应的在线服务,如金融交易、广告投放等。 大数据处理:其分布式架构可以轻松应对大量数据的读写操作。 物联网(IoT):通过实时处理设备产生的大量事件数据,帮助构建智能的边缘计算解决方案。 应用程序后端:无论是Web应用还是移动应用,DiceDB都能作为高效的数据存储层。
它和 Redis 有什么不同?
多线程:Redis是单线程的,而 DiceDB 是多线程的。 共享无架构:DiceDB遵循 shared-nothing architecture,无共享架构。 QWATCH命令:DiceDB支持一个新的命令QWATCH,允许客户端监听 SQL 查询并在数据变化时实时获得通知。多说几句,在官方文档网站上(https://dicedb-docs.netlify.app),就举了一个例子:游戏世界实时排行榜的刷新。通过使用 QWATCH 命令获取排行榜,每当数据更新时,它都会重新评估查询并按值(分数)的降序发出键、值对的列表。因此,客户端将实时获得排行榜,而无需定期轮询或查询数据。
使用和开发:
DiceDB目前还在开发中,支持部分Redis命令,但还不建议用于生产环境。 可以通过Docker或直接从源代码运行DiceDB进行本地开发。 提供了DiceDB CLI和SDK,方便开发者进行集成和使用。
开始使用
使用 Docker:通过运行以下命令使用 Docker 快速开始。
$ docker run dicedb/dice-server
此命令将在本地端口
7379
上启动 DiceDB 服务器,您可以使用 DiceDB CLI 和 SDK,甚至 Redis CLI 和 SDK 连接到它。
设置环境
运行 DiceDB 进行本地开发或从源代码运行,您需要:
基于 Linux 的环境 基于 OSX (Darwin) 的环境
Golang 支持的平台环境:
克隆仓库并运行主程序:
$ git clone https://github.com/dicedb/dice
$ cd dice
$ go run main.go
设置 CLI
使用 DiceDB CLI 连接到 DiceDB 是最佳方式,您可以通过以下命令安装它:
$ pip install dicedb-cli
由于 DiceDB 使用 Redis 语言,您也可以使用任何 Redis 客户端和 SDK 连接到 DiceDB。但如果您计划使用
QWATCH
特性,则需要使用 DiceDB CLI。
运行测试
单元测试和集成测试对于确保正确性至关重要。DiceDB 提供了两种类型的测试来验证其功能。
执行单元测试:
$ make unittest
$ TEST_FUNC=TestByteList make unittest-one
执行集成测试:
$ make test
$ TEST_FUNC=TestSet make test-one
性能基准测试
$ go test -test.bench <pattern>
$ go test -test.bench BenchmarkListRedis -benchmem
贡献指南
请参考 issues 页面上的指南来开始构建和贡献 DiceDB。 代码贡献指南发布在 CONTRIBUTING.md;在开始任何更改之前,请阅读它们。这将使我们保持一致的编码实践和开发体验标准。
故障排除
如果需要强制终止 DiceDB 进程,可以使用以下命令:
$ sudo netstat -atlpn | grep :7379
$ sudo kill -9 <process_id>
近日文章:
指挥大师:一个Netflix开源的通用工作流编排器 Maestro
一款省时、省钱、又拯救生命的开源免费的高性能构建利器:NativeLink,对个人、开源项目和云生产环境免费,并支持无限团队成员