我有大量数据,基本上是大数据,需要相互比较以确定它们之间的关系。向量保存在本地sqlite数据库中。
组织流程的最佳方式是什么?
到目前为止,我一直在做的是为所有向量加载密钥,然后迭代它们的组合,提取数据并进行比较,并在每次比较后将结果保存到数据库中。但是,这个过程需要很长时间。
我认为,更快的方法是批量加载数据,然后并行执行比较。怎么可能做得对?是否有一些关于这个主题的论文,其中描述了最佳方法?
我使用sqlite数据库,c ++作为语言和qt框架。被比较的数据和比较方法基本上是黑盒子 - 它们来自外部库。
答案 0 :(得分:0)
您可以构建一个“工作分配”队列,即数据元素的组合,以便从线程池中的线程测试和使用它们(QThread
并想到家庭)。
工作任务可能如下所示:
class WorkingAssignment {
public:
WorkingAssignment(DataType *lhs, DataType *rhs) : a(lhs), b(lhs) {}
ResultType execute() const {
return Compare(a, b);
}
private:
Vector *a, *b;
};
因此,一个线程将一个赋值出列,在其上调用execute
,将结果(可能与数据元素的标识符一起)排入结果队列。另一个(单个)线程负责使用结果并做任何你想对数据做的事情。
几乎无限可能推广这种方法,例如:传递一个谓词来比较数据到WorkingAssignment
,不同类型的队列(也许某些组合比其他队列更重要),......