thrift、protobuf、avro 等是否支持对生成的紧凑数据进行查询?或者像节俭服务器这样的东西首先必须在能够查询之前对紧凑数据进行解码?
背景:因为我没有看到我的用例可能有一个完全不同的答案。
我已经在纸上勾勒出一个自定义数据结构(类似于trie),它将包含数以千万计的键值对。整个东西都需要在 RAM 中,所以它需要是紧凑的。
出于这个原因,我可能会跳过普通的 kv 存储,因为编码的开销太大了。他们无法针对结构的特殊情况进行优化。(Redis 每个键 afaik 的开销最小,但这还不够:每个键 100+ 字节)
我研究了Thrift,Protobuf,Avro,Messagepack,它们都允许我将数据编码为一个很好的紧凑结构,所有这些都照顾我的数据结构的特定机会(将键编码为 1 或 2 个字节,位打包,值是固定长度等)
但是,我完全不清楚这些协议/技术中的任何一个是否允许我按原样查询压缩的数据结构,或者是否必须在查询之前对数据结构进行解码?如果是后者,那么整个练习对我来说并没有多大用处。
作为替代方案,我考虑过查看其他编程语言(可能是 c/c++,尽管我从未涉足过它),这可能会让我对结构进行非常严格的内存控制(与 Node/javascript 相反,它是非常糟糕)
任何人?