Я получаю данные из Apache Phoenix, используя Java.Java-клиент выполняет запрос на сервере запросов Phoenix.Я добавил следующие зависимости в pom.xml:
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.14.0-HBase-1.4</version>
</dependency>
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-queryserver-client</artifactId>
<version>4.8.1-HBase-1.2</version>
</dependency>
Ниже приведен мой код Java:
public class SamplePhoenixConnection {
static final String DB_URL = "jdbc:phoenix:thin:url=http://<IP>:<PORT>;serialization=PROTOBUF";
public static void main(String args[]) throws Exception {
Connection conn = null;
Statement st = null;
try {
Class.forName("org.apache.phoenix.queryserver.client.Driver");
conn = DriverManager.getConnection(DB_URL);
conn.setAutoCommit(false);
conn.setReadOnly(true);
conn.setSchema("DL");
st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
st.setFetchSize(100);
String sql = "SELECT DISTINCT EMPLOYMENTSTATUS, EMPLOYEECODE , DESIGNATIONNAME, DATEOFBIRTH, BAND FROM EMPLOYEE WHERE TENANTID = '10'";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString(1) + " : " + rs.getString(2) + " : " + rs.getString(3) + " : "
+ rs.getString(4) + " : " + rs.getString(5));
}
rs.close();
st.close();
conn.close();
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException se2) {
se2.printStackTrace();
}
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}
Хотя кластер Феникс настроен правильно, и я также включил необходимое солениеи индексация таблицы феникса, но код все еще занимал время для извлечения записей.Для дальнейшей отладки я добавил журналы времени, чтобы проверить, какой раздел потребляет больше времени, и обнаружил, что следующий раздел потребляет примерно 1,5 секунды на 1000 записей:
while (rs.next()) {
System.out.println(rs.getString(1) + " : " + rs.getString(2) + " : " + rs.getString(3) + " : "
+ rs.getString(4) + " : " + rs.getString(5));
}
Даже если я удаляю часть печати изцикл и держать только while(rs.next()){}
, он все еще потребляет почти то же время.Что может быть исправлением этой медлительности?