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

Database design question regarding performance

我需要帮助来决定数据库设计方法。我们正在使用 Hanami(Ruby 网络框架)和 ROM 构建一个翻译工具。我们面临着为翻译记录使用一个数据库 (Postgresql) table 的设计决策,其中每条记录针对一种源语言和一种目标语言组合。但是,源和目标可以是任何语言:EN-DE、FR-EN。

另一种可能性是每个语言对的 DB table。

我们目前有大约 1.500.000 条遗留记录。我们不会很快达到 2.000.000,但我们仍然需要考虑。

我们倾向于第一种方案,但是从查询和性能上来说是否可行?主要区别在于,对于选项一,必须先查询匹配的语言,然后再触发查询对应的翻译字符串。

这两个选项在性能上会有显着差异吗?

谢谢

塞巴

第一种方法最灵活,因为您将来可以在不更改架构的情况下添加语言组合。第二种方法意味着您为每种语言组合添加一个 table,这既是维护噩梦,又是查询多个 table 的复杂代码(这也可能意味着动态查询导致性能不佳)

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

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

在很多情况下,有几个小的 table 比一个大的 table 更方便。但这取决于我们的系统,没有一个可能的解决方案。

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

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