65.9K
CodeProject 正在变化。 阅读更多。
Home

Infobright/MySQL 统计工具

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2012年5月22日

MIT

3分钟阅读

viewsIcon

36642

downloadIcon

281

在 Java 中显示 Infobright/MySQL 数据库统计信息

引言

这个 Java 命令行界面 (CLI) 使用 JDBC 驱动程序连接到 Infobright 数据库并显示其统计信息(大小、压缩大小、压缩率等)。该代码可以很容易地修改为与 MySQL 数据库一起使用。这个项目的目标是提供简单、易于阅读的代码,向用户展示如何使用 Java、JDBC 驱动程序、Infobright 和 MySQL。

所需软件

  • Java JRE(1.5 或更高版本)
  • Java IDE(推荐 Eclipse)
  • Infobright 或 MySQL 数据库
  • MySQL 的 JDBC 驱动程序

运行可执行文件

源代码中包含一个可运行的 JAR 文件。 可以从终端运行如下:

java -jar ice_tools.jar [选项]

选项如下:

  • -u 用户名
  • -P 端口 (注意:这是大写字母“P”)
  • -h 主机名
  • -p (注意:此标志不接受任何参数。如果使用,程序将要求输入密码。)

例如:java -jar ice_tools.jar -u admin -P 3306 -h 192.168.1.10 -p

注意:如果未指定选项,将使用默认值。

  • 用户名:“root”
  • 密码:空
  • 端口:“5029”
  • 主机:“localhost”

编辑源代码

使用您选择的 IDE,创建一个新项目并导入提供的文件。 为了使代码成功运行,您必须下载 MySQL 的 JDBC 驱动程序并添加对包含的 JAR 文件的引用。 要在 Eclipse 中执行此操作,请配置构建路径并添加外部 JAR,如下所示。

 

现在,让我们来看一些代码。 UserInterface 类是命令行界面的主类。 该代码不是很重要,因为它要求用户输入、迭代数据结构并打印格式化的文本。

MySqlConnection 类也很简单。 它保存所有连接信息和用于连接和断开与数据库连接的函数。

当程序首次运行时,会构建一个统计数据结构。 我想花点时间描述这个结构。 它有三个级别:总体统计信息、数据库统计信息和表统计信息(列统计信息可以添加为第四个级别)。 总体统计信息保存在 Statistic 类中。 它具有压缩大小、原始大小、压缩率以及将数据库名称映射到 DatabaseStatistic 对象的哈希映射。 DatabaseStatistic 类保存特定数据库的统计信息:压缩大小、原始大小、压缩率以及将表名称映射到 TableStatistic 对象的哈希映射。 TableStatistic 类保存特定表的统计信息:压缩大小、原始大小和压缩率。 请注意,这些类非常相似,可以简化为一个类。 我只是将它们分开以更好地可视化数据。

Statistic 类包含最有趣的代码。 此类中的函数用于构建数据结构。 下面列出的函数用于收集特定数据库的表统计信息。 它返回结果的哈希映射。 请注意,runQuery 是一个辅助函数。

private Map<String, TableStatistic> getTables(String databaseName) throws SQLException {
	ResultSet results = runQuery("USE " + databaseName);
	String query = "SHOW TABLE STATUS WHERE ENGINE='BRIGHTHOUSE'";
	Map<String, TableStatistic> tables = new HashMap<String, TableStatistic>();
	results = runQuery(query);
	while (results.next()) {
		double compressedSize = Double.parseDouble(results.getString("Data_length")) / 1048576.0;
		double compression = Double.parseDouble(results.getString("Comment").split(": ")[1].split(",")[0]);
		double rawSize = compressedSize * compression;
		tables.put(results.getString("Name"), new TableStatistic(rawSize, compressedSize, compression));
	}
	results.close();
	return tables;

} 

注意:以上查询适用于 Infobright 数据库。 如果您想获取 InnoDB 或 MyISAM 数据库的统计信息,请从查询中删除“where Engine='BRIGHTHOUSE'”。 此外,请记住压缩率不会存储在“Comment”字段中。 这是 Infobright 特有的。

有用的查询

在处理这个项目时,我遇到了几个问题。 以下是我发现有用的一些 MySQL 查询。

这列出了每个单独的数据库的大小(以 MB 为单位):

SELECT table_schema, sum( data_length + index_length ) / 1024 / 1024 'Data Base Size in MB',TABLE_COMMENT FROM information_schema.TABLES GROUP BY table_schema; 

这显示了当前安装的 DBMS 的版本:

show variables like 'version_comment'; 

历史

最新版本添加了查看整个数据库的总原始大小、总压缩大小和总压缩率的功能。

结论 

此代码旨在用作构建数据库统计应用程序的起点。 鼓励您修改代码以满足您的特定需求。

© . All rights reserved.