这个问题可能涉及面很广,但是我希望有一些答案可以将我推向某个方向。
假设我正在建立一个事件日历。客户端从服务器获取事件。每个事件都有一个日期,并且在该日期过去之后,事件状态被视为完成。因此,涉及确定事件是否完成的逻辑,在此示例中,这很简单。想象一下,逻辑层要复杂得多,应用程序应该在哪里执行该逻辑?
选项1 –存储在数据库中
因此一种选择是将其存储在数据库中。不利的一面当然是保持数据的一致性,并且有必要使用触发器来使数据保持最新。
选项2 –将逻辑保留在服务器上
每次客户端请求数据时,请在服务器上执行逻辑并作为响应发送。缺点是客户端将对数据库进行许多小写操作,以便服务器每次都必须执行此逻辑,这可能会非常繁琐。
选项3 –在客户端上保持逻辑
客户端获取数据,然后执行逻辑。这里的缺点是客户端需要所有必要的数据来执行逻辑,而数据可能没有。当数据确实应与平台无关时,它还要求每个客户端(Web和应用程序)实施自己的逻辑。
答案 0 :(得分:1)
我建议您将逻辑封装在存储过程或视图中,服务器每次需要数据时都会调用该存储过程或视图。在SQL方面的操作将很快,并且有效载荷将更少。 如果您需要实时计算,这是最有益的,但是如果您确实需要合理的实时性,例如每隔15分钟左右检查并更改一次(取决于事件间隔单位),则可以将结果缓存为服务器在服务器级别上具有到期日期。
如果有效负载不是问题并且逻辑在很大程度上取决于用户输入,则应该在客户端或服务器端对优化的有效负载进行计算。
答案 1 :(得分:0)
关注性能,我的建议是保留在服务器中,但使用任务运行器每分钟在后台执行某些功能并从缓存或队列中加载事件。每个新事件都应该发布到像redis这样的缓存中,每次例程验证事件的日期以使用数据库更新数据来完成事件时,它将使数据库免于许多查询。您还可以使用队列而不是Redis来使事件与例程保持联系,并在完成后将其弹出。 该例程可以与主应用程序共享域,从而避免逻辑冗余。