Skip to content

Commit 4501f3c

Browse files
committed
performance: replace String.getBytes by inputstream
1 parent b5869de commit 4501f3c

4 files changed

Lines changed: 35 additions & 24 deletions

File tree

.run/ReplicaDB.run.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<component name="ProjectRunConfigurationManager">
2+
<configuration default="false" name="ReplicaDB" type="Application" factoryName="Application">
3+
<option name="MAIN_CLASS_NAME" value="org.replicadb.ReplicaDB" />
4+
<module name="ReplicaDB" />
5+
<option name="PROGRAM_PARAMETERS" value="--options-file $PROJECT_DIR$/conf/mariadb2oracle.conf" />
6+
<option name="VM_PARAMETERS" value="-Xmx256M -Xms256M" />
7+
<extension name="software.aws.toolkits.jetbrains.core.execution.JavaAwsConnectionExtension">
8+
<option name="credential" />
9+
<option name="region" />
10+
<option name="useCurrentConnection" value="false" />
11+
</extension>
12+
<method v="2">
13+
<option name="Make" enabled="true" />
14+
</method>
15+
</configuration>
16+
</component>

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ ReplicaDB is written in Java and requires a Java Runtime Environment (JRE) Stand
5151
Just download [latest](https://github.com/osalvador/ReplicaDB/releases) release and unzip it.
5252

5353
```bash
54-
$ curl -o ReplicaDB-0.12.0.tar.gz -L "https://github.com/osalvador/ReplicaDB/releases/download/v0.12.0/ReplicaDB-0.12.0.tar.gz"
55-
$ tar -xvzf ReplicaDB-0.12.0.tar.gz
54+
$ curl -o ReplicaDB-0.12.1.tar.gz -L "https://github.com/osalvador/ReplicaDB/releases/download/v0.12.1/ReplicaDB-0.12.1.tar.gz"
55+
$ tar -xvzf ReplicaDB-0.12.1.tar.gz
5656
$ ./bin/replicadb --help
5757
```
5858

@@ -157,9 +157,9 @@ $ replicadb --mode=complete -j=1 \
157157
| MariaDB | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
158158
| PostgreSQL | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
159159
| SQLite | :heavy_check_mark: | :heavy_check_mark: | :heavy_multiplication_x: | :heavy_check_mark: | :heavy_check_mark: |
160+
| SQL Server | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_multiplication_x: |
160161
| Denodo | :heavy_check_mark: | N/A | N/A | N/A | N/A |
161162
| CSV | :heavy_check_mark: | :heavy_check_mark: | N/A | :heavy_check_mark: | :heavy_check_mark: |
162-
| SQL Server | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_multiplication_x: |
163163
| Kafka | :heavy_multiplication_x: | N/A | N/A | :heavy_check_mark: | :heavy_check_mark: |
164164
| Amazon S3 | :heavy_multiplication_x: | :heavy_check_mark: | N/A | N/A | :heavy_check_mark: |
165165

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.replicadb</groupId>
88
<artifactId>ReplicaDB</artifactId>
9-
<version>0.12.0</version>
9+
<version>0.12.1</version>
1010

1111
<name>ReplicaDB</name>
1212
<url>https://github.com/osalvador/ReplicaDB</url>

src/main/java/org/replicadb/manager/MySQLManager.java

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.replicadb.manager;
22

3+
import com.google.common.io.CharSource;
34
import com.mysql.cj.jdbc.JdbcPreparedStatement;
45
import org.apache.commons.codec.binary.Hex;
6+
import org.apache.commons.io.input.ReaderInputStream;
57
import org.mariadb.jdbc.MariaDbStatement;
68

79
import org.apache.logging.log4j.LogManager;
@@ -10,7 +12,6 @@
1012
import org.replicadb.cli.ToolOptions;
1113
import org.replicadb.manager.util.BandwidthThrottling;
1214

13-
import java.io.ByteArrayInputStream;
1415
import java.io.IOException;
1516
import java.nio.charset.StandardCharsets;
1617
import java.sql.*;
@@ -82,7 +83,6 @@ public int insertDataToTable (ResultSet resultSet, int taskId) throws SQLExcepti
8283
StringBuilder row = new StringBuilder();
8384
StringBuilder cols = new StringBuilder();
8485

85-
byte[] bytes = "".getBytes();
8686
String colValue;
8787
int rowCounts = 0;
8888
int batchSize = options.getFetchSize();
@@ -132,17 +132,8 @@ public int insertDataToTable (ResultSet resultSet, int taskId) throws SQLExcepti
132132
row.append("\n");
133133

134134
// Copy data to mysql
135-
bytes = row.toString().getBytes(StandardCharsets.UTF_8);
136-
137135
if (++rowCounts % batchSize == 0) {
138-
if (mysqlStatement != null) {
139-
mysqlStatement.setLocalInfileInputStream(new ByteArrayInputStream(bytes));
140-
mysqlStatement.executeUpdate(loadDataSql);
141-
} else {
142-
assert mariadbStatement != null;
143-
mariadbStatement.setLocalInfileInputStream(new ByteArrayInputStream(bytes));
144-
mariadbStatement.executeUpdate(loadDataSql);
145-
}
136+
copyData(loadDataSql, row, mariadbStatement, mysqlStatement);
146137

147138
// Clear StringBuilders
148139
row.setLength(0); // set length of buffer to 0
@@ -159,14 +150,7 @@ public int insertDataToTable (ResultSet resultSet, int taskId) throws SQLExcepti
159150

160151
// insert remaining records
161152
if (rowCounts != 0) {
162-
if (mysqlStatement != null) {
163-
mysqlStatement.setLocalInfileInputStream(new ByteArrayInputStream(bytes));
164-
mysqlStatement.executeUpdate(loadDataSql);
165-
} else {
166-
assert mariadbStatement != null;
167-
mariadbStatement.setLocalInfileInputStream(new ByteArrayInputStream(bytes));
168-
mariadbStatement.executeUpdate(loadDataSql);
169-
}
153+
copyData(loadDataSql, row, mariadbStatement, mysqlStatement);
170154
}
171155

172156
} catch (Exception e) {
@@ -178,6 +162,17 @@ public int insertDataToTable (ResultSet resultSet, int taskId) throws SQLExcepti
178162
return totalRows;
179163
}
180164

165+
private void copyData (String loadDataSql, StringBuilder row, MariaDbStatement mariadbStatement, JdbcPreparedStatement mysqlStatement) throws IOException, SQLException {
166+
if (mysqlStatement != null) {
167+
mysqlStatement.setLocalInfileInputStream(new ReaderInputStream(CharSource.wrap(row).openStream(), StandardCharsets.UTF_8));
168+
mysqlStatement.executeUpdate(loadDataSql);
169+
} else {
170+
assert mariadbStatement != null;
171+
mariadbStatement.setLocalInfileInputStream(new ReaderInputStream(CharSource.wrap(row).openStream(), StandardCharsets.UTF_8));
172+
mariadbStatement.executeUpdate(loadDataSql);
173+
}
174+
}
175+
181176
private String getLoadDataSql (String tableName, String allColumns, ResultSetMetaData rsmd) throws SQLException {
182177
StringBuilder loadDataSql = new StringBuilder();
183178
loadDataSql.append("LOAD DATA LOCAL INFILE 'dummy' INTO TABLE ");

0 commit comments

Comments
 (0)