#时序数据库 #时序 #边缘计算 #blob 存储 #blob #http-api

bin+lib reductstore

ReductStore 是一款专门设计用于存储和管理大量 blob 数据的时间序列数据库

22 个稳定版本

新版本 1.11.1 2024 年 8 月 23 日
1.10.1 2024 年 7 月 15 日
1.9.4 2024 年 3 月 29 日
1.7.3 2023 年 11 月 8 日
1.5.1 2023 年 7 月 17 日

#94数据库接口

Download history 4/week @ 2024-05-16 3/week @ 2024-05-23 1/week @ 2024-05-30 112/week @ 2024-06-06 25/week @ 2024-06-13 102/week @ 2024-07-11 19/week @ 2024-07-18 7/week @ 2024-07-25 97/week @ 2024-08-15

每月 106 次下载

BUSL-1.1

600KB
15K SLoC

ReductStore

高性能的 blob 数据时间序列数据库

GitHub release (latest SemVer) GitHub Workflow Status Docker Pulls GitHub all releases codecov Community

ReductStore 是一款专门设计用于存储和管理大量 blob 数据的时间序列数据库。它具有高读写性能和实时查询性能,并支持批量数据。这使得它非常适合边缘计算、计算机视觉和物联网应用,在这些应用中网络延迟是一个重要因素。更多信息,请访问 https://www.reduct.store/

它为什么存在?

市场上已经存在许多功能强大、可扩展性好的时序数据库。然而,它们都专注于数值数据,对非结构化数据的支持有限,这些数据可能以字符串的形式表示。

另一方面,类似于 S3 的对象存储解决方案可能是存储 blob 对象的最佳地点,但它们不提供与时间域中的数据进行交互的 API。

有许多应用需要收集非结构化数据,如图像、高频传感器数据、二进制包或大型文本文档,并提供对其历史的访问。许多公司基于 TSDB 和 Blob 存储的组合内部构建存储解决方案。这可能是一个可行的解决方案;然而,在两个数据库中保持数据完整性、实施保留策略以及以良好的性能提供数据访问是一个具有挑战性的开发任务。

ReductStore 项目旨在解决为需要以特定时间间隔存储和访问非结构化数据的应用提供完整解决方案的问题。它保证您的数据不会超出硬盘空间,并为具有高延迟的网络的批处理记录以减少关键 HTTP 请求的数量。

所有这些特性使得数据库成为边缘计算和物联网应用的正确选择,如果您想避免内部解决方案的开发成本。

功能

  • 将非结构化数据作为时间序列存储和访问
  • 没有Blob最大尺寸限制
  • 基于大小进行实时FIFO桶配额以避免磁盘空间不足
  • HTTP(S) API
  • 仅追加复制
  • 针对小于1MB的小对象进行优化
  • 为注释和过滤标记数据
  • 迭代数据查询
  • 在HTTP响应中对写入和读取操作中的记录进行批处理
  • 嵌入式Web控制台
  • 令牌授权以管理数据访问

开始使用

使用我们的Docker镜像是最快开始运行的方式

docker run -p 8383:8383 -v ${PWD}/data:/data reduct/store:latest

或者,您可以选择Cargo

apt install protobuf-compiler
cargo install reductstore
RS_DATA_PATH=./data reductstore

要获取更深入的指南,请访问“开始使用”和“下载”部分。

初始化实例后,可以使用我们的一种客户端SDK来写入或检索数据。例如,以下是一个Python示例

import time
import asyncio
from reduct import Client, Bucket

async def main():
    # Create a client for interacting with a ReductStore service
    async with Client("https://127.0.0.1:8383") as client:
        # Create a bucket and store a reference to it in the `bucket` variable
        bucket: Bucket = await client.create_bucket("my-bucket", exist_ok=True)

        # Write data to the bucket
        ts = time.time_ns() / 1000
        await bucket.write("entry-1", b"Hey!!", ts)

        # Read data from the bucket
        async with bucket.read("entry-1", ts) as record:
            data = await record.read_all()
            print(data)

# Run the main function
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

客户端SDK

ReductStore考虑到了适应性。虽然它附带了一个简单直观的HTTP API,可以集成到几乎任何环境中,但我们明白并非每个人都想直接与API交互。为了简化您的开发过程并使集成更流畅,我们为不同的编程语言和环境开发了一系列客户端SDK。这些SDK围绕核心API进行包装,提供了一种更直观且语言原生的方式来与ReductStore交互,从而加速您的开发周期。以下是可用的客户端SDK

工具

ReductStore不仅仅关于数据存储;它是简化并增强您的数据管理体验。除了其强大的核心功能外,ReductStore还提供了一系列工具,以简化管理、监控和优化。以下是您可以利用的关键工具

  • CLI客户端 - 用于直接与ReductStore交互的命令行界面
  • Web控制台 - 用于管理ReductStore实例的Web界面

反馈与贡献

您的反馈对我们来说非常宝贵!🌟如果您发现了错误,有改进的建议,或想直接向代码库贡献,以下是您可以如何帮助

  • 问题和想法:加入我们的Discourse社区,提出问题,分享想法,并与ReductStore用户合作。
  • 错误报告:在我们的GitHub仓库上打开一个问题。请尽可能提供详细信息,以便我们能够有效地解决问题。

参与其中

我们相信社区和协作的力量。如果您使用ReductStore构建了令人惊叹的东西,我们很乐意听到!在我们的Discourse社区上分享您的工作、经验和见解。

如果您认为ReductStore很有益,请在我们的GitHub仓库上给我们一个⭐。

您的支持是我们热情的源泉,也是我们不断改进的动力。

让我们共同重新定义Blob数据存储的未来!🚀

常见问题解答(FAQ)

Q1:ReductStore与其他时间序列数据库有什么不同之处?

A1:ReductStore专门设计用于存储和管理大量Blob数据,优化了高性能和实时查询。与其他主要关注数值数据的数据库不同,ReductStore擅长处理非结构化数据,使其成为边缘计算和物联网等各种应用的理想选择。

Q2:如何开始使用ReductStore?

A2:您可以使用我们的Docker镜像或通过使用cargo轻松设置ReductStore。详细的说明请参阅《入门》部分。

Q3:blob数据是否有大小限制?

A3:虽然ReductStore针对小对象(小于1 MB)进行了优化,但blob的最大大小没有硬性限制。

Q4:我可以将ReductStore集成到现有的基础设施中吗?

A4:当然可以!凭借我们多样化的客户端SDK和可定制的HTTP API,ReductStore可以集成到几乎任何环境中。

Q5:我在安装时遇到了问题。我可以在哪里获得帮助?

A5:我们建议您查阅我们的文档。如果您仍然遇到问题,欢迎加入我们的Discord社区或在GitHub存储库中提出问题。

依赖关系

~31-47MB
~890K SLoC