在大量数据上组织每个比较操作的最佳方法是什么?

时间:2013-07-03 06:51:38

标签: c++ performance qt

我有大量数据,基本上是大数据,需要相互比较以确定它们之间的关系。向量保存在本地sqlite数据库中。

组织流程的最佳方式是什么?

到目前为止,我一直在做的是为所有向量加载密钥,然后迭代它们的组合,提取数据并进行比较,并在每次比较后将结果保存到数据库中。但是,这个过程需要很长时间。

我认为,更快的方法是批量加载数据,然后并行执行比较。怎么可能做得对?是否有一些关于这个主题的论文,其中描述了最佳方法?

我使用sqlite数据库,c ++作为语言和qt框架。被比较的数据和比较方法基本上是黑盒子 - 它们来自外部库。

1 个答案:

答案 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,不同类型的队列(也许某些组合比其他队列更重要),......