我正在寻找一种方法,以有效的方式搜索巨大的多维矩阵中的数据。
我的应用程序包含以多个维度为特征的数据。想象一下保存公司所有销售的数据(我的应用程序完全不同,但这只是为了证明问题)。每次销售的特点是:
我有数百名员工在数天的销售中完成了数百万的销售。
我需要一种快速的方法来计算,例如:
我需要以最详细的方式存储数据,我可以使用一个地图,其中键是所有维度的总和,如下所示:
class Combination
{
Product *product;
Customer *customer;
Day *day;
Employee *employee;
Payment *payment;
};
std::map<Combination,quantity> data;
但是由于我事先不知道执行了哪些查询,我需要多个组合类(数据成员的顺序不同)或具有不同比较函数的映射(使用不同的序列进行排序)。
可能通过给每个产品,客户......一个数字而不是指向它的指针来简化问题,但即便如此,我最终也会留下大量内存。
是否有任何数据结构可以帮助处理这种有效的搜索?
修改
只是为了澄清一些事情:在磁盘上我的数据存储在数据库中,因此我不想找到改变它的方法。
问题在于,为了执行复杂的数学计算,我将所有这些数据都存储在内存中,并且我需要一种有效的方法来在内存中搜索这些数据。
内存数据库可以提供帮助吗?也许,但我担心内存数据库可能会对内存消耗和性能造成严重影响,所以我正在寻找更好的替代方案。
编辑(2):
更多说明:我的应用程序将对数据进行模拟,最后用户可以自由地将这些数据保存到我的数据库中。因此数据本身会改变整个时间。在执行这些模拟和数据更改时,我需要按照之前的说明查询数据。
因此,再次查询数据库不是一种选择。我真的需要(复杂的?)内存数据结构。
答案 0 :(得分:1)
编辑:替换之前的答案。
除了在巨大的结构数组上运行qsort()之外,你能想象你还有其他可能的选择吗?我无法看到别的方式。也许你可以在零时刻对它进行一次排序,并在动态插入/删除条目时对其进行排序。
答案 1 :(得分:0)
使用数据库(在内存中或不在内存中)处理数据似乎是正确的方法。
如果您不想这样做,则不必实现许多组合类,只需使用可以容纳任何对象的集合。