データの背景: いくつかの異なるゲームがプレイされており、それぞれが多数のプレイヤーをホストしています。各ゲームはいくつかのラウンドで構成され、各ラウンド中に関係する各プレイヤーがアクションを実行します。私がここでやろうとしているのは、プレイされているすべてのゲームでプレイヤーが行った個々のアクションの完全な履歴を格納するためのデータ構造をメモリ内に構築することです。
明らかな構造は、深くネストされたディクショナリ/ハッシュマップであり、それぞれgame_id
が多数の にマップされplayer_id
、各 player_id が異なる にマップされround_number
、それぞれround_number
が にマップされますaction
。
つまり、game_id:player_id:round_number:action
. 一方、私も使用できますgame_id:round_number:player_id:action
さまざまな分析目的で上記のデータ構造にアクセスしようとすると、問題が発生します。たとえばgame_id:player_id:round_number:action
、特定のゲームの特定のラウンドでプレイヤーが行ったすべてのアクションを知りたい場合、 があると不便です。game_id:round_number:player_id:action
逆に、特定のゲームの過程で特定のプレイヤーが行ったすべてのアクションを知りたい場合、があるのも同様に不便です。残念ながら、私の場合、これらの両方の質問を頻繁に行う必要があります。
そのようなデータを格納でき、前述のようにプレイヤー レベルとラウンド レベルの両方のデータにアクセスするのに便利な単一のデータ構造があるのではないかと思います。それが重要な場合、実装はPythonになります。
EDIT : このようなリレーショナル クエリを処理するために、インメモリ sqlite データベースを推奨する人が何人かいます。ただし、ここで説明するように、そのパフォーマンスは私にとって問題になる可能性があります: SQLite パフォーマンス ベンチマーク -- なぜ :memory: はとても遅いのですか? ディスクの 1.5 倍しか高速ではないのですか?