如何在cassandra中存储Bert嵌入

如何在cassandra中存储Bert嵌入,cassandra,embedding,bert-language-model,Cassandra,Embedding,Bert Language Model,我想用Cassandra作为特征存储来存储预计算的Bert嵌入, 每行大约由800个整数组成(例如,-0.18294132),我应该将所有800个整数存储在一个大字符串列中还是800个单独的列中 简单的读取模式,在读取时,我们希望读取一行中的每个值。不确定哪一个更有利于序列化速度。将所有内容作为单独的列将非常低效-每个值都有自己的元数据(例如writetime),这将增加大量开销(每个值至少8个字节)。将数据存储为字符串也不是很有效,并且会增加应用程序端的复杂性 我建议根据您的要求将数据存储为整

我想用Cassandra作为特征存储来存储预计算的Bert嵌入, 每行大约由800个整数组成(例如,
-0.18294132
),我应该将所有800个整数存储在一个大字符串列中还是800个单独的列中


简单的读取模式,在读取时,我们希望读取一行中的每个值。不确定哪一个更有利于序列化速度。

将所有内容作为单独的列将非常低效-每个值都有自己的元数据(例如writetime),这将增加大量开销(每个值至少8个字节)。将数据存储为字符串也不是很有效,并且会增加应用程序端的复杂性

我建议根据您的要求将数据存储为整数/长整数或双精度/浮点数。比如:

create table ks.bert(
  rowid int primary key,
  data frozen<list<int>>
);
创建表ks.bert(
rowid int主键,
数据冻结
);

在这种情况下,整个列表将被有效地序列化为二进制blob,只占用一个单元格。

只有一个注释-如果检索单个行,效果会很好,但如果加载整个模型,则效率可能会很低,因为Cassandra对整个表扫描没有太多优化。在这种情况下,可能会考虑其他格式/解决方案,如拼花地板或Delta Lake等。当然,这一切都取决于访问模式和延迟要求。是的,我也担心,从多个分区读取数据并不理想。但我想我一次最多只能读几百个,这应该行得通吗?是的,它会行得通-只需使用异步API并并行运行所有请求,这样它们就可以独立处理了。。。另一种方法是让分区由多行组成,前提是您可以通过某种方式将它们组合在一起