高维大数据如何存储? 举报 理由 举报 取消 问题是这样的,假如我有1000万个样本,每个向量有1万维,那么如果这些向量存储在数据库中就是1000万*1万的矩阵,现在的关系型数据库都是按行存储,这意味着我如果按列取每一个特征的时候将会非常麻烦。比如推荐系统中有很多数据都是高维的,不好意思啊,我还没毕业,不太清楚目前大公司是用什么方法来存储这些数据的? 2017年10月11日 2 条回复 882 次浏览 技术,推荐,数据,数据存储,数据挖掘,系统
回复 ( 2 )
推荐系统一般不会用传统的关系型数据库存,你可以用hadoop,存1000万行,每行1万个特征也不算多,要是你的特征是稀疏表达的话,还可以稀疏存储。
如何存储取决于你要在数据之上做怎样的计算.
首先是离线计算:这1W个维度很可能大部分都是单独挖掘出来的。所以在挖掘过程中,无需每个步骤都把所有维度存在一起。最后有一个步骤去汇总出一份包含全部维度的数据即可,所以离线计算部分存储比较随意,怎么存都行。
然后说在线查询:还是一样,数据如何存储,取决于你要对其做怎样的计算。对于你说的这种特征数据,通常我们最终在业务系统里使用,都是直接按照用户标识,获取用户特征,在业务系统里不做不同用户特征之间的复杂计算(如果有,请把它放在离线计算里,最终得出一个直接用的结果给业务系统使用),所以总的来说最终用的时候这就是个 Key-Value 型的东西。那有没有必要把1W个维度拆分开存储呢?大部分时候没有必要,来做下简单计算:
把我们的特征数据,经过字典化后,假设所有特征都可以用 32 位整形表示(实际可能会更少),1W个就是 32, 0000 B,不会所有用户都有全部特征,实际上只有非常少的用户有全部特征(按5%,即使如题主所说全都有 1W 特征,那么还有压缩,看后面),其余的特征数只有 1000 以下(一般能有 10% 特征就不错了,1W * 10% = 1k)。由于特征这个东西,数据多有同质化,而且通常是专用系统,所以可以有针对性地选择最好的压缩方式,假设 1000 个特征经过一些编码和压缩后,压缩率 30 %。 最终 90 % 的用户使用不多于 300 字节就可以存下全部特征。这样,选择一个可以存得下 1KW Key-Value 对的存储系统就行了.
假如你要对不同用户的特征在线做计算,那就需要一个 OLAP 数据库.