我正在开发一个涉及数据库中更新/选择查询执行非常高的应用程序。
我有一个基本表(A),该表每天将有一个实体约500条记录。对于系统中的每个用户,将根据用户的某些首选项创建此实体的变体,并将它们存储在另一个表(B)中。这是通过每天在午夜运行的Cron作业完成的。
因此,如果表A中有10,000个用户和500条记录,则该天表B中将有500万条记录。我总是将数据保留在这些表中一天,午夜将历史数据存档到HBase。此设置运行良好,到目前为止,我没有任何性能问题。
最近业务需求发生了一些变化,现在基本表A中的某些属性(对于15-20条记录)将每20秒更改一次,因此我必须重新计算表B中所有这些变化记录的某些值,全部用户。即使仅更改20条主记录,我也需要重新计算并更新200,000条用户记录,这花费了20秒钟以上的时间,然后才发生下一次更新,最终导致所有Select查询排队。我从在线用户那里得到3个获取请求/ 5秒,这导致6-9个选择查询。为了响应api请求,我总是使用表B中的字段。
我可以购买更多的处理能力来解决这种情况,但是我对拥有一个可以处理甚至一百万用户的适当缩放的系统感兴趣。
这里有人可以提出更好的选择吗?Nosql +关系数据库对我有帮助吗?是否有任何平台/数据存储可让我频繁地更新数据而不会锁定,同时又使我能够灵活地在实体的各个字段上运行选择查询?