我很高兴地宣布,我们已经完成了从C ++到生锈的迁移,并发布了完全用Rust写的稳定版本(v1.4.0)。 ðÖ©
这不是一件容易的事。经过六个星期的编码,我们遇到了许多回归和行为变化。我需要发布两个Alpha和两个Beta版本,并进行生产测试以清理数据库。现在,它终于准备好了!
打破变化
不幸的是,当您使用完全不同的堆栈重写应用程序时,保持相同的行为并不容易。因此,必须对API进行一些更改。在C ++版本中,JSON响应是以表示字符串的整数发送的。
GET http://127.0.0.1:8383/api/v1/info
{
"bucket_count":"1",
"defaults":{
"bucket":{
"max_block_records":"1024",
"max_block_size":"64000000",
"quota_size":"0",
"quota_type":"NONE"
}
},
"latest_record":"1400081",
"oldest_record":"1",
"uptime":"6",
"usage":"717458496",
"version":"1.4.0-beta.2"
}
我将Protobuf用作存储引擎中的元数据的快速二进制序列化器,用于HTTP通信。官方的C ++ Protobuf实现使用整数字符串,因为它可以相信(我同意)JavaScript无法正确处理大整数,至少不能开箱即用。但是,当我搬到Prost!
时,整数将作为实际整数发送。我围绕客户端SDK的这种变化进行了工作,但这仍然是一个打破的变化,对于可能带来的任何不便,我深表歉意。我可以称为Rust版本v2.0,但是数据格式是相同的,并且兼容。因此,我决定将主要版本保存,以使其破坏数据兼容性的更改,用户需要相应地迁移。
连续查询
除了Rust的安全性和安全性外,此版本还可以连续查询。这使您可以订阅新的更改,并且与MQTT或KAFKA订阅类似。虽然这可能不是一个完全替代品,但对变化的迅速反应对于许多应用程序至关重要。它也可用于将还原店与其他技术集成在一起。例如,您可以订阅新记录,并将其标签发送到时间序列数据库(TSDB)以进行长期存储。这是一个简单的python示例,演示了如何订阅从现在开始进行的所有更改,以使用good
标签等于True
:
async for record in bucket.subscribe(
"entry-1",
start=int(time_ns() / 10000),
poll_interval=0.2,
include=dict(good=True),
):
print(
f"Subscriber: Good record received: ts={record.timestamp}, labels={record.labels}"
)
所有客户端SDK均已更新
由于API的变化,我们将SDK更新为v1.4.0。它们与最新的还原器发行版完全兼容。在这里检查:
下一步是什么?
我们已经计划了版本v1.5.0,并将实现以下功能:
希望您发现此版本有用。如果您有任何疑问或反馈,请不要犹豫在Discord或通过就GitHub进行讨论。
感谢您使用ReductStore!