在巨大的多维矩阵中进行高效搜索

时间:2012-02-13 08:19:32

标签: data-structures

我正在寻找一种方法,以有效的方式搜索巨大的多维矩阵中的数据。

我的应用程序包含以多个维度为特征的数据。想象一下保存公司所有销售的数据(我的应用程序完全不同,但这只是为了证明问题)。每次销售的特点是:

  • 正在销售的产品
  • 购买产品的客户
  • 销售当天
  • 销售产品的员工
  • 付款方式
  • 销售数量

我有数百名员工在数天的销售中完成了数百万的销售。

我需要一种快速的方法来计算,例如:

  • 员工在某一天销售的总量
  • 客户购买的总量
  • 通过信用卡支付的产品总数
  • ...

我需要以最详细的方式存储数据,我可以使用一个地图,其中键是所有维度的总和,如下所示:

class Combination
   {
   Product *product;
   Customer *customer;
   Day *day;
   Employee *employee;
   Payment *payment;
   };

std::map<Combination,quantity> data;

但是由于我事先不知道执行了哪些查询,我需要多个组合类(数据成员的顺序不同)或具有不同比较函数的映射(使用不同的序列进行排序)。

可能通过给每个产品,客户......一个数字而不是指向它的指针来简化问题,但即便如此,我最终也会留下大量内存。

是否有任何数据结构可以帮助处理这种有效的搜索?

修改

只是为了澄清一些事情:在磁盘上我的数据存储在数据库中,因此我不想找到改变它的方法。

问题在于,为了执行复杂的数学计算,我将所有这些数据都存储在内存中,并且我需要一种有效的方法来在内存中搜索这些数据。

内存数据库可以提供帮助吗?也许,但我担心内存数据库可能会对内存消耗和性能造成严重影响,所以我正在寻找更好的替代方案。

编辑(2):

更多说明:我的应用程序将对数据进行模拟,最后用户可以自由地将这些数据保存到我的数据库中。因此数据本身会改变整个时间。在执行这些模拟和数据更改时,我需要按照之前的说明查询数据。

因此,再次查询数据库不是一种选择。我真的需要(复杂的?)内存数据结构。

2 个答案:

答案 0 :(得分:1)

编辑:替换之前的答案。

除了在巨大的结构数组上运行qsort()之外,你能想象你还有其他可能的选择吗?我无法看到别的方式。也许你可以在零时刻对它进行一次排序,并在动态插入/删除条目时对其进行排序。

答案 1 :(得分:0)

使用数据库(在内存中或不在内存中)处理数据似乎是正确的方法。

如果您不想这样做,则不必实现许多组合类,只需使用可以容纳任何对象的集合。