我需要帮助来决定数据库的设计方法。我们正在使用Hanami (Ruby web框架)和ROM构建一个翻译工具。我们正面临这样的设计决策:为翻译记录设置一个DB (Postgresql)表,其中每个记录对应一个源语言和一个目标语言组合。但是,源和目标可以是任何语言: EN-DE、FR-EN。
另一种可能是每个语言对的DB表。
我们目前大约有1.500.000条遗留记录。我们不会很快达到2.000.000,但我们仍然需要考虑它。
我们倾向于第一种选择,但它在查询和性能方面可行吗?主要区别在于,对于选项一,必须首先查询匹配的语言,然后触发对相应翻译字符串的查询。
这两个选项之间的性能是否会有显着差异?
谢谢
seba
发布于 2019-09-23 21:43:29
第一种方法将是最灵活的,因为您将来可以在不更改模式的情况下添加语言组合。第二种方法意味着您将为每个语言组合添加一个表,这既是维护的噩梦,也是查询多个表的复杂代码(这也可能意味着导致性能低下的动态查询)。
如果您有足够的硬件并进行了适当的性能配置,PostgreSQL应该能够轻而易举地处理1500000条记录。我使用过包含5,000万行的PostgreSQL表,它执行得很好。
发布于 2019-09-24 14:44:42
你可以标准化你的db模式,避免冗余数据。
在许多情况下,用几个小表代替一个大表是很方便的。但这取决于我们的系统,没有一个可能的解决方案。
我们还必须负责任地使用索引。我们不应该为每个字段或字段组合创建索引,因为尽管我们不必遍历整个表,但我们正在使用磁盘空间并增加写操作的开销。
另一个非常有用的工具是连接池的管理。如果我们有一个负载很大的系统,我们可以使用它来避免饱和数据库中的连接,并能够重用它们。
https://stackoverflow.com/questions/58062276
复制相似问题