forked from mirror/BlueMap
Fix storage performance
This commit is contained in:
parent
e02a43a521
commit
81e8da3b70
@ -172,7 +172,7 @@ private void writeToResponse(CompressedInputStream data, HttpResponse response,
|
|||||||
byte[] compressedData = byteOut.toByteArray();
|
byte[] compressedData = byteOut.toByteArray();
|
||||||
response.setData(new ByteArrayInputStream(compressedData));
|
response.setData(new ByteArrayInputStream(compressedData));
|
||||||
} else {
|
} else {
|
||||||
response.setData(data.decompress());
|
response.setData(new BufferedInputStream(data.decompress()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,11 +24,12 @@
|
|||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.storage;
|
package de.bluecolored.bluemap.core.storage;
|
||||||
|
|
||||||
import java.io.FilterInputStream;
|
import de.bluecolored.bluemap.core.util.DelegateInputStream;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
public class CompressedInputStream extends FilterInputStream {
|
public class CompressedInputStream extends DelegateInputStream {
|
||||||
|
|
||||||
private final Compression compression;
|
private final Compression compression;
|
||||||
|
|
||||||
|
@ -72,10 +72,8 @@ public OutputStream writeMapTile(String mapId, int lod, Vector2i tile) throws IO
|
|||||||
Path file = getFilePath(mapId, lod, tile);
|
Path file = getFilePath(mapId, lod, tile);
|
||||||
|
|
||||||
OutputStream os = FileHelper.createFilepartOutputStream(file);
|
OutputStream os = FileHelper.createFilepartOutputStream(file);
|
||||||
os = new BufferedOutputStream(os);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
os = compression.compress(os);
|
os = new BufferedOutputStream(compression.compress(os));
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
os.close();
|
os.close();
|
||||||
throw ex;
|
throw ex;
|
||||||
@ -92,8 +90,6 @@ public Optional<CompressedInputStream> readMapTile(String mapId, int lod, Vector
|
|||||||
if (!Files.exists(file)) return Optional.empty();
|
if (!Files.exists(file)) return Optional.empty();
|
||||||
|
|
||||||
InputStream is = Files.newInputStream(file, StandardOpenOption.READ);
|
InputStream is = Files.newInputStream(file, StandardOpenOption.READ);
|
||||||
is = new BufferedInputStream(is);
|
|
||||||
|
|
||||||
return Optional.of(new CompressedInputStream(is, compression));
|
return Optional.of(new CompressedInputStream(is, compression));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,9 +138,7 @@ public OutputStream writeMeta(String mapId, String name) throws IOException {
|
|||||||
Path file = getMetaFilePath(mapId, name);
|
Path file = getMetaFilePath(mapId, name);
|
||||||
|
|
||||||
OutputStream os = FileHelper.createFilepartOutputStream(file);
|
OutputStream os = FileHelper.createFilepartOutputStream(file);
|
||||||
os = new BufferedOutputStream(os);
|
return new BufferedOutputStream(os);
|
||||||
|
|
||||||
return os;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -154,9 +148,7 @@ public Optional<InputStream> readMeta(String mapId, String name) throws IOExcept
|
|||||||
if (!Files.exists(file)) return Optional.empty();
|
if (!Files.exists(file)) return Optional.empty();
|
||||||
|
|
||||||
InputStream is = Files.newInputStream(file, StandardOpenOption.READ);
|
InputStream is = Files.newInputStream(file, StandardOpenOption.READ);
|
||||||
is = new BufferedInputStream(is);
|
return Optional.of(new BufferedInputStream(is));
|
||||||
|
|
||||||
return Optional.of(is);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
|
||||||
public class MySQLStorage extends SQLStorage{
|
public class MySQLStorage extends SQLStorage {
|
||||||
|
|
||||||
public MySQLStorage(SQLStorageSettings config) throws MalformedURLException, SQLDriverException {
|
public MySQLStorage(SQLStorageSettings config) throws MalformedURLException, SQLDriverException {
|
||||||
super(MySQLDialect.INSTANCE, config);
|
super(MySQLDialect.INSTANCE, config);
|
||||||
|
@ -51,7 +51,7 @@ public PostgreSQLStorage(Dialect dialect, SQLStorageSettings config) throws Malf
|
|||||||
public OutputStream writeMapTile(String mapId, int lod, Vector2i tile) throws IOException {
|
public OutputStream writeMapTile(String mapId, int lod, Vector2i tile) throws IOException {
|
||||||
Compression compression = lod == 0 ? this.hiresCompression : Compression.NONE;
|
Compression compression = lod == 0 ? this.hiresCompression : Compression.NONE;
|
||||||
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
|
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
|
||||||
return new OnCloseOutputStream(compression.compress(byteOut), () -> {
|
return new OnCloseOutputStream(new BufferedOutputStream(compression.compress(byteOut)), () -> {
|
||||||
int mapFK = getMapFK(mapId);
|
int mapFK = getMapFK(mapId);
|
||||||
int tileCompressionFK = getMapTileCompressionFK(compression);
|
int tileCompressionFK = getMapTileCompressionFK(compression);
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ public OutputStream writeMapTile(String mapId, int lod, Vector2i tile) throws IO
|
|||||||
Compression compression = lod == 0 ? this.hiresCompression : Compression.NONE;
|
Compression compression = lod == 0 ? this.hiresCompression : Compression.NONE;
|
||||||
|
|
||||||
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
|
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
|
||||||
return new OnCloseOutputStream(compression.compress(byteOut), () -> {
|
return new OnCloseOutputStream(new BufferedOutputStream(compression.compress(byteOut)), () -> {
|
||||||
int mapFK = getMapFK(mapId);
|
int mapFK = getMapFK(mapId);
|
||||||
int tileCompressionFK = getMapTileCompressionFK(compression);
|
int tileCompressionFK = getMapTileCompressionFK(compression);
|
||||||
|
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
package de.bluecolored.bluemap.core.util;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
public class DelegateInputStream extends InputStream {
|
||||||
|
|
||||||
|
protected final InputStream in;
|
||||||
|
|
||||||
|
public DelegateInputStream(InputStream in) {
|
||||||
|
this.in = in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read() throws IOException {
|
||||||
|
return in.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read(byte @NotNull [] b) throws IOException {
|
||||||
|
return in.read(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read(byte @NotNull [] b, int off, int len) throws IOException {
|
||||||
|
return in.read(b, off, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] readAllBytes() throws IOException {
|
||||||
|
return in.readAllBytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] readNBytes(int len) throws IOException {
|
||||||
|
return in.readNBytes(len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int readNBytes(byte[] b, int off, int len) throws IOException {
|
||||||
|
return in.readNBytes(b, off, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long skip(long n) throws IOException {
|
||||||
|
return in.skip(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int available() throws IOException {
|
||||||
|
return in.available();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean markSupported() {
|
||||||
|
return in.markSupported();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void mark(int readlimit) {
|
||||||
|
in.mark(readlimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void reset() throws IOException {
|
||||||
|
in.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long transferTo(OutputStream out) throws IOException {
|
||||||
|
return in.transferTo(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package de.bluecolored.bluemap.core.util;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
public class DelegateOutputStream extends OutputStream {
|
||||||
|
|
||||||
|
protected final OutputStream out;
|
||||||
|
|
||||||
|
public DelegateOutputStream(OutputStream out) {
|
||||||
|
this.out = out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(int b) throws IOException {
|
||||||
|
out.write(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(byte @NotNull [] b) throws IOException {
|
||||||
|
out.write(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(byte @NotNull [] b, int off, int len) throws IOException {
|
||||||
|
out.write(b, off, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void flush() throws IOException {
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -24,11 +24,10 @@
|
|||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.util;
|
package de.bluecolored.bluemap.core.util;
|
||||||
|
|
||||||
import java.io.FilterInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
public class OnCloseInputStream extends FilterInputStream {
|
public class OnCloseInputStream extends DelegateInputStream {
|
||||||
|
|
||||||
private final AutoCloseable onClose;
|
private final AutoCloseable onClose;
|
||||||
|
|
||||||
@ -42,7 +41,7 @@ public void close() throws IOException {
|
|||||||
IOException ioExcetion = null;
|
IOException ioExcetion = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
in.close();
|
super.close();
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
ioExcetion = ex;
|
ioExcetion = ex;
|
||||||
}
|
}
|
||||||
|
@ -24,11 +24,10 @@
|
|||||||
*/
|
*/
|
||||||
package de.bluecolored.bluemap.core.util;
|
package de.bluecolored.bluemap.core.util;
|
||||||
|
|
||||||
import java.io.FilterOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
public class OnCloseOutputStream extends FilterOutputStream {
|
public class OnCloseOutputStream extends DelegateOutputStream {
|
||||||
|
|
||||||
private final AutoCloseable onClose;
|
private final AutoCloseable onClose;
|
||||||
|
|
||||||
@ -42,7 +41,7 @@ public void close() throws IOException {
|
|||||||
IOException ioExcetion = null;
|
IOException ioExcetion = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
out.close();
|
super.close();
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
ioExcetion = ex;
|
ioExcetion = ex;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user