【问题标题】:c# cube / multidimensional datasetc#立方体/多维数据集
【发布时间】:2010-03-03 05:06:58
【问题描述】:

我正在解决一个问题,我需要使用 C# 处理内存中的多维数据。我的需求类似于 OLAP 多维数据集,但没有那么复杂。例如,我不需要计算或聚合或类似的东西。我基本上想使用多维键来引用数据。例如:

var key = new Key();
key["Dim1"] = "DimValue1";
key["Dim2"] = "DimValue2";
key["Time"] = 1999;
DataSet[key] = 4.43434m;

它允许我迭代数据集的值或切片。你在 C# 中遇到过这样的库吗?

【问题讨论】:

    标签: c# .net olap multidimensional-array cubes


    【解决方案1】:

    这可能无法满足您的需求,但我发现处理多键数据集的一种简单方法是创建一个对象,其中包含所有“键”字段和“值”键(每个键的数量与您的数量一样多)需要),然后为每个键创建查找表达式。

    例如:

    class MyData
    {
        // Your keys
        public string Dim1;
        public string Dim2;
        public string Time;
    
        // Your values
        public string Value;
    }
    

    将被“索引”并像这样检索:

    // add all your data to a list or collection
    var data = new List<MyData>();
    
    // this provides the entry point to our dataset
    var lookupDim1 = data.ToLookup(d => d.Dim1);
    var lookupDim2 = data.ToLookup(d => d.Dim2);
    var lookupTime = data.ToLookup(d => d.Time);
    
    // sample retrievals
    IEnumerable<MyData> sampleData1 = lookupDim1["DimValue1"];
    var sampleData2 = lookupDim2["DimValue2"].Intersect( lookupTime["1999"] );
    

    【讨论】:

    • 非常好的主意。我不知道查找。但我认为这会执行得很慢。如果不是 O(n^m),我认为最多 O(n) 进行检索,其中 m 是键的数量。
    • 您的数据集有多大?当我使用超过 500 万条记录时,它运行得非常快,每条记录高达 4KB 左右。我不自称知道 Lookup LINQ 是如何工作的,但它非常快。
    【解决方案2】:

    您可以创建一个字典,其中键类型是您声明的结构。尽管您可以通过过滤来实现它,但它不会给您切片的自动迭代。

    【讨论】:

      【解决方案3】:

      我认为像 MongoDB 和 Redis 这样的键/值存储已经接近我所需要的。但是,我不是 100% 确定。由于我不关心持久性,所以像Redis这样的记忆故事更合适。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-18
        • 1970-01-01
        • 1970-01-01
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 1970-01-01
        相关资源
        最近更新 更多