Ruby 关于性能的数据库设计问题

Ruby 关于性能的数据库设计问题,ruby,database,postgresql,hanami-model,Ruby,Database,Postgresql,Hanami Model,我需要帮助决定DB设计方法。我们正在使用Hanami Ruby web框架和ROM构建一个翻译工具。我们面临的设计决策是为翻译记录提供一个DB Postgresql表,其中每个记录用于一种源语言和一种目标语言的组合。然而,源和目标可以是任何语言:EN-DE、FR-EN 另一种可能是每个语言对的DB表 我们目前有大约150万条遗留记录。我们不会很快达到2.000万,但我们仍然需要考虑。 我们倾向于第一种选择,但它在查询和性能方面是否可行?主要区别在于,对于选项一,必须首先查询匹配的语言,然后触发对

我需要帮助决定DB设计方法。我们正在使用Hanami Ruby web框架和ROM构建一个翻译工具。我们面临的设计决策是为翻译记录提供一个DB Postgresql表,其中每个记录用于一种源语言和一种目标语言的组合。然而,源和目标可以是任何语言:EN-DE、FR-EN

另一种可能是每个语言对的DB表

我们目前有大约150万条遗留记录。我们不会很快达到2.000万,但我们仍然需要考虑。 我们倾向于第一种选择,但它在查询和性能方面是否可行?主要区别在于,对于选项一,必须首先查询匹配的语言,然后触发对相应翻译字符串的查询

两种选择之间的性能是否会有显著差异

多谢各位


seba

第一种方法将是最灵活的,因为您将来可以在不更改模式的情况下添加语言组合。第二种方法意味着您为每种语言组合添加一个表,这将是一个维护噩梦,而且查询多个表的代码也很复杂,这也意味着动态查询会导致性能低下


只要您有足够的硬件并进行了适当的性能配置,PostgreSQL应该能够轻松地处理1500000条记录。我使用过5000万行的PostgreSQL表,它的性能很好。

您可以规范化数据库模式并避免冗余数据

在许多情况下,拥有几张小桌子而不是一张大桌子是很方便的。但这取决于我们的制度,没有一种可能的解决办法

我们还必须负责任地使用索引。我们不应该为每个字段或字段组合创建索引,因为尽管我们不必遍历整个表,但我们正在使用磁盘空间并增加写入操作的开销


另一个非常有用的工具是连接池的管理。如果我们有一个负载很大的系统,我们可以使用它来避免数据库中的连接饱和,并能够重用它们。

我同意,对于PG 1500000记录并不难处理。像任何其他可测量的主题一样,您可能希望运行基准测试,以查看哪个配置工作得更好。另一个建议是使用EXPLAIN,以检查您是否需要索引,或者您的查询是否总体性能良好。您自然会对表进行索引,那么性能实际上与表大小无关。谢谢大家。该表肯定会被索引,我们目前正在考虑6到8种语言组合。