Zstd: 流媒体平台中的 Zstd 字典压缩

创建于 2019-06-10  ·  3评论  ·  资料来源: facebook/zstd

你好,

我写在这里,因为我不知道还有什么地方可以处理这个问题,也许这是 Zstd 的限制。 我正在 Pulsar 中使用 Zstd 进行字典压缩,它基于 Netty 和
io.netty.buffer.ByteBuf 数据类型。

问题如下。 在本地构建代码时,我可以访问输入的直接缓冲区,并且字典大小 > 10000 字节。 在网络上,我模拟输入并且没有支持字典的直接缓冲区,字典大小高达 500 字节。
有人可以帮我解释一下限制在哪里,或者我做错了什么。

(代码示例如下)。

当地的:
public static byte[] getZstdDictionaryAsBytesFromList(List消息){
int inputSize = messages.stream().mapToInt(b -> b.readableBytes()).sum();
ZstdDictTrainer trainer = new ZstdDictTrainer(inputSize, DICTIONARY_SIZE);
byte[] byteDictionary = null;

    for(ByteBuf buf: messages) {
        trainer.addSample(buf.array());
    }
    byteDictionary = trainer.trainSamples( true);
    return byteDictionary;
}

网络:
私人 CompletableFuture消息){
最终 CompletableFuture int inputSize = messages.stream().mapToInt(b -> b.readableBytes()).sum();
this.dictionaryService.getDictionaryWorkerPool().submit(() -> {
ZstdDictTrainer trainer = new ZstdDictTrainer(inputSize, 16*1024);
for(ByteBuf msg: this.messageBuffer) {
字节[] msgArray;
if(msg.hasArray()) {
msgArray = msg.array();
} 别的 {
int howMany = msg.readableBytes();
msgArray = 新字节[howMany];
int readerIndex = msg.readerIndex();
msg.getBytes(readerIndex, msgArray);
}
trainer.addSample(msgArray);
}
byte[] byteDictionary = trainer.trainSamples(true);

如果我在论坛上充斥着更具体的问题,真的很抱歉。
非常感谢,
米莱娜

question

所有3条评论

嗨,米莱娜,

看起来您正在使用此处维护的 zstd-jni 绑定? 抱歉,我在该语言中回答与 java 或 zstd 绑定相关的问题的能力将非常有限。 不过我会尽力的!

你能告诉我更多关于“在网络上,我模拟输入”的意思吗? 字典训练器的目标是编译示例输入中重复出现的子字符串,并将它们组装到返回的字典中(以及结构化标题)。 如果您正在生成不相关的合成样本(例如,通过从随机数生成器构建它们或通过从/dev/urandom读取它们),则可能不会有多个输入共享的字节运行,因此返回的字典将为空,只有头文件(几百字节)。

还有一些其他可能性可以解释您所经历的情况,但这是我认为最合适的,所以我想先消除它。

嗨,菲利克斯,

非常感谢您的回复。 我现在意识到我在这里可能是在错误的论坛中,因为这个问题似乎非常特定于 Java。 我正在模拟的输入不是随机的,但我正在从同一个 .csv 文件中读取行。 这些行有相似之处,因此是字典压缩的一个很好的目标。
当我从本地机器读取相同的行(训练数据)时,我有:
在本地机器上:训练数据大小(字节):259475,字典大小(字节):16384
网络上:训练数据大小(字节):62290,字典大小(字节):449
问题开始越来越多地看起来与 Zstd 无关,而是与因转换而丢失的数据有关。

问候,
米莱娜

好的,基于怀疑您遇到的问题与 zstd 本身无关,我将暂时关闭此问题。 如果您发现您确实向培训师提供了相同的数据并获得了不同的结果,请重新打开。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

sergeevabc picture sergeevabc  ·  3评论

ghost picture ghost  ·  4评论

vade picture vade  ·  3评论

TheSil picture TheSil  ·  3评论

indygreg picture indygreg  ·  3评论