关于某项目功能划分的问题,请大家支招。

cswxzx 2012-04-10 12:27:34
我现在在负责一个项目,分客户端,控制端,服务器三个,现在有一个功能是统计功能,客户端不停的发送采集的数据到服务器,而控制端会有很多种界面方式去展示经过计算后的数据,服务器负责发送和中转数据。控制端有1-N个。
现在的问题是,控制端界面中显示的数据由谁产生?目前有两种思路:

1.服务器根据控制端各界面显示要求在服务器端计算生成最终显示的数据发送给控制端显示,原始数据保存在服务器端,控制端在界面做不同的条件组合或不同的统计方式都需要发送命令给服务器,由服务器根据条件来生成最终的显示数据后发送给控制端,有点像Web服务器的做法。

2.服务器定时将客户端发送的数据经过粗略的处理后发送给控制端,由控制端保存并根据不同界面及统计方式来展示数据,界面最终显示的数据都由控制端自己处理,因为控制端有保存原始数据,所以想怎么显示都可以,与服务器没有关系了。

各位大牛帮忙分析下利弊,哪种方式更合理,谢谢了。
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cswxzx 2012-04-16
  • 打赏
  • 举报
回复
谢谢大家的帮忙,我个人还是比较倾向于由控制端自己来处理数据,控制端的显示模型有很多种,如果控制端每个显示模型都要服务器来计算生成结果,那是典型的Web服务器处理的方式,瘦客户端模式了。
cswxzx 2012-04-11
  • 打赏
  • 举报
回复
控制端显示的数据是控制端在界面上选择不同的查询条件生成的,每个控制端可以用不同的条件来查询,比如按时间统计,按类型统计等等。

前面说的第一种方式是服务器定时(比如2分钟)将原始数据转发给所有控制端,由控制端进行统计显示,这样的网络数据量传输是比较多一些。

第二种方式是控制端根据不同查询条件向服务器请求数据,服务器按查询条件生成控制端需要的最终数据发送给控制端,哪个控制端请求就计算生成数据并回复给请求的控制端,这样就需要定义很多协议,以后不方便升级扩展。

另外,服务器不是专门用来做统计的,还有其它很多数据需要处理。
谢谢大家的建议,但我还是没能决定下来到底用哪种方案比较好。
muyi66 2012-04-11
  • 打赏
  • 举报
回复
你可以先做一下预估,看看两种方式传输的数据量差值究竟有多大。

传输原始数据的方式比较好估计,很容易得到总规模。
传输查询数据的量就比较费事了。要先预估每台机器的平均查询密度,再估计各类查询发生的比例,每类查询一次需要的数据量额度。然后计算出查询数据量的总额。

如果这个总额远小于原始数据的总规模,那就值得把查询功能放到服务器上。如果差距不太大,那就没必要了。有数据库的支持,服务器做一些数据查询还是很简单的事情。

要进一步降低服务器负载的话,还可以考虑在控制端存储曾查询过的数据,从而减少它向服务器请求数据的次数和规模。不过这样的设计比较复杂,需要小心。
muyi66 2012-04-10
  • 打赏
  • 举报
回复
服务器收集并整理数据,将经过整理的数据按收集时点排序保存。

控制端自身保存已经得到的数据,并在需要新数据时向服务器发送请求。数据请求中带有时点信息,服务器在提供数据时忽略该时点及以前的数据,仅提供后来的新数据。

这样做可以充分利用控制端机器做数据存储、处理和显示,不需要太高的服务器能力。
muyi66 2012-04-10
  • 打赏
  • 举报
回复
服务器究竟发送什么样的数据取决于控制端究竟是什么样的需求。

如果所有的控制端都有同样的需求,都要把数据做相同的处理,而且处理后的数据传输量更小。那么服务器应该先对数据作预处理,然后将处理好的数据传递给控制端。

如果控制端的需求不一,无法做同样处理;或是控制端只需要最原始数据;或中间处理不能缩减反而会增大数据传输规模;或服务器负载本身很重,无暇再做处理......等等情况,都不能在服务器上进行数据预处理了。
Coder_Y_Jao 2012-04-10
  • 打赏
  • 举报
回复
一般来讲,对于服务器没有意义的东西,应当尽量交给接收方处理,
特别是界面这种完全可以再控制端分布完成的东西,没必要给服务器增大压力
cswxzx 2012-04-10
  • 打赏
  • 举报
回复
其实问题的核心在于服务器要给控制端发送什么样的数据?
是原始数据,还是经过处理后的数据?

如果是原始数据,那控制端就需要进行统计计算,也比较灵活,想按什么方式统计显示都可以,跟服务器没什么关联,可能有个问题,控制端机器配置不是很高,大量运算可能会对其它程序有影响。

如果是服务器按控制端要求处理并生成最终显示数据,那控制端直接拿来显示就可以了,但需要定义很多协议来进行交互,以后维护升级会非常麻烦,只要控制端统计数据有变动,服务器也需要跟着修改。
cswxzx 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

服务器收集并整理数据,将经过整理的数据按收集时点排序保存。

控制端自身保存已经得到的数据,并在需要新数据时向服务器发送请求。数据请求中带有时点信息,服务器在提供数据时忽略该时点及以前的数据,仅提供后来的新数据。

这样做可以充分利用控制端机器做数据存储、处理和显示,不需要太高的服务器能力。
[/Quote]
非常感谢muyi66,你的意思是原始数据是要发给控制端的,由控制端通过对原始数据的处理得到最终界面显示的结果的吧?

5,531

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