【数据库部分】数据库的表结构方面没有特殊要求。
所有操作都必须做成存储过程供应用程序来调用。
每个存储过程的首参数是一个输出的int,名为ret。其他参数排布在其后。
存储过程中所有操作使用事务包裹起来,并设置异常处理。处理方式是rollback,并设置ret为约定的缺省错误码(实际使用时设置为-1)
存储过程向应用程序返回数据时,用“select 行标识,其他字段”的方式。其中,行标识的作用是指定该条数据的类型。这个类似网络通信封包的命令号的概念。
ret为OK(实际使用时值为0)表示存储过程无错执行。其他值表示有错误。
存储过程要返回错误时,设置ret为要返回的错误号码,并rollback,然后leave最高层begin,end。
【应用程序部分】
调用存储过程时,使用统一的接口,调用参数打成一个包(实际使用时采用网络封包相同的容器)。
返回的数据行,通过行首的“行标识”字段来识别其数据含义。
当返回的ret不是OK值(0)时,则不处理返回的任何数据行。
【优化】
建立数据库连接池。
在线程池中进行存储过程的调用。并对返回数据进行打包(vector)
在逻辑线程中进行数据的处理。
使用协程技术,将异步的数据库操作变成同步的执行顺序。
【通用性和扩展性】
调用时使用的是封包容器,所以整个应用程序(一般为服务器应用)数据容器都非常统一,而且接口也可以做成非常一致。简单的说就是像发网络封包一样调数据库。
返回的数据,都是带“命令号”的,可以用处理网络封包的方式去处理。在服务器应用中,也是能够和各种服务逻辑统一在一起。
要扩展数据库操作,只要写存储过程,并处理新增的数据命令号即可,减少了很多重复的工作,提高了数据库相关逻辑的开发速度。