diff --git a/ycsb-mongodb/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java b/ycsb-mongodb/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java index 5de4d92d50..4c13917882 100644 --- a/ycsb-mongodb/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java +++ b/ycsb-mongodb/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java @@ -85,6 +85,10 @@ public class MongoDbClient extends DB { private static InsertOptions io = new InsertOptions().continueOnError(true); + /** Measure of how compressible the data is, compressibility=10 means the data can compress tenfold. + * The default is 1, which is uncompressible */ + private static float compressibility = (float) 1.0; + /** * Initialize any state for this DB. * Called once per DB instance; there is one DB instance per client thread. @@ -107,6 +111,9 @@ public void init() throws DBException { final String batchSizeString = props.getProperty("batchsize", "1"); BATCHSIZE = Integer.parseInt(batchSizeString); + final String compressibilityString = props.getProperty("compressibility", "1"); + this.compressibility = Float.parseFloat(compressibilityString); + // Set connectionpool to size of ycsb thread pool final String maxConnections = props.getProperty("threadcount", "100"); @@ -210,6 +217,16 @@ public void cleanup() throws DBException { } } + private byte[] applyCompressibility(byte[] data){ + long string_length = data.length; + + long random_string_length = (int) Math.round(string_length /compressibility); + long compressible_len = string_length - random_string_length; + for(int i=0;i keys = values.keySet().iterator(); while (keys.hasNext()) { String tmpKey = keys.next(); - fieldsToSet.put(tmpKey, values.get(tmpKey).toArray()); - + byte[] data = values.get(tmpKey).toArray(); + fieldsToSet.put(tmpKey, applyCompressibility(data)); } u.put("$set", fieldsToSet); WriteResult res = collection.update(q, u);