2

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

另一种可能性是每个语言对的数据库表。

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

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

两种选择之间的性能会有显着差异吗?

谢谢

塞巴

4

2 回答 2

4

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

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

于 2019-09-23T13:43:28.527 回答
0

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

在许多情况下,拥有几张小桌子而不是一张大桌子很方便。但这取决于我们的系统,并且没有单一的可能解决方案。

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

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

于 2019-09-24T06:44:42.373 回答