一个综合数据库设计与软件设计的实例讨论

原创 2004年09月20日 19:24:00
面是我在接到了一个项目设计后的思考,这个项目是向不同的用户群(公司)提供wappush技术,说白了也就是做一个制定的ppg。具体的发送已经由底层封装好,并且提供了规范的api,此项目需要做的就是完成对不同的sp实现接口,让他们通过此系统进行push发送。此系统的功能要求是需要有稳定的性能、有日志记录。

下面是我接到的设计

1。接口部分,提供Socket的接口调用给SP使用,为了提高性能,必须采用多线程并结合队列实现。并提供一个client的例子

注意,需要经过身份认证方可使用,否则报错。

 2。数据库设计:(用mysql实现)
   3个表:
   SP表:
   mobile_user:每一个push,都应该把用户登记到这个表中,sp_id可以通过登录获得,请keith补充。
   pushlog表:把每次发送的信息记录在这个表中。


3。管理界面:(用php实现)
 a.SP的add,remove,delete,update, search may not required
 b.给一个手机号,能查出是哪家sp发送的push,有多少,列出来
 c.选择SP,统计出一段时间的发送信息,有多少条,成功率
 d.给一个主题,能查出是哪家sp发送的

4.数据库er图:

------------------------------------------------

在看了上面的设计后,我给我的头回信如下:

头你好:
 设计已经收到,不过我个人觉得有些地方可能需要再讨论一下:
  1 首先使用Socket的方式实现接口
    如果只提供Socket的方式实现接口,会存在平台兼容性问题,因为各个sp可能使用不同的开发语言,当然,这个问题应该可以解决,不过这样也增加了sp的工作难度,如果增加了工作难度,那么各个sp可能考虑会调用其他的难度要求较低的push网关来实现。我建议我们提供两套接口:Socket接口和WebService接口。
  2 数据库设计部分,我个人看过设计后,总有些疑惑,说出来我们讨论一下吧:)
    如果按照当前的数据库进行实现,分析一下从一个sp的push请求到我们将这个请求发送到手机用户的过程,我想可能有两种方式去实现:
 a)直接发送一步到位的实现方式;
 b)采用供应者-消费者模式。
 首先我们来分析第一种方式:当sp的一个调用请求到达我们的系统,我们首先进行sp鉴权(认证),对sp表进行select操作(建议对sp的鉴权操作这块使用内存数据库技术以提高性能),在鉴权通过的情况下我们将会进行发送操作,首先需要对mobile_user表进行select操作(因为也许这个sp的mobile_user已经存在),根据select的结果分成两种情况:1.如果此sp的mobile_user表中没有这个手机用户, 则对mobile_user表进行insert,然后进入下一步;2.如果此用户已经存在,则直接进行下一步。下一步是进行发送操作(我们调用底层接口进行),在发送完毕后进行对pushlog表的insert操作。这种实现的担心是:1.对mobile_user的多余select,每一个sp-push的调用请求对要对应对mobile_user进行select,而且随着系统的运行时间增长,mobile_user表的记录数量也在不断增长,这里消耗的系统性能会越来越多;2.如果系统发生异常,不能记录用户的手机号码等资源,不能对sp-push调用进行日志记录,因为我们是在所有操作都结束时候进行log的;3.如果我们调用底层的接口push发送未能成功或者我们的调用部分发生错误异常,系统会瘫痪,无法记录解下来的sp-push日志和进行re-push操作。
 

