我是一个拥有200多名用户的成长型公司的四人团队的一员.是时候对我们的专有软件进行大规模重构了,我们非常高兴能够构建一个理想的系统,我们知道它可以承受至少5年的增长.然而,我们正在使用关系数据库,虽然我们正在制作一些相当不错的设计,但我有一种迫在眉睫的感觉,即此产品可能会比我们希望未来更慢.
我担心的是我们对外键关系的使用.它们非常适合数据完整性,这就是我们与它们合作的原因.如果我们想要更改某人的用户名,则会在所有相关位置更改它.那很棒.问题是,我们不是 – 我们通过他们的ID相关联,因此唯一的主要好处是获得关系密钥索引所获得的性能.
所有这些指数堆积如山,给我一个红旗.我们有一些表只是链接表,有三个关系键.他们肯定有自己的位置,我们非常有信心减少我们将要进行的查询.但是,我接着想 – 我们有10,000行,其中10,另一行10,000,我们想添加一行.巴姆!新指数* 4.
这令人担忧.我们会陷入任何陷阱,经验丰富的个人提出的建议是什么?
最佳答案
你当前的系统有多快?设计一个好的数据库模式是整个应用程序的基础,如果我在速度和设计之间做出决定,我会选择设计.有许多方法可以加速您的应用程序,这与数据库本身无关.
如果您进行并行安装(使用新系统运行旧系统),您可以监视慢速查询日志并在早期阶段阻止任何初始缓慢问题.您还可以通过添加新的或编辑现有索引来识别常用查询并优化查询.
您还可以实现一个缓存层,这将大大加快您的应用程序.缓存充当应用程序和数据库之间的一个层,您可以在其中以易变但可快速访问的状态存储常用请求的信息.
另一种优化技术是扩展(增加单个机器的物理容量)或扩展(通过复制在群集中添加更多机器).我看到系统运行速度非常快,有1000万条记录,在64GB内存的机器上运行.因此,确保您的设计包括物理容量.
您可以遵循一系列优化技术来确保快速的数据库;远离文本列,不要使用OR运算符,从ORDER BY RAND()开始,并限制使用分组运算符,例如group by.这些只是一些例子,所以做一些研究.为了使优化更容易,您可以使用MySQL的解释等工具,它将确定在运行应用程序时查询的痛苦程度.
我强烈建议使用Percona’s MySQL构建,因为它们经过高度优化并提供自定义功能.
听起来你和你的团队正走在正确的道路上,不要太担心设计一个复杂的系统.某些软件应用程序需要复杂的系统来运行真正的诀窍是使复杂的系统易于使用,以便您可以轻松地支持它并在将来发展它.祝好运.