Я создаю приложение, в котором буду собирать статистику из игры. По сути, я буду парсить логи, где каждая строка — это игровое событие. Существует около 50 различных видов событий, но многие из них связаны между собой. Каждое событие имеет определенный набор значений, связанных с ним, и связанные события имеют много общих атрибутов. Всего существует около 50 атрибутов, но любое событие имеет только около 5-10 атрибутов.
Я хотел бы использовать Rails для бэкэнда. Большинство запросов будут связаны с типом события, а это означает, что меня не особенно волнует, как два типа событий соотносятся друг с другом в каждом заданном раунде, так как меня интересуют данные одного типа события во многих раундах. Какую схему я должен построить и какую базу данных я должен использовать?
Учитывая реляционную базу данных, я подумал о следующем:
Иметь плоскую структуру, в которой есть только пара таблиц, но таблица событий имеет столько столбцов, сколько есть общих атрибутов событий. Это привело бы к большому количеству нулей в каждой строке, но позволило бы мне легко получить доступ к тому, что мне нужно.
Имейте таблицу для каждого типа события, между прочим. Это позволило бы мне сэкономить место и повысить производительность, но кажется чрезмерным иметь такое количество таблиц, учитывая, что события на самом деле не являются отдельными «идеями».
Сгруппируйте связанные события вместе, сводя к минимуму как количество таблиц, так и количество атрибутов в каждой таблице. Тогда проблема становится группировкой. Это далеко не однозначно, и может потребоваться много времени, чтобы правильно установить супертипы событий. Кроме того, это не полностью решает проблему наличия достаточного количества нулей.
Также было предложено изучить использование базы данных NoSQL, такой как MongoDB. В данном случае это кажется очень применимым, но я никогда раньше не использовал нереляционную базу данных. Кажется, мне по-прежнему нужно много разных моделей, даже если у меня не будет таблиц для каждой из них.
Есть идеи?