我正在构建一个大型网络应用程序,帮助“地区经理”管理多个地区的多所学校。
总共有大约400,000名学生和教师。
除了管理成绩等明显的事情之外,我们还必须管理出勤率(每日)。
我习惯于以较小的规模构建Web应用程序,我将其部署到Heroku。鉴于这种规模的系统,我应该考虑从现在开始使用非关系数据库,还是应该坚持使用PostgreSQL并进行特定优化以确保高速和数据完整性?
如果不清楚,那么主要关注的问题之一是系统在这么多表中管理如此多的记录这么慢 - 在关系数据库系统中。
此外,我可以采取哪些常见的优化来确保速度 - 如果建议使用关系数据库?最大,最明显的一个是在最常访问的信息上使用索引......其他任何类似的东西都会非常感激。
感谢。
P.S。我的团队对于我们应该采用的方式存在分歧,所以你们会发出有用的声音来帮助提供平衡:)
答案 0 :(得分:3)
坚持使用postgresql。为什么其他东西会变得更好?
根据您提供的信息,我猜你的表现可能会归结为两件事:
答案 1 :(得分:2)
设计正确的索引是性能体系结构的重要组成部分,但是您没有为信息设计索引,而是为查询设计索引。它与关系数据库和非关系数据库之间的选择几乎没有关系,因为它们都要求你设计“适当的”索引。有关详细信息,请参阅我的演示文稿How to Design Indexes, Really。
答案 2 :(得分:1)
除了性能之外,请务必考虑安全问题。并不是说NoSql数据库一定是坏的,但它是不同的。保护非敏感数据的方法可能不同。
如果您要存储任何个人身份信息,请仔细权衡您的选择,如果您不确定区别是什么,请使用您知道如何保护的信息。
此外,考虑隔离数据可能没什么坏处 - 有些是关系数据而有些则不是。如果您可以灵活地从头开始构建系统,那么在您的情况下最适合您的是适合您的。
建议阅读:
建议观看:
答案 3 :(得分:1)
Facebook运行MySQL。我不知道400K用户是否意味着该系统有400K用户:我不这么认为,但Facebook的数量级还要高出几个并使用MySQL。
事实是:缩放很难。如果NoSQL后端足以轻松扩展,那么现在没有人会真正从关系数据库开始,你认为不是吗?我知道这不是你的问题的回答,但我认为这有简单的无答案。
使用您感觉舒服的任何东西,使用最让您兴奋的东西,使用您认为未来几年会使用的东西,或者使用您认为容易购买的东西。不要在帐户中关注可扩展性以进行此选择,因为在您遇到问题之前,您无法知道如何解决。你甚至不知道它是否完全存在。
顺便说一下,关于容错,缓存和其他一些事情会有很多考虑因素,这些因素会比SQL vs NoSQL对性能产生更大的影响。顺便说一句,并非所有关系数据库引擎都是相同的(并非所有NoSQL数据存储都是......)