2 つの列を含むファイルがあります。訪問者 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]++;
}
}
}