Некоторые данные о данных: в игре играют разные игры, и в каждом из них есть несколько игроков. Каждая игра состоит из нескольких раундов, и в каждом раунде каждый вовлеченный игрок делает действие. То, что я пытаюсь сделать здесь, - построить структуру данных в памяти для хранения полной истории отдельных действий, предпринятых игроками во всех играемых играх.Альтернативная структура данных, необходимая для глубоко вложенного положения словаря/карты.
Очевидной структура является глубоко вложенным словарем/HashMap, где каждый 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 Performance Benchmark -- why is :memory: so slow...only 1.5X as fast as disk?
Похоже, вам нужна реляционная база данных, которая живет в памяти. Возможно, попробуйте изучить inMemory SQLite. http://www.sqlite.org/inmemorydb.html – Justin
Вас интересует только просмотр двух примеров, которые вы даете? Или вы хотите делать произвольные запросы? –
@ DougT. Помимо этих двух случаев, я также хочу найти конкретное действие, сделанное любым игроком в любом раунде любой заданной игры. – skyork