实现动态逻辑层以对查询进行排序

时间:2016-11-02 22:04:43

标签: mysql database database-design nosql

在这里,我只是在寻找可以满足我的要求的意见和可靠的技术推荐,这就是我将使用伪代码的原因。

我需要的是是实现一个图层,它允许我动态地订购一个可以返回大量行的复杂查询。

我拥有的是用户的MySQL数据库,按字段排序' RANK',此字段是一个整数,每次用户更新其数据时都会重新计算(通过观察者模式异步地),在某种程度上它是'值'用户,其中考虑了许多相关的表和用户的信息。

伪代码示例:

if (user.meetARequeriments()) rank += REQUERIMENTA_VALUE // 10
if (user.meetBRequeriments()) rank += REQUERIMENTB_VALUE // 20
if (user.meetCRequeriments()) rank += REQUERIMENTC_VALUE // 15
...

检查用户是否符合X requeriments的逻辑可以采用N&Q;其中IN'等等。

所有需要的计算最多可能需要2个/每个用户,这就是为什么它在队列中异步解析

这个字段允许我使用N个条件(可以包括N个相关表)执行查询,而不关心结果的数量,因为我将在我的数据库引擎上通过RANK订购,我将能够对查询进行分页没问题。

我想要的是是能够动态订购查询,允许我拥有动态RANK而不是通用RANK,这意味着我可以拥有变量而不是常量,这些变量取决于执行搜索的客户的一系列偏好。

伪代码示例:

if (user.meetARequeriments()) rank += getPersonalizedRequerimentAValue() // 12
if (user.meetBRequeriments()) rank += getPersonalizedRequerimentBValue() // 15
if (user.meetCRequeriments()) rank += getPersonalizedRequerimentCValue() // 20
...

问题是,为了在我的应用程序层中执行此动态RANK分配,我将不得不获取所有结果,然后迭代n次以设置相应的值(不可行,因为它需要几个小时),以便我可以根据客户的偏好(这不能通过分页获得性能)返回由此新生成的RANK所决定的结果。

我想到的解决方案是试图将我的应用程序的所有逻辑直接计算到查询(使用subquerys),但我不知道是否这甚至可以尝试使用MySQL数据库(如果它甚至意味着任何性能提升),或者我应该转向另一种数据库技术以便能够执行这些复杂的操作。

如果需要,请向我询问更多信息,或澄清一些事情。每个意见/小费都表示赞赏。感谢。

0 个答案:

没有答案