我有一个包含两列的文件; 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]++;
}
}
}
答案 0 :(得分:1)
作为一个小问题,我更倾向于Dictionary
int
到HashSet
而不是Dictionary
int
到Dictionary
(此处不需要Dictionary
的映射功能)。
如果您不关心确切的结果,Dictionary
int
到bloom filter也可以作为考虑因素(单独计算以跟踪有多少元素在每个布隆过滤器中。)