我目前的项目使用Ruby on Rails作为后端,Oracle数据库和memcached。其中有一个非常频繁使用的功能,依赖于单个数据库视图作为数据源,这个数据源内部包含其他的数据库视图和表。它是一个虚拟的数据库视图,可以从一个地方访问所有内容,而不是一个物化的数据库视图。用户大多数时候都在查看他们想要更新的功能,因此保持数据最新是很重要的。当从这个视图获取数据时,我会将安全表与视图进行内部连接(安全表本身不是视图的一部分),其中包含了一些字段,我们用来控制更细粒度的数据访问。例如,安全表具有
user_id、prop_1、prop_2
列,其中prop_1、prop_2
是数据库视图上可用的列,而user_id
是已登录的用户。一些用户在安全表中具有相同的属性,比如prop_1 = 1 and prop_2 = 1
,但也可能像其他用户一样具有相同的prop_1
,但具有不同的prop_2
,比如prop_1 = 2 and prop_2 = 1
。prop_1和prop_2有许多不同的组合,可以将它们视为另一个表的外键,因此可能有许多条目。现在检索应用程序中的记录的时间几乎是10秒,非常缓慢。我正在考虑替代方法。我首先想到的是物化视图,但由于用户经常进行更新,这可能不是最好的选择,因为刷新视图可能需要时间。我想到的第二件事是使用缓存,将prop_1
和prop_2
组合作为底层数据的复合键,因为许多用户具有相同的组合,谁具有相同的组合就可以访问相同的数据。然而,这种方法可能需要更多的代码重写和逻辑来保存和检索数据片段,而不是像在数据库视图中那样从一个位置进行一次查询。在您的经验中,您是如何解决相同/类似问题的?或者是否有更好的方法我可以尝试?