然后我们再来分析一下第二种方式:第二种方式使用供应者-消费者模式实现(我倾向于这种方式,因为这种模式从根本上避免了第一种实现的第2、3点担心)。当sp的push请求到达我们的系统,首先进行鉴权,这个过程无需多说,鉴权通过后对mobile_user表进行select操作(因为也许这个sp的mobile_user已经存在),根据select的结果分成两种情况:1.如果此sp的mobile_user表中没有这个手机用户, 则对mobile_user表进行insert,然后进入下一步;2.如果此用户已经存在,则直接进行下一步。下一步是进行对pushlog表的insert操作,insert pushlog表的部分字段(这些字段可能包括:id, mobilej_user_mb_id, subject, url, create_date[采用供应者-消费者模式必须增加这个字段], sent_status)。到此为止供应者行为结束。同事进行的消费者操作比较简单:首先对mobile_user表和pushlog表进行联合select操作(检索出sent_status为“未发送”状态的记录),然后发送(调用底层接口进行),最后对pushlog表进行update操作(更新的字段可能包括:sent_date, sent_status)。这种实现的担心之处:1.供应者对mobile_user的多余select,每一个sp-push的调用请求对要对应对mobile_user进行select,而且随着系统的运行时间增长,mobile_user表的记录数量也在不断增长,这里消耗的系统性能会越来越多;2.供应者和消费者同事对pushlog表进行write操作,在操作十分频繁,pushlog表的记录数量很多(会随时间增长)的情况,很用以产生数据库死锁;3.消费者对mobile_user表和 pushlog表的联合select操作,这两个表都会随着时间不断增长(从均衡角度衡量,前者非线性后者线性,造成一对多的关系),那么这个操作的系统消耗也会随着系统的运行时间呈非线性增长。

---------------------------------------------------------------------------------------------------------------------------------------------

请各位帮助分析一下我的分析是否正确?还有一个问题,就是关于使用socket接口实现还是使用webservice接口实现的争论,从性能上、安全性等等,哪种方式更好一些呢?

一个简单数据库设计例子

一个曾经做过的简单的管理系统中数据库设计的例子,包括设计表、画ER图、建模、脚本. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...
  • Jerry_1126
  • Jerry_1126
  • 2015年03月17日 10:39
  • 19154

数据库课程设计-----------学生选课管理系统的设计

由于时间关系,里面许多图片都已经变形或错位        课程设计(学年论文)         题目:学生选课管理系统的设计与实现                        ...
  • zxq1138634642
  • zxq1138634642
  • 2013年06月26日 15:31
  • 80703

软件设计——约束

作为软件开发者 我们设计的每一个软件都存在于现实生活中,所以一定会存在约束条件的 约束可以驱动 塑造和影响软件系统的架构 你工作的组织和环境都会给你强加一些约束 影响你的架构 1.时间和预...
  • u012760183
  • u012760183
  • 2016年06月13日 22:51
  • 1999

综合作业:图书管理系统

图书信息管理系统 要求:设计一个程序来管理图书信息,能实现图书相关信息的具备数据的输入、查找、删除等功能,能实现。具体功能细节可以根据自己理解情况进行增加...
  • u013930733
  • u013930733
  • 2014年06月21日 11:04
  • 576

深入DAO业务设计-软件分层设计

在以后任何的数据库的开发过程之中,客户端(可以简单的把主方法当做一个客户端)程序类一定不要出现任何的JDBC代码。 从数据库的开发开始就已经开始进入到了实际的项目开发环节,随着技术的不断发展与完善,...
  • qq_34280276
  • qq_34280276
  • 2016年10月19日 21:43
  • 354

【软件设计】六大设计原则讲解

1. 单一职责原则 -Single Responsibility Principle SRP,Single Responsibility Principle: There should...
  • scboyhj__
  • scboyhj__
  • 2015年08月21日 23:05
  • 7999

数据库设计案例分析

一、树型关系的数据表   不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添...
  • u011130752
  • u011130752
  • 2016年06月30日 09:39
  • 6438

面向数据流的设计方法

面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。 在软件工程的需求分析阶段,信息流是一个关键考虑。通常用数据流图描绘信息在系统中加工和流动的 情况。面向数据流的设计方法定义了一些不...
  • qq_15037231
  • qq_15037231
  • 2017年03月06日 20:15
  • 1745

什么是软件设计模式?

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于...
  • Jungle_hello
  • Jungle_hello
  • 2016年04月17日 15:38
  • 1292

设计模式综合实例分析之数据库同步系统(三)

接“设计模式综合实例分析之数据库同步系统(二)“。         6. 策略模式       由于表数据的同步方式有三种,分别是增量同步、先Delete后Insert方式、临时表方式,因此可以定义一...
  • LoveLion
  • LoveLion
  • 2013年03月14日 10:00
  • 8772
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个综合数据库设计与软件设计的实例讨论
举报原因:
原因补充:

(最多只允许输入30个字)