ulk*_*kas 2 postgresql vectorization data-mining computation
我有一个类型为bit(2000)的列向量的表.db引擎如何处理此值的操作AND和OR?它是否只是分成32位块(或分别为64位),然后分别比较每个块,最后简单地将结果连接在一起?还是只处理两个字符串?
我的观点是预测,哪个用例会更快.我得到了一个键值数据(用户项).
userID | itemID
U1 | I1
U1 | Ix
Un | Ij
Run Code Online (Sandbox Code Playgroud)
对于每个用户,我想计算n个最近邻居的列表(例如,使用jaccard索引).
select my_jaccard(select itemID from table where userID=U1,select itemID from table where userID=U2)
Run Code Online (Sandbox Code Playgroud)
我的解决方案 - 我将输入数据解析为用户向量表,其中向量的类型为bit(2000),在表示特定项目的位置上有1.
userID | vector
U1 | 00.......01
U1 | 0..1.....00
Un | 00..1..1..0
Run Code Online (Sandbox Code Playgroud)
我只是在这张桌子上
select vector1&vector2
Run Code Online (Sandbox Code Playgroud)
关键是每个用户最多只有10条记录用于所有项目,即向量最多有10个有效位.我认为,解析整个bitvector只是为了找到有效位需要更多的计算资源,而不是简单地将user1的10个值与user2的10个值相互比较.
是否更快地使用长位向量,这些位向量的位数设置为1,或者更好地将原始值用作集合并将两个集合在一起?(一套最多10件)
我同时使用psql v8.2和v9.x.
位类型的位操作在内部处理为呃位操作.以下是"和"代码的作用,例如:
p1 = VARBITS(arg1);
p2 = VARBITS(arg2);
r = VARBITS(result);
for (i = 0; i < VARBITBYTES(arg1); i++)
*r++ = *p1++ & *p2++;
Run Code Online (Sandbox Code Playgroud)
(所以它实际上是8位块.)
所以我觉得这应该很快.
归档时间: |
|
查看次数: |
3771 次 |
最近记录: |