基于同一行中的另一个变量来区分组的最快方法(页面访问者的不同数量)

时间:2013-11-11 13:17:44

标签: c# data-structures hashtable

我有一个包含两列的文件; visitorId和pageID。我想要找到的是每个页面的唯一/不同访问者数量。我在HashTable(字典)中使用HashTable来跟踪特定访问者是否已被计入该特定页面。该文件包含超过10亿行,因此性能非常关键。是否还有其他数据结构用于计算HashTable中除HashTable之外的其他访问者?

我必须在文件上解决此问题,因此无法导入数据库。开发环境是.NET,语言是C#。

您可以在下面找到以下代码:

            Dictionary<int, Dictionary<int, bool>> dicVisitorCount = new Dictionary<int, Dictionary<int, bool>>();
            Dictionary<int, int> dicPages = new Dictionary<int, int>();


            int million = 1000000;

            for (int i = 0; i < 10 * million; i++)
            {

                pageID = r.Next(1, 100000);
                visitorID = r.Next(1, 1000000);


                if (!dicPages.ContainsKey(pageID))
                {
                    dicPages.Add(pageID, 1);

                    Dictionary<int, bool> dicVisitors = new Dictionary<int, bool>();
                    dicVisitors.Add(visitorID, true);
                    dicVisitorCount.Add(pageID, dicVisitors);
                }
                else
                {
                    if (!dicVisitorCount[pageID].ContainsKey(visitorID))
                    {
                        dicVisitorCount[pageID].Add(visitorID, true);
                        dicPages[pageID]++;
                    }
                }
            }

1 个答案:

答案 0 :(得分:1)

作为一个小问题,我更倾向于Dictionary intHashSet而不是Dictionary intDictionary (此处不需要Dictionary的映射功能)。

如果您不关心确切的结果,Dictionary intbloom filter也可以作为考虑因素(单独计算以跟踪有多少元素在每个布隆过滤器中。)