日志查阅
在2.4出现后台服务器挂掉的情况后,我立即去查看了容器的日志信息,获得了如下日志:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [default-logger][06:16:43][9][info ][HTTPServer.cpp:415] [消费者获取菜品详情]成功,dish id:D7d33e8b47dda [default-logger][06:16:43][9][trace ][HTTPServer.cpp:416] { "dish" : "{\n \"base_price\" : 11.0,\n \"description\" : \"11\",\n \"icon_path\" : \"https://ts3.cn.mm.bing.net/th?id=ORMS.800de0e05f326302bea15ba2e5ff707d&pid=Wdp&w=268&h=140&qlt=90&c=1&rs=1&dpr=1.5&p=0\",\n \"is_delete\" : false,\n \"merchant_id\" : \"Afdaf4ca89c1d\",\n \"merchant_name\" : \"11\",\n \"name\" : \"11\",\n \"price_factor\" : 1.0,\n \"uuid\" : \"D7d33e8b47dda\"\n}" } [default-logger][06:16:43][13][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][13][debug ][DatabaseClient.cpp:646] 数据库查询消费者订单列表,consumer id: Ae1c45d30139c [default-logger][06:16:43][13][info ][HTTPServer.cpp:519] [消费者获取订单列表]成功,总数:1 [default-logger][06:16:43][8][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][8][debug ][DatabaseClient.cpp:646] 数据库查询消费者订单列表,consumer id: Ae1c45d30139c [default-logger][06:16:43][8][info ][HTTPServer.cpp:519] [消费者获取订单列表]成功,总数:1 [default-logger][06:16:43][15][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][15][debug ][DatabaseClient.cpp:646] 数据库查询消费者订单列表,consumer id: Ae1c45d30139c [default-logger][06:16:43][14][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][12][debug ][HTTPServer.cpp:394] 收到HTTP请求, method=POST,path=/consumer/dish/dishInfo [default-logger][06:16:43][11][debug ][HTTPServer.cpp:394] 收到HTTP请求, method=POST,path=/consumer/dish/dishInfo [default-logger][06:16:43][10][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][9][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][13][debug ][HTTPServer.cpp:496] 收到HTTP请求, method=POST,path=/consumer/order/list [default-logger][06:16:43][8][debug ][HTTPServer.cpp:394] 收到HTTP请求, method=POST,path=/consumer/dish/dishInfo [default-logger][06:16:43][15][error ][DatabaseClient.cpp:669] 获取用户订单失败喵! 错误码: 1461 信息:
|
可以看到,最后数据库客户端抛出了异常并被捕获,然后输出了报错信息,尽管没有显示具体信息,但是给出了错误码1461
。
经过查询可得,MySQL Connector/C++
中错误码1461
的意思是:字符串过长错误
,尽管我们只执行了查询语句,即select
语句,但是由于字符的编码会影响字节长度,内存碎片影响字符串长度等一系列不稳定的问题,仍然会造成字符串长度溢出等问题,因此在这个版本中我们要修改优化对数据库的查询。
重新设计表
原本的表为字段设置的长度是刚刚好的,这就导致长度检查十分严格。所以这次重新设计表设置一些冗余长度
uuid
: varchar(13) -> varchar(32)
name
: varchar(10) -> varchar(16)
同时为了弥补之前没有主键的严重问题,我们为每一个表都增加了自增主键字段,为什么不用uuid
作为主键呢?因为uuid
过大,作为主键会使效率大大下降,远不如使用较小的自增主键+uuid
新建索引的模式
1
| `id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
阶段测试
重新生成数据库后又简单测了一下,还是挂了。
连接池系统改动
可能是由于所有的请求都走的同一个连接对象,尽管每一个函数调用都是有锁保护的,应该不会因为并发访问同一个连接对象导致线程安全问题,但确实会把所有的负载加载到同一个连接对象中,所以我们采用连接池的方式来管理连接对象,并实现池级的负载均衡。