0

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]++;
                    }
                }
            }
4

1 に答える 1