C++ 组织对大量数据的逐个比较操作的最佳方式是什么?

C++ 组织对大量数据的逐个比较操作的最佳方式是什么?,c++,performance,qt,C++,Performance,Qt,我有大量的数据,基本上是大向量,需要相互比较以确定它们之间的关系。向量保存在本地sqlite数据库中 组织流程的最佳方式是什么 到目前为止,我一直在做的是为所有向量加载键,然后迭代它们的组合,提取数据并进行比较,并在每次比较后将结果保存到数据库中。然而,这一过程需要很长时间 我认为,更快的方法是批量加载数据,然后并行执行比较。这怎么可能是正确的呢?是否有一些关于该主题的论文,其中描述了最佳方法 我使用SQLite数据库、C++作为语言和QT框架。被比较的数据和比较方法本质上是黑盒-它们来自外部库

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

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

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

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


我使用SQLite数据库、C++作为语言和QT框架。被比较的数据和比较方法本质上是黑盒-它们来自外部库。

您可以建立一个工作分配队列,即数据元素的组合,以测试和使用线程池中的线程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,将结果可能与数据元素的标识符一起放入结果队列。另一个线程负责使用结果,并对该数据执行任何您想执行的操作


推广这种方法几乎有无限的可能性,例如,传递谓词以将数据与工作分配进行比较,不同类型的队列可能某些组合比其他组合更重要,

这一点并不特别清楚。您是说需要执行N^2比较吗?是否需要按特定顺序执行这些操作?你对结果做了什么?更像是n^2-n/2,但是是的。顺序并不重要——只要对数据库的请求量最小,就最好。结果数据库中只存储0到1之间的一个数字。我建议先从数据库下载数据,不要调用每一行的查询。如果选择向量的大小,它会提高性能很多?@Srv19:我觉得你想比较一组向量。更新了答案。另外:如果单个数据元素的比较只需要很短的时间,那么用不同长度的向量进行实验可能是值得的,这是真的。我假设向量的意思是std::vector。不过,我的数据类型包含浮点向量。我目前正在做一些与您描述的类似的事情,但是使用QTConcurrent:mappedReduced,它提供了对{left-element-index,right-element-index}的可枚举性,在map函数中执行比较,并将结果放入数据库reduce函数中,听起来一点也不糟糕;这基本上是我想法的现成版本。因此,我目前看到的唯一优化是批量获取数据库中的所有数据,并批量写入所有结果。如果是这样,那么批量大小应该如何选择?