在本文中,我们将结合IBM™Persistence API使用IBM DB2作为数据源,描述PCC系统中的数据存储。 此外,我们讨论了如何使用Graphite来检测代码库和工作负载。 最后,我们描述了用于分析数据的工具。
IBM DB2和Java Persistence API
DB2是IBM关系数据库服务器,已在整个PCC系统中广泛用作持久数据存储。 我们往返于DB2的主要接口是通过Java的持久性API(JPA2)。 Java Persistence API提供了一种将Java对象映射到关系数据的方法,例如表中的行或数据库中的视图。 我们还使用Liquibase来更新DB2数据库模式,因为它提供了模式版本控制和回滚功能。 在XML标记中描述了模式更新,每个模式更改都是单个更改集条目的一部分。 这样就可以将较小,更快的更改以单独的方式发布到数据库模式。
“ Predictive Cloud Computing系统利用IBM DB2存储从源数据生成的聚合信息,并使用Graphite分析指标并分析我们的代码库。 这些工具中的每一个都使PCC系统能够存储,分析和检索大量数据。 ”
PCC系统使用JPA2的Apache OpenJPA实现。 为了使用JPA2与数据源建立连接,该数据源在persistence.xml文件中进行了描述。 清单1显示了一个示例persistence.xml文件。
清单1. OpenJPA persistence.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Aviator-Unit" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>com.ibm.ei.persistence.jpa.CloudStatisticsDAO</class>
<class>com.ibm.ei.persistence.jpa.CrawlerChecksum</class>
<class>com.ibm.ei.persistence.jpa.EventPredictionCountDAO</class>
<class>com.ibm.ei.persistence.jpa.EventStatisticsDAO</class>
<class>com.ibm.ei.persistence.jpa.LogCount</class>
<class>com.ibm.ei.persistence.jpa.HistoricalLogCount</class>
<class>com.ibm.ei.persistence.jpa.Path</class>
<class>com.ibm.ei.persistence.jpa.PlayerContentAnalysisDAO</class>
<class>com.ibm.ei.persistence.jpa.PlayerDAO</class>
<class>com.ibm.ei.persistence.jpa.CrawlerPlayerPopularity</class>
<class>com.ibm.ei.persistence.jpa.SiteDAO</class>
<class>com.ibm.ei.persistence.jpa.golf.FeaturedGroupDAO</class>
<class>com.ibm.ei.persistence.jpa.golf.HoleDAO</class>
<class>com.ibm.ei.persistence.jpa.golf.RoundDAO</class>
<class>com.ibm.ei.persistence.jpa.tennis.Match</class>
<class>com.ibm.ei.persistence.jpa.tennis.MatchStatus</class>
<class>com.ibm.ei.persistence.jpa.tennis.TennisCourt</class>
<class>com.ibm.ei.persistence.jpa.twitter.Mention</class>
<class>com.ibm.ei.persistence.jpa.twitter.PlayerSummary</class>
<class>com.ibm.ei.persistence.jpa.twitter.Retweet</class>
<class>com.ibm.ei.persistence.jpa.twitter.TweetDAO</class>
<class>com.ibm.ei.persistence.jpa.twitter.ReachDAO</class>
<class>com.ibm.ei.persistence.jpa.twitter.User</class>
<class>com.ibm.ei.persistence.jpa.HistoricalLogCount</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="openjpa.DynamicEnhancementAgent" value="true"/>
<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
<property name="openjpa.ConnectionDriverName" value="org.h2.Driver"/>
<property name="openjpa.ConnectionURL" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
<property name="openjpa.jdbc.Schema" value="eiblueus"/>
<property name="openjpa.DataCache" value="false"/>
<property name="openjpa.QueryCache" value="false"/>
<property name="openjpa.RemoteCommitProvider" value="sjvm"/>
<property name="openjpa.Multithreaded" value="false"/>
<property name="openjpa.QueryCompilationCache" value="false"/>
<property name="openjpa.jdbc.FinderCache" value="false"/>
</properties>
</persistence-unit>
</persistence>
在persistence.xml中,每个持久性单元都描述了一个JPA数据源。 该提供程序包含JPA实现的类名,并充当数据源初始化的入口点。 在提供者之后列出的是OpenJPA编译阶段应增强的类。 这些类是映射到关系数据的Java对象。 它们将在本文后面进一步详细探讨。 最后,在最后的properties元素中指定任何自定义配置属性。 在属性中可以配置诸如连接URL,数据库模式名称和缓存配置之类的详细信息。 应该将persistence.xml文件打包到Java jar META-INF目录中,以便JPA在运行时可以读取。
配置JPA数据源后,可以增强pers