问题:
目前查询和统计信息获取速度太慢,导致前端界面有明显卡顿效果,影响使用。经过仔细分析,发现问题在于MYSQL执行SQL语句过于缓慢,进过三周的努力优化SQL,仍然不能快速响应前端的调用,因此决定采用NOSQL的方式解决问题。
NOSQL数据库:
NOSQL的数据库有很快的响应效果,但是创建比较慢且修改比较困难,因此这里只将商标信息(商标信息为固定更新,每次更新同步一遍数据即可)导入。目前市面上的NOSQL数据库很多,这里采用SOLR,原因如下:1、SOLR为市面上比较常见的NOSQL数据库,其他软件支持能力比较好;2、SOLR自身功能比较强大,足够目前使用;3、之前使用过SOLR进行其他软件开发,有一定的基础,快速上手。
SOLR关于数据的导入:
数据导入分为多步骤,首先将商标表全部数据导入,这样可以数据的完整性。其次进行其他数据导入,如:申请人、企业、政府机构……这些数据采用多值的方式存在数据库中,确保查询以及统计的正确性。
SOLR关于查询的优化:
通过加宽表的方式把所有可用到的查询字段全部放到SOLR中,这样只要对需要查询的字段进行一次查询即可快速获得结果。
SOLR关于统计的优化:
目前统计基本分为两个维度:1、时间2、地域。其中时间采用SOLR自带的时间分割查询即可,而地域问题则比较复杂,因为考虑到嵌套关系,因此我在SOLR中的单独加了一列把所有从大到小的全部地域都存在里面,这样只要根据这列分组自然可以实现通过地域分组。