.NET 上的 AWS Kinesis PutRecordAsync - 我应该使用什么数据格式来发布 IEnumerable<T>?

AWS Kinesis PutRecordAsync on .NET - what data format should I use to publish IEnumerable<T>?

我有一个返回 JSON 的网络套接字,它被 System.Text.Json.

反序列化为 IEnumerable<Car>
public record Car(string Id, string Make, string Model);

我应该使用什么格式将 IEnumerable<Car> 发布到流中?

我应该将其保留为 JSON 还是可以使用 Protobuf/MessagePack?越快越好

public Task<PutRecordResponse> PublishAsync(string data, string partitionKey, CancellationToken cancellationToken = default)
{
    var putRecordRequest = new PutRecordRequest
    {
        StreamName = _streamName,
        PartitionKey = partitionKey,
        Data = new MemoryStream(Encoding.UTF8.GetBytes(data))
    };

    return _kinesisClient.PutRecordAsync(putRecordRequest, cancellationToken);
}

public Task<PutRecordsResponse> PublishAsync(IEnumerable<string> data, string partitionKey, CancellationToken cancellationToken = default)
{
    var putRecordsRequest = new PutRecordsRequest
    {
        StreamName = _streamName,
        Records = data.Select(d => new PutRecordsRequestEntry
        {
            Data = new MemoryStream(Encoding.UTF8.GetBytes(d)),
            PartitionKey = partitionKey
        }).ToList()
    };

    return _kinesisClient.PutRecordsAsync(putRecordsRequest, cancellationToken);
}

Should I keep it as JSON or can I use Protobuf/MessagePack? The faster, the better.

你能用 JSON 以外的东西吗?是的

应该吗?很可能不会。

将其保留为 JSON 除非您已通过性能基准测试确认最广泛使用的数据格式之一的序列化和反序列化 - JSON - 使用最广泛的企业框架之一 - .NET - 是您的性能瓶颈。

实际上,JSON 和 Protobuf / MessagePack 之间的性能差异很可能可以忽略不计(如果有的话)。

理论上,您可以转换为最快并产生最小输出的任何格式都是“最快”的,但是这需要您在 real-world 环境中进行基准测试。

系统在其他部分可能会慢 99%...