当前位置:首页 > 杂谈 > 正文内容

看完这篇,你还怕不会Batch Write?-writeasbeta

2024-09-20 13:31:30杂谈201

熟悉Aerospike的程序猿们都知道,Aerospike只支持batch get()和exists()功能。但是随着Aerospike 6.0版的上线,期待已久的Batch Write功能也终于实现同步了。

Bath Read

我们先回顾一下Aerospike的batch get()和exists()功能。

Batch读取的功能是使用一个键值list来执行并行读取多条记录,并行从多条记录中选择特定的bin或并行检查是否存在多条记录。

Aerospike曾经有两种不同的批处理协议:batch-direct、batch-index。在服务器 4.4.0.4 中,我们删除了对batch-direct的支持,取而代之的使用batch-index。自Aerospike企业版5.2起,batch-index可与过滤器表达式(batch策略)结合使用。

Batch的运行模式

首先客户端会根据到键值所在分区和节点的映射来拆分成子批次。客户端还会根据批处理策略,来控制在各节点上子批次的并行执行。每一个子批次一次只到达集群中的一个节点,且我们也用批处理策略来控制子批处理是否为内联(内联意味着单个线程按顺序执行整个子批次,否则子批次被拆分,并在所有节点上并发执行)。

再说到Batch的响应,Batch的响应线程会收集每个子批处理命令的结果,每个响应的缓冲区为128KiB。一旦缓冲区已满,它将被发送到客户端。这时再根据客户端指定的批处理策略,来确定客户端是在响应到达后立即开始处理,还是等到结束。

Batch的好处

与单条数据同步和异步操作相比,批处理的好处当然是跨多个集群节点更好地并行化操作数据。批处理可以减少往返时间 (RTT),降低整体延迟。批处理操作还可以更好地利用网络资源,提升吞吐量。

当执行批处理时,客户端可以使用单个连接到达每个节点。入站和出站批处理数据结合,可以使用更少的数据包。当每个读取命令的响应相对于数据包 MTU 较小时,效率更高。在批量的写入中,请求可以结合起来有效地发送许多数据量少的更新。从网络资源的角度,批处理使用了更少的连接和更少的数据包,这样更有助于集群稳定性。

Batch Operate (Read-Operations)

我们在兼容 Aerospike 企业版 5.6的客户端,添加了batch operate()操作。它可以通过使用键值列表,在单记录事务中执行多个读取操作。如果这一操作过程中,有任何写操作的存在,将拒绝batch operate()的操作。

每个键值都在单独的单记录事务中获得相同的读取操作集。这些客户端还可以与较旧的服务器版本 (>= 4.9) 进行通信。同时,batch operate()操作可以与过滤器表达式组合。

做到Batch 一切

Aerospike 在新版本6.0中添加了批量写入操作。使用batch operate()支持写操作或读写操作的混合,同时支持Batch apply()和Batch delete()。

这将是Aerospike的Batch操作对键列表的相同操作没有任何限制。比如,批处理的每个部分都可以寻址不同的键,可以组合之前的Bath read(相同的操作,多个键),为 SSD命名空间添加了单独的内联策略,可以有执行的整个batch的过滤器表达式,同时也可以为Batch的每个部分使用单独的过滤器表达式。这就是我们所说的Batch Anything。

使用Batch的注意事项

首先Batch不是一个多记录事务。每个batch部分都是独立的,批处理策略确定是跳过批处理的错误部分还是停止当前批处理,子批次不会遵循批处理整体的命令顺序。

当我们在使用Aerospike Batch处理时,应该调节性能和数据调优。通常需要注意的事项有,batch-max-requests 配置参数的默认值为5000。非常大的batch可能比迭代成更小的batch效率低。在基于SSD的命名空间上内联sub-batch通常效率较低(内联意味着单个线程按顺序执行整个sub-batch)。内联最终可以使批处理操作优于单键操作。我们可以通过将 batch-index-threads 动态设置为 0 来禁用批处理命令。

参考链接:

Sample code from this talk:

https://github.com/aerospike-examples/summit-2022-batch

Aerospike Database 6 blog post:

https://developer.aerospike.com/blog/database-queries-json-db-6

Batch Operations feature guide:

https://docs.aerospike.com/server/guide/batch

Batch operations blog post:

https://developer.aerospike.com/blog/batch-operations-in-aerospike

关于Aerospike

Aerospike实时数据平台:使组织能够面对数十亿笔交易规模时实时采取行动,同时将服务器占用空间减少多达80%。

Aerospike多云平台:以可预测的亚毫秒级性能为实时应用程序提供支持,数据规模高达PB 级,正常运行时间为 5个9,并提供全球分布的、强一致的数据存储能力。

基于Aerospike实时数据平台构建的应用程序:可用于打击欺诈、面向在线电子商务进行商品推荐、支持全球数字支付等,并为数千万客户提供超个性化的用户体验。

服务客户包括:Airtel、Experian、Nielsen、PayPal、Snap、Wayfair 、 Yahoo 等。

公司总部位于加利福尼亚州山景城,在伦敦、班加罗尔和特拉维夫设有办事处,目前已在中国开展业务。

微信搜索Aerospike服务号,了解更多会议信息,还可以下载社区版本、随时提问。欢迎添加小编微信:Aerospike_China,帮你解决更多问题。