练习工程 – Postgres XL Statistics

写这个工具的目的是为了方便查看Postgres-XL运行状态和一些统计指标,同时也是尝试用一些框架或开源项目,了解下它们能做什么和怎么做。源码地址

工程界面

pgxl-stat-001

pgxl-stat-002

工程说明

在linux中部署结构如下:

pgxl-stat-003

启动停止脚本见src/main/resources/shell/pgxls.sh。

用到的东西

  1. MVC框架:SpringBoot

    SpringBoot是为了简化spring各组件的整合而生的开发框架。在配置项上融入了大量“约定优于配置”的思想,可以理解为给可配置的参数一个约定俗成的默认值,让开发者从复杂多变的配置中解脱出来,只关注那些对应用程序来说需要配置的参数。尽管如此,其实对开发者来说还是有必要了解下所有参数是怎样约定的,参考这里。SpringBoot不仅在数据库访问、模板引擎、缓存、消息队列、邮件等诸多方面支持大量第三方框架和工具的集成,还在应用服务器上支持内嵌Tomcat、Jetty,使其部署更加便捷。

    这次的练习工程引入了org.springframework.boot:spring-boot-starter-web、org.springframework.boot:spring-boot-starter-jdbc、org.springframework.boot:spring-boot-starter-thymeleaf三个依赖项目。其中spring-boot-starter-web内嵌了tomcat容器;spring-boot-starter-jdbc是通用的JDBC数据访问层;spring-boot-starter-thymeleaf是对展现层的模板引擎thymeleaf的支持。

  2. 嵌入式数据库:SQLite

    SQLite是一个集成在应用程序内的关系数据库,遵循ACID原则,实现了大多数SQL标准,常用于小型的本地存储。它的特点是将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。写操作对整个数据库文件加锁,所以写操作只能串行,不能并发。

    在练习工程中,由于配置了比较多的定时读写任务,很容易出现并发写,所以通过“写操作入队列+单线程执行”的方式实现了写操作的串行。也可以简单粗暴地把SQLite使用的连接池配置成只有一个连接,这样无论读写,都串行执行,毕竟用的人不多。

  3. JDBC连接池:Druid、C3P0

    Druid是阿里巴巴开源的支持监控的JDBC连接池。有个新晋的大数据实时处理系统也叫Druid,名字雷同。C3P0也是一个JDBC连接池,存在年头较长。据有人测试Druid的性能要比C3P0等其他JDBC连接池好很多。

    在练习工程中,这两个连接池都支持,可以通过配置项选择使用哪一个。对于spring的jdbc来说只是创建不同DataSource实例的区别。但对于SQLite数据库,如果使用的是Druid,需要注意设置dataSource.setPoolPreparedStatements(false),否则会报ERROR c.a.d.p.DruidPooledPreparedStatement – getFetchDirection error java.sql.SQLException: ResultSet closed,这可能是当前版本SQLite的一个bug。

  4. JSON工具:Fastjson

    Fastjson是Java对象跟Json格式字符串互转的工具,也是阿里巴巴开源。据有人评价虽然比Jackson快,但是有一些不标准的实现且功能不够完善。至少到目前为止更推荐使用Jackson。

  5. 模板引擎:Thymeleaf

    Thymeleaf是一个服务器端的Java轻量级模板引擎,主要用于web页面展现,是SpringBoot推荐使用的展现层模板引擎。类似于JSP、FreeMarker、Velocity。

  6. CSS和HTML框架:Bootstrap

    Bootstrap是集大众审美的CSS和众多Javascript功能于一身的开源的前端框架,由Twitter贡献。在没有美工参与的情况下,普通开发者使用Bootstrap也能做出比较顺眼的界面。

  7. 图表工具:Echarts

    Echarts是百度旗下的用于图表展现数据的UI,简单易用。

    练习工程中的“单位时间内完成事务数(TPU)”的趋势图使用的Echarts。

Creative Commons License

本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但请保留文章署名wanghengbin(包含链接:https://wanghengbin.com),不得用于商业目的,基于本文修改后的作品请以相同的许可发布。

发表评论