我有一个包含两列的文件;访问者 ID 和页面 ID。我想找到的是每个页面的唯一/不同访问者的数量。我在 HashTable(dictionary) 中使用 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]++;
}
}
}