我有两个模型,如AttackReport和AttackReportRound。每份报告都可以有很多轮。它描述了如何进行攻击。这就是我最初设计我想做的事情。但是,如果攻击有30轮,那么AttackReportRound表很快就会变得太大。
因此,我想到了一种方法,如果可能,或以最有效的方式将其存储在一行中。攻击回合会保留攻击者命中,伤害,后卫健康等信息。
我在考虑在单个attackReport条目中为每一轮序列化数据,可能是使用逗号分隔值或某种类型的rails序列化。
在这种情况下你会做什么?
答案 0 :(得分:0)
数据库表在执行错误之前可以容纳很多行,尤其是在正确使用索引的情况下。您是否考虑过在其他表中“归档”旧的AttackReport和AttackReportRound条目?这假设一年前的AttackReport不经常被查询 - 完全取决于你的应用程序在做什么。
如果您使用序列化,我会使用内置的Rails(它可以序列化为yaml,只需要很少的编码),然后再进行自己的CSV解决方案。
答案 1 :(得分:0)
您可以序列化为JSON并将其存储在一行中。您的数据库可能会变小,但您将失去一些灵活性,可能会失去性能。
您还可以尝试像Mongo这样的面向文档的数据库。可能会为你工作,因为AttackReport将成为一个文档,AttackReportRounds将是记录或子文档。